53 lines
1.9 KiB
Markdown
53 lines
1.9 KiB
Markdown
# RAG Agent with ChromaDB
|
||
|
||
## Overview
|
||
This repository implements a simple RAG (Retrieval‑Augmented Generation) agent that uses **ChromaDB** as the vector store and **Ollama** for embeddings and LLM inference. The agent can:
|
||
|
||
1. Add documents to the knowledge base.
|
||
2. Search the knowledge base semantically.
|
||
3. Interact via a lightweight CLI.
|
||
|
||
## File Structure
|
||
- `requirements.txt` – Python dependencies.
|
||
- `chunker.py` – Text chunking utilities (RecursiveCharacterTextSplitter).
|
||
- `vector_store.py` – Wrapper around ChromaDB collection.
|
||
- `tools.py` – LangChain tools for search and add operations.
|
||
- `agent.py` – Agent creation with LangChain `create_agent`.
|
||
- `cli.py` – Simple command‑line interface.
|
||
- `init_documents.py` – Helper to load all `.txt` files from a directory into the vector store.
|
||
|
||
## Installation
|
||
```bash
|
||
# Pull Ollama models
|
||
ollama pull llama3
|
||
ollama pull nomic-embed-text
|
||
|
||
# Install Python packages
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Usage
|
||
1. **Load documents** (optional):
|
||
```bash
|
||
python init_documents.py
|
||
```
|
||
2. **Run the CLI**:
|
||
```bash
|
||
python cli.py
|
||
```
|
||
Type any question or `/quit` to exit.
|
||
|
||
## Architecture
|
||
- **Chunking**: `chunker.split_text()` splits large texts into 500‑char chunks with 100‑char overlap using LangChain’s `RecursiveCharacterTextSplitter`.
|
||
- **Vector Store**: `vector_store.ChromaVectorStore` handles adding documents and similarity search. Embeddings are generated by `langchain_ollama.OllamaEmbeddings` (`nomic-embed-text`).
|
||
- **Tools**: Two tools decorated with `@tool`: `search_knowledge_base` and `add_to_knowledge_base`. They interact with the vector store.
|
||
- **Agent**: Created via LangChain’s `create_agent`, configured to use the two tools and a simple system prompt. The LLM is an Ollama `llama3` instance.
|
||
|
||
## Testing
|
||
Run the CLI and try:
|
||
```
|
||
/quit
|
||
Hello, what can you do?
|
||
```
|
||
The agent should respond using the knowledge base or add new documents if prompted.
|