51 lines
2.8 KiB
Python
51 lines
2.8 KiB
Python
"""
|
|
agent.py — AI-агент с RAG-памятью на базе Ollama (llama3) и Qdrant.
|
|
|
|
Использует create_agent из langchain.agents с системным промптом,
|
|
инструктирующим агента работать с базой знаний.
|
|
"""
|
|
|
|
from langchain.agents import create_agent
|
|
from langchain_ollama import ChatOllama
|
|
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_agent(
|
|
model=llm,
|
|
tools=rag_tools,
|
|
system_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 "Агент не вернул ответ." |