84 lines
2.2 KiB
Markdown
84 lines
2.2 KiB
Markdown
# RAG Agent with ChromaDB and Web Search
|
||
|
||
This repository implements a simple RAG (Retrieval-Augmented Generation) agent that can:
|
||
|
||
1. Search a local knowledge base stored in **ChromaDB** using semantic embeddings from **Ollama**.
|
||
2. Perform real‑time web search via **Tavily**.
|
||
3. Decide automatically which source to use and indicate the source in the final answer.
|
||
|
||
## Prerequisites
|
||
|
||
- Python 3.10+ (recommended via `pyenv` or `conda`).
|
||
- Ollama installed locally and the following models pulled:
|
||
```bash
|
||
ollama pull llama3
|
||
ollama pull nomic-embed-text
|
||
```
|
||
- A Tavily API key. Create a `.env` file in the project root with:
|
||
```text
|
||
TAVILY_API_KEY=YOUR_KEY_HERE
|
||
```
|
||
|
||
## Installation
|
||
|
||
```bash
|
||
# Optional: create a virtual environment
|
||
python -m venv venv
|
||
source venv/bin/activate # Windows: venv\Scripts\activate
|
||
|
||
# Install dependencies
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Preparing the Knowledge Base
|
||
|
||
Place any `.txt` or `.md` files you want the agent to know about in the `documents/` folder.
|
||
Run the following command once to load them into ChromaDB:
|
||
|
||
```bash
|
||
python -c "from vectorstore import create_vectorstore, load_documents; store=create_vectorstore(); load_documents('./documents', store)"
|
||
```
|
||
|
||
The vector store is persisted in the `chroma_db/` directory, so the data will be available for subsequent runs.
|
||
|
||
## Running the Agent
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
You will see a simple chat loop. Type your questions and the agent will answer.
|
||
|
||
```
|
||
Welcome to the RAG agent. Type 'exit' to quit.
|
||
|
||
User: What is LangGraph?
|
||
|
||
Assistant: LangGraph is a framework for building ...
|
||
Source: chromadb
|
||
```
|
||
|
||
If the information is not present locally, the agent will automatically perform a web search and label the answer with `Source: tavily`.
|
||
|
||
## Project Structure
|
||
|
||
```
|
||
├── agent.py # Core agent logic
|
||
├── rag_tools.py # Tool implementations
|
||
├── vectorstore.py # ChromaDB utilities
|
||
├── main.py # Entry point
|
||
├── requirements.txt
|
||
├── .gitignore
|
||
└── README.md
|
||
```
|
||
|
||
## Extending
|
||
|
||
- Add more tools by creating new functions decorated with `@tool`.
|
||
- Replace the LLM or embeddings with other Ollama models.
|
||
- Switch to a different vector store (e.g., Qdrant) by updating `vectorstore.py`.
|
||
|
||
## License
|
||
|
||
MIT License.
|