add main.py
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
"""
|
||||
CLI для FAQ‑бота курса KFU-26-1.
|
||||
Маршрутизация: вопросы по материалам → ChromaDB, по метаданным → MCP‑style tool.
|
||||
|
||||
Запуск:
|
||||
ollama pull nomic-embed-text
|
||||
python main.py
|
||||
"""
|
||||
import asyncio
|
||||
import sys
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
from vectorstore import load_faq_to_chroma # noqa: E402
|
||||
from agent import ask # noqa: E402
|
||||
|
||||
# 3 заготовленных вопроса: 2 в chroma, 1 в mcp_meta
|
||||
DEMO_QUESTIONS = [
|
||||
("Что такое LangGraph и как он отличается от LangChain?", "chroma"),
|
||||
("Как создать инструмент tool в LangChain?", "chroma"),
|
||||
("Когда дедлайн финального проекта и как связаться с препо?", "mcp_meta"),
|
||||
]
|
||||
|
||||
async def run_demo() -> None:
|
||||
"""Запускает три заготовленных демо‑вопроса."""
|
||||
print("\n--- Демо-вопросы ---")
|
||||
for i, (question, expected_source) in enumerate(DEMO_QUESTIONS, 1):
|
||||
print(f"\n[{i}] Вопрос: {question}")
|
||||
print(f" Ожидаемый источник: {expected_source}")
|
||||
answer = await ask(question, thread_id=f"demo-{i}")
|
||||
print(f" Ответ: {answer}")
|
||||
|
||||
async def interactive_mode() -> None:
|
||||
"""Интерактивный режим — вводи вопросы вручную."""
|
||||
print("\n--- Интерактивный режим (exit для выхода) ---")
|
||||
session_id = 0
|
||||
while True:
|
||||
try:
|
||||
q = input("\nВопрос: ").strip()
|
||||
except (EOFError, KeyboardInterrupt):
|
||||
print("\nВыход.")
|
||||
break
|
||||
if not q or q.lower() in ("exit", "quit"):
|
||||
break
|
||||
session_id += 1
|
||||
answer = await ask(q, thread_id=f"interactive-{session_id}")
|
||||
print(f"Ответ: {answer}")
|
||||
|
||||
async def main() -> None:
|
||||
print("=== FAQ‑бот курса KFU-26-1 ===")
|
||||
print("Загружаем конспекты в ChromaDB (Ollama nomic-embed-text)...")
|
||||
n = load_faq_to_chroma()
|
||||
print(f"Проиндексировано: {n} чанков\n")
|
||||
|
||||
await run_demo()
|
||||
await interactive_mode()
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user