From f303b7bd79e4f8768080b4dc9b47395e2fc2c2b9 Mon Sep 17 00:00:00 2001 From: RomanKurlygin Date: Tue, 26 May 2026 07:24:29 +0000 Subject: [PATCH] add rag_tools.py --- rag_tools.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 rag_tools.py diff --git a/rag_tools.py b/rag_tools.py new file mode 100644 index 0000000..c3f45b0 --- /dev/null +++ b/rag_tools.py @@ -0,0 +1,47 @@ +"""RAG-инструменты агента.""" +from __future__ import annotations + +from langchain.tools import tool + +from knowledge_base import KnowledgeBase + +_kb = KnowledgeBase() + + +def get_knowledge_base() -> KnowledgeBase: + return _kb + + +@tool +def search_knowledge_base(query: str, max_results: int = 5) -> str: + """Семантический поиск в базе знаний. + + Args: + query: Поисковый запрос на естественном языке. + max_results: Максимум результатов (по умолчанию 5). + """ + results = _kb.search(query, max_results=max_results) + if not results: + return "По запросу ничего не найдено." + lines = [f"Найдено: {len(results)} фрагмент(ов)\n"] + for idx, item in enumerate(results, start=1): + lines.append( + f"{idx}. [{item['title']}] (score={item['score']})\n{item['content']}\n" + ) + return "\n".join(lines) + + +@tool +def add_to_knowledge_base(content: str, title: str) -> str: + """Добавление документа в базу знаний. + + Args: + content: Текст документа. + title: Заголовок / имя документа. + """ + if not content.strip(): + return "Ошибка: пустой content." + if not title.strip(): + return "Ошибка: пустой title." + chunks = _kb.add_document(content.strip(), title.strip()) + return f"Документ «{title}» добавлен ({chunks} чанк(ов))."