НачатьНачать бесплатно

Проектирование с состоянием: создание инструмента поиска RAG

В предыдущем уроке вы узнали, как создать векторную базу знаний из руководств по бытовой технике и выполнять в ней поиск с помощью эмбеддингов (векторных представлений).

Теперь вы создадите пользовательский инструмент, который обёртывает эту логику поиска, чтобы агент мог использовать его для ответов на вопросы о бытовой технике.

Инструмент, который вы напишете, будет наследоваться от базового класса Tool и принимать один входной параметр: вопрос об эксплуатации устройства.

Вам уже доступны:

  • Переменная vector_store, содержащая заранее построенный индекс FAISS
  • Фрагменты документов с содержимым руководств по бытовой технике, преобразованные в векторы и готовые к поиску

Ваша задача — реализовать структуру и логику инструмента, который откроет агенту доступ к этой базе знаний.

Это упражнение является частью курса

ИИ-агенты с Hugging Face smolagents

Посмотреть курс

Инструкции к упражнению

  • Примите параметр vector_store в методе __init__().
  • Добавьте query в качестве параметра метода forward().
  • Используйте self.k, чтобы задать количество релевантных документов, возвращаемых в результате поиска по сходству.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

class ApplianceSearchTool(Tool):
    name = "appliance_manual_search"
    description = "Search appliance manuals for maintenance and usage information"
    inputs = {"query": {"type": "string", "description": "Question about appliance operation"}}
    output_type = "string"

    # Pass the vector store into the constructor
    def __init__(self, ____, k=3):
        super().__init__()
        self.vector_store = vector_store
        self.k = k

    # Accept the query string as input to the forward method
    def forward(self, ____):
        # Use self.k here to specify how many chunks to return
        docs = self.vector_store.similarity_search(query, k=____)
        return "\n\n".join(doc.page_content for doc in docs) or "No relevant manual sections found."
Редактировать и запускать код