Files

53 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FAQ Bot (ChromaDB + MCPstyle tool)
## Overview
This repository implements a FAQ bot that answers questions about course materials using a local ChromaDB vector store and a single MCPstyle 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 ZeroShot React agent that chooses the appropriate tool and prefixes the answer with `source: chroma` or `source: mcp_meta`.
4. **CLI** predefined 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
```
## MCPstyle 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.