From c16c72020bd995cc9ded1abe4e57ec6e716fbf37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=91=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Thu, 28 May 2026 10:09:03 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20tools.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tools.py diff --git a/tools.py b/tools.py new file mode 100644 index 0000000..09a7f16 --- /dev/null +++ b/tools.py @@ -0,0 +1,57 @@ +""" +tools.py — RAG-инструменты для агента. + +Два инструмента через декоратор @tool: + • search_knowledge_base — семантический поиск в базе знаний + • add_to_knowledge_base — добавление документа в базу +""" + +from langchain_core.tools import tool +from vector_store import add_documents, search + + +@tool +def search_knowledge_base(query: str, max_results: int = 5) -> str: + """ + Выполняет семантический поиск в базе знаний. + + Args: + query: поисковый запрос на естественном языке. + max_results: максимальное количество возвращаемых результатов (по умолчанию 5). + + Returns: + Строка с найденными фрагментами и их оценками релевантности. + """ + results = search(query, max_results=max_results) + + if not results: + return "В базе знаний ничего не найдено по данному запросу." + + lines = [] + for i, (doc, score) in enumerate(results, start=1): + title = doc.metadata.get("title", "—") + chunk = doc.metadata.get("chunk_index", 0) + lines.append( + f"[{i}] (score={score:.3f}) «{title}» chunk#{chunk}\n{doc.page_content}" + ) + + return "\n\n".join(lines) + + +@tool +def add_to_knowledge_base(content: str, title: str = "") -> str: + """ + Добавляет новый документ в базу знаний. + + Args: + content: текстовое содержимое документа. + title: название / источник документа (необязательно). + + Returns: + Сообщение об успехе с количеством созданных чанков. + """ + n_chunks = add_documents(content, title=title) + return ( + f"Документ «{title or 'без названия'}» успешно добавлен в базу знаний. " + f"Создано чанков: {n_chunks}." + ) \ No newline at end of file