restore own solution: rag_tools.py

This commit is contained in:
2026-05-27 13:27:59 +00:00
parent 548e41fa4a
commit 0593ff75ca
+17 -30
View File
@@ -1,19 +1,9 @@
"""RAG-инструменты агента.""" """RAG-инструменты для агента."""
from __future__ import annotations from __future__ import annotations
from langchain.tools import tool from langchain.tools import tool
from knowledge_base import KnowledgeBase, build_knowledge_base from vector_store import add_document_to_store, search_store
_kb: KnowledgeBase | None = None
def get_knowledge_base() -> KnowledgeBase:
"""Ленивая инициализация — не подключаем Ollama при импорте модуля."""
global _kb
if _kb is None:
_kb = build_knowledge_base()
return _kb
@tool @tool
@@ -21,31 +11,28 @@ def search_knowledge_base(query: str, max_results: int = 5) -> str:
"""Семантический поиск в базе знаний. """Семантический поиск в базе знаний.
Args: Args:
query: Поисковый запрос на естественном языке. query: поисковый запрос
max_results: Максимум результатов (по умолчанию 5). max_results: максимум фрагментов в ответе
""" """
results = get_knowledge_base().search(query, max_results=max_results) hits = search_store(query, max_results=max_results)
if not results: if not hits:
return "По запросу ничего не найдено." return "В базе знаний ничего не найдено."
lines = [f"Найдено: {len(results)} фрагмент(ов)\n"] lines = []
for idx, item in enumerate(results, start=1): for doc, score in hits:
title = doc.metadata.get("title", "без названия")
lines.append( lines.append(
f"{idx}. [{item['title']}] (score={item['score']})\n{item['content']}\n" f"[релевантность={score:.3f}] {title}: {doc.page_content[:400]}"
) )
return "\n".join(lines) return "\n\n".join(lines)
@tool @tool
def add_to_knowledge_base(content: str, title: str) -> str: def add_to_knowledge_base(content: str, title: str) -> str:
"""Добавление документа в базу знаний. """Добавляет документ в векторную базу знаний.
Args: Args:
content: Текст документа. content: текст документа
title: Заголовок / имя документа. title: заголовок / имя документа
""" """
if not content.strip(): chunks = add_document_to_store(content, title)
return "Ошибка: пустой content." return f"Документ '{title}' добавлен ({chunks} чанков)."
if not title.strip():
return "Ошибка: пустой title."
chunks = get_knowledge_base().add_document(content.strip(), title.strip())
return f"Документ «{title}» добавлен ({chunks} чанк(ов))."