restore own solution: rag_tools.py
This commit is contained in:
+17
-30
@@ -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} чанк(ов))."
|
|
||||||
|
|||||||
Reference in New Issue
Block a user