Добавить agent.py
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
"""
|
||||||
|
agent.py — AI-агент с RAG-памятью на базе Ollama (llama3) и Qdrant.
|
||||||
|
|
||||||
|
Использует create_react_agent из langgraph (рекомендуемый способ в LangChain v0.3+)
|
||||||
|
с системным промптом, инструктирующим агента работать с базой знаний.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from langchain_ollama import ChatOllama
|
||||||
|
from langgraph.prebuilt import create_react_agent
|
||||||
|
from langchain_core.messages import SystemMessage
|
||||||
|
|
||||||
|
from tools import search_knowledge_base, add_to_knowledge_base
|
||||||
|
|
||||||
|
# ── Модель ────────────────────────────────────────────────────────────────────
|
||||||
|
LLM_MODEL = "llama3"
|
||||||
|
|
||||||
|
llm = ChatOllama(model=LLM_MODEL, temperature=0.3)
|
||||||
|
|
||||||
|
# ── Системный промпт ──────────────────────────────────────────────────────────
|
||||||
|
SYSTEM_PROMPT = """Ты — интеллектуальный AI-ассистент с доступом к локальной базе знаний.
|
||||||
|
|
||||||
|
Правила работы:
|
||||||
|
1. ВСЕГДА начинай с поиска в базе знаний с помощью инструмента search_knowledge_base,
|
||||||
|
прежде чем отвечать на вопрос пользователя.
|
||||||
|
2. Если в базе найдена релевантная информация — используй её как основу ответа
|
||||||
|
и явно ссылайся на источник.
|
||||||
|
3. Если пользователь просит сохранить информацию — используй add_to_knowledge_base.
|
||||||
|
4. Если база знаний не содержит нужной информации — честно сообщи об этом
|
||||||
|
и постарайся помочь на основе своих знаний.
|
||||||
|
5. Отвечай на том же языке, на котором задан вопрос.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# ── Агент ─────────────────────────────────────────────────────────────────────
|
||||||
|
rag_tools = [search_knowledge_base, add_to_knowledge_base]
|
||||||
|
|
||||||
|
agent = create_react_agent(
|
||||||
|
model=llm,
|
||||||
|
tools=rag_tools,
|
||||||
|
prompt=SYSTEM_PROMPT,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def run_agent(user_input: str) -> str:
|
||||||
|
"""
|
||||||
|
Запускает агента с переданным запросом и возвращает финальный ответ.
|
||||||
|
"""
|
||||||
|
result = agent.invoke({"messages": [("user", user_input)]})
|
||||||
|
# Финальное сообщение — последнее от ассистента
|
||||||
|
for msg in reversed(result["messages"]):
|
||||||
|
if msg.type == "ai" and msg.content:
|
||||||
|
return msg.content
|
||||||
|
return "Агент не вернул ответ."
|
||||||
Reference in New Issue
Block a user