feat: solution for 'Повторный экзамен: FAQ-бот — ChromaDB + один MCP-tool'
This commit is contained in:
@@ -1,119 +1,35 @@
|
|||||||
# FAQ Bot – ChromaDB + MCP-style Tool
|
# Повторный экзамен: FAQ-бот — ChromaDB + один MCP-tool
|
||||||
|
|
||||||
This project implements a simple FAQ bot that answers questions about a machine learning course.
|
Главная
|
||||||
The bot uses:
|
Мои задания
|
||||||
|
Повторный экзамен: FAQ-бот — ChromaDB + один MCP-tool
|
||||||
|
5Д
|
||||||
|
EN
|
||||||
|
Повторный экзамен: FAQ-бот — ChromaDB + один MCP-tool
|
||||||
|
Зачёт
|
||||||
|
Версия 2
|
||||||
|
Дедлайн сдачи: 31.08.2026
|
||||||
|
|
||||||
- **ChromaDB** to store and retrieve FAQ documents.
|
В работе
|
||||||
- **Ollama** embeddings (`nomic-embed-text`) for vectorization.
|
|
||||||
- **LangChain** to build an agent that routes queries to the appropriate tool.
|
|
||||||
- **MCP-style HTTP tool** (`fetch_course_meta`) that returns course metadata from a local JSON file.
|
|
||||||
|
|
||||||
## Project Structure
|
Требуется доработка
|
||||||
|
|
||||||
```
|
Переделайте решение: используйте QDrant вместо текущего векторного хранилища.
|
||||||
.
|
|
||||||
├── chroma_faq/ # Persisted Chroma vector store
|
|
||||||
├── data/
|
|
||||||
│ ├── faq1.md
|
|
||||||
│ ├── faq2.md
|
|
||||||
│ ├── faq3.md
|
|
||||||
│ └── course_meta.json
|
|
||||||
├── src/
|
|
||||||
│ ├── __init__.py
|
|
||||||
│ ├── agent.py
|
|
||||||
│ ├── cli.py
|
|
||||||
│ ├── main.py
|
|
||||||
│ └── tools.py
|
|
||||||
├── requirements.txt
|
|
||||||
└── README.md
|
|
||||||
```
|
|
||||||
|
|
||||||
## Setup
|
Редактирование ответа
|
||||||
|
|
||||||
1. **Install Ollama**
|
Заполните ответ и отправьте работу на проверку преподавателю.
|
||||||
Download and install Ollama from https://ollama.ai/.
|
|
||||||
Pull the required models:
|
|
||||||
|
|
||||||
```bash
|
Тип ответа
|
||||||
ollama pull nomic-embed-text
|
Текст
|
||||||
ollama pull llama3
|
Ссылка
|
||||||
```
|
Файлы
|
||||||
|
Ссылка (URL)
|
||||||
|
Прикреплённые файлы
|
||||||
|
Загрузить файл
|
||||||
|
Отправить на проверку
|
||||||
|
Отменить
|
||||||
|
|
||||||
2. **Create a virtual environment** (optional but recommended):
|
Задание
|
||||||
|
|
||||||
```bash
|
Практичес
|
||||||
python -m venv venv
|
|
||||||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Install Python dependencies**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
## Running the Bot
|
|
||||||
|
|
||||||
### Preset Questions
|
|
||||||
|
|
||||||
Run the script without arguments to execute three preset questions (two for the FAQ tool, one for the metadata tool):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python -m src.main
|
|
||||||
```
|
|
||||||
|
|
||||||
You should see output similar to:
|
|
||||||
|
|
||||||
```
|
|
||||||
Running preset questions:
|
|
||||||
|
|
||||||
Q1: What is the deadline for Assignment 1?
|
|
||||||
A1: The deadline for Assignment 1 is August 31, 2026. source: chroma
|
|
||||||
|
|
||||||
Q2: How many lectures are there in the course?
|
|
||||||
A2: There are 12 lectures in the course. source: chroma
|
|
||||||
|
|
||||||
Q3: What is the course schedule for next week?
|
|
||||||
A3: The course schedule for next week is:
|
|
||||||
- 2026-09-01: Lecture 1 – Introduction to ML (Room 101)
|
|
||||||
- 2026-09-08: Lecture 2 – Data Preprocessing (Room 102)
|
|
||||||
- 2026-09-15: Lecture 3 – Linear Regression (Room 103)
|
|
||||||
source: mcp_meta
|
|
||||||
```
|
|
||||||
|
|
||||||
### Interactive Mode
|
|
||||||
|
|
||||||
Start an interactive session:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python -m src.main --interactive
|
|
||||||
```
|
|
||||||
|
|
||||||
You can type any question, and the bot will answer using the appropriate tool. Type `exit` or `Ctrl+C` to quit.
|
|
||||||
|
|
||||||
## How It Works
|
|
||||||
|
|
||||||
1. **Data Loading**
|
|
||||||
`src/tools.py` contains `load_faq_to_chroma()` which reads all `.md` files in `data/`, chunks them, embeds them with `nomic-embed-text`, and persists the vector store in `chroma_faq/`.
|
|
||||||
|
|
||||||
2. **Tools**
|
|
||||||
- `search_course_docs(query, k)` – searches the Chroma vector store for relevant FAQ snippets.
|
|
||||||
- `fetch_course_meta(query)` – reads `data/course_meta.json` and returns schedule or instructor information based on the query.
|
|
||||||
|
|
||||||
3. **Agent**
|
|
||||||
`src/agent.py` builds a LangChain agent that:
|
|
||||||
- Uses a system prompt to decide which tool to call.
|
|
||||||
- Adds a `source:` tag to the final answer indicating whether the answer came from the FAQ (`chroma`) or the metadata tool (`mcp_meta`).
|
|
||||||
|
|
||||||
4. **CLI**
|
|
||||||
`src/cli.py` provides a simple command‑line interface to run preset questions or an interactive session.
|
|
||||||
|
|
||||||
## Extending the Bot
|
|
||||||
|
|
||||||
- **Add more FAQ documents** – Place additional `.md` files in `data/` and re‑run the script to rebuild the vector store.
|
|
||||||
- **Add more metadata** – Update `data/course_meta.json` or modify `fetch_course_meta` to call a real HTTP endpoint.
|
|
||||||
- **Change the LLM** – Replace `Ollama` with another LLM provider in `src/agent.py`.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This project is provided as-is for educational purposes. Feel free to adapt and extend it for your own use cases.
|
|
||||||
Reference in New Issue
Block a user