# FAQ Bot – ChromaDB + MCP-style Tool This project implements a simple FAQ bot that answers questions about a machine learning course. The bot uses: - **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 ``` . ├── 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 ``` 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.