95 lines
3.9 KiB
Markdown
95 lines
3.9 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 |