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