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