Files

122 lines
2.8 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.
# RAG Agent with ChromaDB and Web Search
This repository contains a lightweight RetrievalAugmented Generation (RAG) agent that uses **ChromaDB** as the vector store and performs a simple web search to augment the retrieved context before generating an answer with OpenAI's GPT model.
> **Deadline**: 31.08.2026
> **Version**: 14
## Features
- **Vector Store** ChromaDB (local, no external service required)
- **Embeddings** OpenAI `text-embedding-ada-002`
- **LLM** OpenAI `gpt-3.5-turbo`
- **Web Search** DuckDuckGo (no API key needed)
- **Commandline interface** for adding documents and asking questions
## Prerequisites
- Python 3.9+
- An OpenAI API key
## Installation
```bash
# Clone the repository
git clone https://git.brojs.ru/kuzakhmetovartur/ekzamen-rag-agent-s-chromadb-i-veb-poisk.git
cd ekzamen-rag-agent-s-chromadb-i-veb-poisk
# Create a virtual environment (optional but recommended)
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
```
`requirements.txt` contains:
```
openai>=1.0.0
chromadb>=0.4.0
requests>=2.31.0
beautifulsoup4>=4.12.0
```
## Configuration
Set your OpenAI API key as an environment variable:
```bash
export OPENAI_API_KEY="sk-..."
```
On Windows:
```cmd
set OPENAI_API_KEY=sk-...
```
## Usage
### 1. Add Documents
Add a text file to the vector store. The file will be split into chunks (≈500 tokens each) and embedded.
```bash
python -m src.index add path/to/document.txt
```
Example:
```bash
python -m src.index add data/biology.txt
```
### 2. Ask a Question
Query the RAG agent. It will:
1. Retrieve the top5 nearest chunks from ChromaDB.
2. Perform a DuckDuckGo web search for the query.
3. Combine the retrieved context and web snippets.
4. Generate an answer with GPT.
```bash
python -m src.index ask "What is the function of mitochondria?"
```
### 3. Help
```bash
python -m src.index
```
## Example
```bash
$ python -m src.index add sample.txt
Added 4 chunks from sample.txt to the collection.
$ python -m src.index ask "Explain the water cycle."
Answer:
The water cycle, also known as the hydrologic cycle, describes the continuous movement of water on, above, and below the surface of the Earth. ...
```
## Project Structure
```
src/
├── index.py # Main script
README.md
requirements.txt
```
## Notes
- **ChromaDB Persistence** The vector store is persisted in `./chromadb`. Delete this folder to reset the store.
- **Token Limits** The embedding model `text-embedding-ada-002` supports up to 8191 tokens per request. The chunking logic approximates a 500token limit per chunk.
- **Web Search** DuckDuckGo is used for simplicity. For production use, consider a dedicated search API (e.g., SerpAPI, Bing Search API).
## License
MIT License