38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
import os
|
|
from langchain.agents import initialize_agent, Tool
|
|
from langchain.llms import Ollama
|
|
from langchain.chains import RetrievalQA
|
|
from langchain_ollama import OllamaEmbeddings
|
|
from langchain_chroma import Chroma
|
|
from src.utils import search_course_docs
|
|
from src.mcp_tool import fetch_course_meta, start_meta_server
|
|
|
|
# Start mock server
|
|
start_meta_server()
|
|
|
|
# Define tools
|
|
search_tool = Tool(
|
|
name="search_course_docs",
|
|
func=lambda q: "\n".join([doc.page_content for doc in search_course_docs(q, k=3)]),
|
|
description="Search local FAQ documents. Use when question is about course content."
|
|
)
|
|
|
|
meta_tool = Tool(
|
|
name="fetch_course_meta",
|
|
func=lambda q: str(fetch_course_meta(q)),
|
|
description="Get course metadata like schedule or instructor. Use when question is about schedule or meta."
|
|
)
|
|
|
|
# LLM and agent
|
|
llm = Ollama(model="llama3.1")
|
|
agent = initialize_agent([search_tool, meta_tool], llm, agent_type="zero-shot-react-description", verbose=True)
|
|
|
|
if __name__ == "__main__":
|
|
print("FAQ-бот готов. Введите вопрос (или 'exit'): ")
|
|
while True:
|
|
q = input("> ")
|
|
if q.lower() in {"exit", "quit"}:
|
|
break
|
|
response = agent.run(q)
|
|
print(response)
|