81 lines
2.3 KiB
Markdown
81 lines
2.3 KiB
Markdown
# 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
|
||
--- |