# FAQ‑бот курса KFU-26-1 (ChromaDB + MCP‑style tool) Агент отвечает на вопросы по конспектам курса (ChromaDB) и при необходимости вызывает MCP‑style инструмент для метаданных (расписание, дедлайны, контакты). ## Стек | Компонент | Технология | |-----------|------------| | LLM | BroJS gpt-oss-20b (ChatOpenAI) | | Embeddings | Ollama nomic-embed-text | | Векторная БД | ChromaDB (langchain-chroma) | | MCP‑style tool | fetch_course_meta (httpx / static JSON) | | Фреймворк | LangChain + LangGraph | ## Установка ```bash ollama pull nomic-embed-text pip install -r requirements.txt ``` Добавь в `.env`: ``` JOURNAL_MCP_PAT=твой_токен ``` ## Запуск ```bash python main.py ``` ## Структура проекта | Файл | Назначение | |------|-----------| | `data/faq_general.md` | FAQ: общие вопросы курса | | `data/faq_langchain.md` | FAQ: LangChain | | `data/faq_langgraph.md` | FAQ: LangGraph | | `vectorstore.py` | ChromaDB + Ollama embeddings + load_faq_to_chroma() | | `tools.py` | search_course_docs (chroma) + fetch_course_meta (mcp) | | `agent.py` | Агент с маршрутизацией по источнику | | `main.py` | CLI: 3 демо‑вопроса + интерактивный режим | ## Архитектура маршрутизации ``` Вопрос пользователя | v Агент (LLM решает) | +---------+-----------+ | | v v search_course_docs fetch_course_meta [source: chroma] [source: mcp_meta] | | v v ChromaDB Static JSON (Ollama embeddings) (в проде — MCP tool call) ``` ## MCP‑style tool `fetch_course_meta` имитирует вызов MCP‑сервера метаданных курса. В production‑среде это был бы `mcp tool list` + `mcp tool call` к реальному MCP‑серверу. Текущая реализация использует статический JSON — достаточно для демонстрации паттерна. ## Демо‑вопросы | Вопрос | Источник | |--------|---------| | Что такое LangGraph и как он отличается от LangChain? | chroma | | Как создать инструмент tool в LangChain? | chroma | | Когда дедлайн финального проекта? | mcp_meta |