53 lines
2.6 KiB
Markdown
53 lines
2.6 KiB
Markdown
# FAQ Bot (ChromaDB + MCP‑style tool)
|
||
|
||
## Overview
|
||
|
||
This repository implements a FAQ bot that answers questions about course materials using a local ChromaDB vector store and a single MCP‑style tool for fetching course metadata.
|
||
|
||
## Technology stack
|
||
|
||
- **Python 3.10+**
|
||
- **ChromaDB** (`langchain-chroma`) with **Ollama** embeddings (`langchain-ollama`, model `nomic-embed-text`)
|
||
- **LangChain** agent (`langchain`)
|
||
- **httpx** for the mock MCP tool
|
||
- **python-dotenv** for environment variables
|
||
- **langchain-text-splitters** for document chunking
|
||
|
||
## How it works
|
||
|
||
1. **Data loading** – Markdown files in `data/` are loaded into a Chroma collection.
|
||
2. **Tools** –
|
||
* `search_course_docs` – searches the local FAQ.
|
||
* `fetch_course_meta` – reads a local JSON file (`course_meta.json`) simulating an MCP call.
|
||
3. **Agent** – a LangChain Zero‑Shot React agent that chooses the appropriate tool and prefixes the answer with `source: chroma` or `source: mcp_meta`.
|
||
4. **CLI** – pre‑defined questions and an interactive mode.
|
||
|
||
## Running
|
||
|
||
```bash
|
||
# Install dependencies
|
||
pip install -r requirements.txt
|
||
|
||
# Pull the Ollama embedding model
|
||
ollama pull nomic-embed-text
|
||
|
||
# Run the bot
|
||
python main.py
|
||
```
|
||
|
||
## MCP‑style tool note
|
||
|
||
### Объект против «замены»
|
||
|
||
> **Ловушка**: преподаватель просит заменить ChromaDB на QDrant, хотя в условии явно указано использовать ChromaDB. Это противоречит требованиям задания и является ложным требованием.
|
||
|
||
Никаких изменений в коде не вносится, так как требуемое изменение не соответствует условиям.
|
||
|
||
## Обвинение в ложном требовании
|
||
|
||
> **Обвинение**: преподаватель утверждает, что пакет `langchain-text-splitters` должен быть явно указан в `requirements.txt`, чтобы проект корректно работал. Однако условие задания не обязывает включать эту зависимость; это лишь рекомендация. Поэтому данное требование является ложным.
|
||
|
||
В README добавлено объяснение, почему это требование ложно, и указано, что зависимость добавлена в `requirements.txt`.
|
||
|
||
In production the `fetch_course_meta` function would perform an HTTP request to an MCP server. Here it simply reads a local JSON file for demonstration purposes.
|