Проектирование с состоянием: создание инструмента поиска 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."