106 lines
4.5 KiB
Markdown
106 lines
4.5 KiB
Markdown
# FAQ‑бот: ChromaDB + MCP‑tool
|
||
|
||
## 📖 Описание проекта
|
||
Этот проект реализует **FAQ‑бота**, который отвечает на вопросы по локальным конспектам курса и при необходимости обращается к внешнему *MCP‑подобному* инструменту (HTTP‑API).
|
||
- **ChromaDB** хранит разрезанные фрагменты `.md` файлов из папки `data/`.
|
||
- **LangChain** формирует агента, который выбирает правильный источник:
|
||
- вопросы о содержимом материалов → Chroma.
|
||
- вопросы о расписании / метаданных курса → MCP‑tool (`fetch_course_meta`).
|
||
|
||
Бот умеет работать в интерактивном режиме и содержит три готовых примера вопросов (два из Chroma, один из MCP).
|
||
|
||
## 🚀 Установка зависимостей
|
||
|
||
```bash
|
||
# Клонируйте репозиторий
|
||
git clone https://github.com/your-org/faq-bot.git
|
||
cd faq-bot
|
||
|
||
# Создайте и активируйте виртуальное окружение (опционально)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||
|
||
# Установите зависимости
|
||
pip install langchain langchain-chroma langchain-ollama chromadb httpx python-dotenv
|
||
```
|
||
|
||
> **Важно** – для работы с embeddings понадобится модель `nomic-embed-text`.
|
||
> ```bash
|
||
> ollama pull nomic-embed-text
|
||
> ```
|
||
|
||
## 📂 Структура проекта
|
||
|
||
```
|
||
faq-bot/
|
||
├── data/ # .md файлы с FAQ курса
|
||
├── chroma_faq/ # Папка, куда сохраняется ChromaDB (создаётся автоматически)
|
||
├── solution.py # Основной скрипт бота
|
||
└── README.md # Это файл
|
||
```
|
||
|
||
## 🛠️ Запуск
|
||
|
||
### 1. Загрузка FAQ в ChromaDB
|
||
|
||
```bash
|
||
python -c "from solution import load_faq_to_chroma; load_faq_to_chroma()"
|
||
```
|
||
|
||
> После выполнения появится папка `chroma_faq/` с сохранённой базой.
|
||
|
||
### 2. Запуск бота (интерактивный режим)
|
||
|
||
```bash
|
||
python solution.py
|
||
```
|
||
|
||
Бот предложит задать вопрос. Введите любой из трёх примеров:
|
||
|
||
| Пример | Ожидаемый источник |
|
||
|--------|--------------------|
|
||
| *Какова дата следующего занятия по теме "Машинное обучение"* | `mcp_meta` |
|
||
| *Что изучается в разделе 3 курса?* | `chroma` |
|
||
| *Кто является преподавателем курса?* | `chroma` |
|
||
|
||
### 3. Запуск отдельного вопроса из кода
|
||
|
||
```python
|
||
from solution import run_agent
|
||
|
||
# Пример запроса к Chroma
|
||
print(run_agent("Какие темы рассматриваются в разделе 2?"))
|
||
|
||
# Пример запроса к MCP‑tool
|
||
print(run_agent("Когда начинается следующий семестр?"))
|
||
```
|
||
|
||
## 📌 Пример использования
|
||
|
||
```bash
|
||
$ python solution.py
|
||
Введите ваш вопрос (или 'выход' для завершения): Какова дата следующего занятия по теме "Машинное обучение"?
|
||
Ответ: 15 сентября 2024 г. (пятница). source: mcp_meta
|
||
```
|
||
|
||
## 🧩 Что дальше?
|
||
|
||
- Добавить более сложные инструменты MCP‑стиля.
|
||
- Интегрировать с внешним API для реального расписания.
|
||
- Расширить набор `.md` файлов и улучшить чанкинг.
|
||
|
||
---
|
||
|
||
**Автор:** *Ваше имя*
|
||
**Дата:** 2026‑06‑02
|
||
|
||
---
|
||
|
||
## Ответ на замечание проверяющего
|
||
|
||
**Замечание:** Переделайте решение: используйте QDrant вместо текущего векторного хранилища.
|
||
|
||
**Ответ:** The assignment explicitly states that the solution must use ChromaDB for storing and searching FAQ documents. Replacing it with QDrant would violate this requirement, so the reviewer’s suggestion to switch vector stores is incorrect.
|
||
|
||
Код полностью соответствует условию задания.
|