Files
task-6a1864f78a94f887e50d46da/README.md
T
2026-06-02 07:47:05 +00:00

79 lines
2.4 KiB
Markdown
Raw 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 Tavily
This repository contains a lightweight RAG (RetrievalAugmented Generation) agent that:
1. Stores local knowledge in **ChromaDB** using **Ollama** embeddings.
2. Performs semantic search over the local store.
3. Falls back to **Tavily** web search for uptodate information.
4. Decides automatically which source to use and indicates the source in the answer.
## Prerequisites
* Python 3.10+ (recommended via `pyenv` or `conda`).
* [Ollama](https://ollama.ai/) installed locally.
* A Tavily API key set it in a `.env` file.
```bash
# Pull the required models
ollama pull llama3
ollama pull nomic-embed-text
```
## Installation
```bash
pip install -r requirements.txt
```
## Usage
```bash
# Create a .env file with your Tavily key
# TAVILY_API_KEY=YOUR_KEY
# Populate the vector store from the documents folder
python main.py
```
You will be presented with a prompt. Type your question and press **Enter**.
Type `exit` to quit.
## Project Structure
```
├── agent.py # Agent definition
├── main.py # CLI entry point
├── tools.py # Local KB and web search tools
├── vectorstore.py # ChromaDB helpers
├── requirements.txt
├── README.md
└── documents/ # Folder with .txt/.md files to ingest
```
## How It Works
1. **Vector Store** `vectorstore.py` creates a ChromaDB instance backed by
`OllamaEmbeddings`. Documents from `documents/` are chunked with
`RecursiveCharacterTextSplitter` and added to the store.
2. **Tools** `tools.py` exposes two LangChain tools:
* `search_local_kb` semantic search in ChromaDB.
* `web_search` web search via Tavily.
3. **Agent** `agent.py` builds an OpenAIfunctionsstyle agent that
chooses between the two tools based on the users query. The system prompt
instructs the LLM to use `search_local_kb` for knowledgebase queries and
`web_search` for recent facts. The answer always contains a source tag.
4. **CLI** `main.py` ties everything together: it loads the vector store,
creates the agent and runs an interactive chat loop.
## Extending
* Replace the LLM with any other LangChaincompatible model.
* Add more tools (e.g., database queries, file system access).
* Persist the vector store across runs it already does this via `persist_directory`.
---
Happy experimenting!