# FAQ Bot – QDrant Vector Store This project implements a simple FAQ bot that uses **QDrant** as the vector store instead of ChromaDB. The bot can ingest a text file containing FAQ content, embed the text using OpenAI embeddings, store the embeddings in QDrant, and answer user questions by retrieving the most relevant passages. ## Features - **Vector Store** – QDrant (via `qdrant-client`) - **Embeddings** – OpenAI `text-embedding-ada-002` - **CLI** – Ingest data, query the bot, delete the collection - **API** – `get_response(question: str, top_k: int = 5)` for integration with tools like MCP-tool ## Prerequisites - Python 3.9+ - QDrant server running locally or accessible via network - OpenAI API key ## 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 (optional but recommended)** ```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 the variables directly: ```bash export OPENAI_API_KEY="your-openai-api-key" export QDRANT_URL="http://localhost:6333" # Adjust if your QDrant instance is elsewhere export QDRANT_API_KEY="" # Leave empty if no auth is required export QDRANT_COLLECTION="faq_collection" ``` If you prefer not to use a `.env` file, you can set the variables in your shell session. ## Usage ### 1. Ingest Data Prepare a plain text file (`faq.txt`) containing your FAQ content. Then run: ```bash python src/index.py ingest faq.txt ``` The script will: - Split the text into chunks (max 500 characters per chunk) - Generate embeddings for each chunk - Store the embeddings in QDrant under the collection name defined by `QDRANT_COLLECTION` ### 2. Query the Bot ```bash python src/index.py query "What is the return policy?" ``` You can adjust the number of results returned with `--top_k`: ```bash python src.index.py query "What is the return policy?" --top_k 3 ``` ### 3. Delete the Collection > **Warning:** This will permanently delete all data in the collection. ```bash python src/index.py delete ``` ### 4. Integration via API If you want to use the bot programmatically (e.g., from MCP-tool), import the `get_response` function: ```python from src.index import get_response answer = get_response("How do I reset my password?") print(answer) ``` ## Troubleshooting - **QDrant Connection Errors** Ensure the QDrant server is running and reachable at the URL specified by `QDRANT_URL`. Check firewall settings if accessing remotely. - **OpenAI API Errors** Verify that `OPENAI_API_KEY` is correct and has sufficient quota. Check the OpenAI dashboard for usage limits. - **Large Documents** The ingestion script splits documents into 500‑character chunks. Adjust `max_chunk_size` in `split_text_into_chunks` if you need larger or smaller chunks. ## License This project is provided under the MIT License. Feel free to modify and extend it for your own use cases. ## Contact For questions or support, contact Artur Kuzakhmetov at `artur@example.com`.