# FAQ Bot – ChromaDB + Ollama Embeddings This project implements a simple FAQ chatbot that uses **ChromaDB** as the vector store and **Ollama** for embeddings. The chatbot answers user questions by retrieving the most relevant FAQ entries and generating a response with an OpenAI LLM. ## Features - **Vector Store**: ChromaDB (persistent on disk) - **Embeddings**: Ollama `all-MiniLM-L6-v2` (or any other Ollama model) - **LLM**: OpenAI GPT-3.5-turbo (configurable) - **API**: FastAPI with `/ask` and `/add` endpoints ## Setup 1. **Clone the repository** ```bash git clone https://git.brojs.ru/kuzakhmetovartur/povtornyy-ekzamen-faq-bot-chromadb-odin.git cd povtornyy-ekzamen-faq-bot-chromadb-odin ``` 2. **Create a virtual environment** ```bash python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate ``` 3. **Install dependencies** ```bash pip install -r requirements.txt ``` 4. **Set environment variables** Create a `.env` file in the project root (or export variables manually): ```dotenv # ChromaDB CHROMA_DB_PATH=./chroma_db CHROMA_COLLECTION_NAME=faq_collection # Ollama OLLAMA_EMBED_MODEL=all-MiniLM-L6-v2 OLLAMA_HOST=http://localhost OLLAMA_PORT=11434 # OpenAI OPENAI_API_KEY=your_openai_api_key OPENAI_MODEL=gpt-3.5-turbo ``` 5. **Run the server** ```bash uvicorn src.main:app --reload ``` The API will be available at `http://127.0.0.1:8000`. ## API Endpoints | Method | Path | Description | |--------|-------|-------------| | `POST` | `/ask` | Ask a question. Body: `{ "question": "Your question" }`. Response: `{ "answer": "..." }`. | | `POST` | `/add` | Add a new FAQ entry. Body: `{ "text": "...", "metadata": { ... } }`. Response: `{ "status": "added" }`. | ## Adding FAQ Data You can add FAQ entries via the `/add` endpoint or by modifying the code to load a dataset on startup. Each entry is stored as a `Document` in ChromaDB with optional metadata. ## Notes - The vector store is persisted in the directory specified by `CHROMA_DB_PATH`. Deleting this directory will remove all stored vectors. - Ollama must be running locally and expose the embedding endpoint on the host/port specified. - The OpenAI LLM requires a valid API key. ## License MIT License ---