From 6f9fe35ef3f3f72f2549ff769d9ff41b8cc4b0b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AD=D0=BC=D0=B8=D0=BB=D1=8C=20=D0=90=D0=BC=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Mon, 25 May 2026 22:10:55 +0000 Subject: [PATCH] add rag_tools.py --- rag_tools.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 rag_tools.py diff --git a/rag_tools.py b/rag_tools.py new file mode 100644 index 0000000..4a03c84 --- /dev/null +++ b/rag_tools.py @@ -0,0 +1,38 @@ +"""RAG-инструменты для агента.""" +from __future__ import annotations + +from langchain.tools import tool + +from vector_store import add_document_to_store, search_store + + +@tool +def search_knowledge_base(query: str, max_results: int = 4) -> str: + """Семантический поиск в базе знаний. + + Args: + query: поисковый запрос + max_results: максимум фрагментов в ответе + """ + hits = search_store(query, max_results=max_results) + if not hits: + return "В базе знаний ничего не найдено." + lines = [] + for doc, score in hits: + title = doc.metadata.get("title", "без названия") + lines.append( + f"[релевантность={score:.3f}] {title}: {doc.page_content[:400]}" + ) + return "\n\n".join(lines) + + +@tool +def add_to_knowledge_base(content: str, title: str) -> str: + """Добавляет документ в векторную базу знаний. + + Args: + content: текст документа + title: заголовок / имя документа + """ + chunks = add_document_to_store(content, title) + return f"Документ '{title}' добавлен ({chunks} чанков)."