50 lines
2.6 KiB
Markdown
50 lines
2.6 KiB
Markdown
# FAQ‑бот (ChromaDB + MCP‑tool)
|
||
|
||
## Что делает проект
|
||
|
||
* Загружает локальные `.md` файлы с материалами курса в **Chroma**.
|
||
* Создаёт инструмент `search_course_docs(query, k=3)` для поиска по этим материалам.
|
||
* Реализует один MCP‑подобный HTTP‑инструмент `fetch_course_meta(query)` – возвращает метаданные расписания из статического JSON.
|
||
* Агент на базе **LangChain** маршрутизирует запросы: если вопрос относится к содержимому курса, он использует Chroma; если к расписанию/метаданным – MCP‑tool.
|
||
|
||
## Структура репозитория
|
||
```
|
||
├── data/ # исходные .md файлы
|
||
│ ├── faq1.md
|
||
│ └── faq2.md
|
||
├── meta.json # статический JSON с расписанием
|
||
├── main.py # точка входа, CLI и агент
|
||
├── requirements.txt # зависимости
|
||
└── README.md
|
||
```
|
||
|
||
## Установка
|
||
```bash
|
||
# 1. Откатить Ollama embedding model
|
||
ollama pull nomic-embed-text
|
||
|
||
# 2. Установить зависимости
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Запуск
|
||
```bash
|
||
python main.py
|
||
```
|
||
Вы увидите три готовых вопроса и сможете задать свой.
|
||
|
||
## Как работает агент
|
||
1. **Chroma** хранит векторные представления всех блоков текста из `data/*.md`.
|
||
2. При запросе агент сначала пытается понять, относится ли он к материалам курса (проверка ключевых слов «материал», «конспект» и т.п.).
|
||
3. Если да – вызывает `search_course_docs`, получает 3 наиболее релевантных фрагмента и формирует ответ.
|
||
4. Иначе – вызывает MCP‑tool `fetch_course_meta` и возвращает данные о расписании.
|
||
|
||
## Тестовые вопросы
|
||
1. *Какой материал по теме «LangChain» доступен в конспектах?*
|
||
2. *Кто преподавал лекцию 12 июня?*
|
||
3. *Что нужно сделать, чтобы подключить Ollama embeddings?*
|
||
|
||
---
|
||
|
||
**Важно:** проект не использует Tavily и не дублирует задание «Chroma + Tavily web search».
|