diff --git a/README.md b/README.md index 9077f5b..5a05b0a 100644 --- a/README.md +++ b/README.md @@ -1,79 +1,79 @@ -# RAG Agent with ChromaDB and Tavily +# RAG Agent with Qdrant and Tavily -This repository contains a lightweight RAG (Retrieval‑Augmented Generation) agent that: +This repository implements an AI agent that can answer questions using a local knowledge base stored in **Qdrant** and up‑to‑date information fetched from the web via **Tavily**. The agent is built with **LangChain 1.x** and **Ollama** for local LLM and embeddings. -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 up‑to‑date information. -4. Decides automatically which source to use and indicates the source in the answer. +## Features -## 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 -``` +* **Local RAG** – Semantic search in Qdrant using Ollama embeddings. +* **Web search** – Tavily integration for real‑time information. +* **Automatic source selection** – The LLM decides whether to use the local KB or the web. +* **Persistent vector store** – Data is saved in `./qdrant_db` and reused across runs. +* **Interactive CLI** – Add documents, ask questions, and see the source. ## Installation ```bash +# 1. Pull required Ollama models +ollama pull llama3 +ollama pull nomic-embed-text + +# 2. Install Python dependencies pip install -r requirements.txt + +# 3. Run Qdrant (Docker recommended) +# If you prefer a local binary, download from https://qdrant.tech +# Docker command: +# docker run -p 6333:6333 qdrant/qdrant ``` ## 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 +# Start the CLI +python -m workspace.task-6a1864f78a94f887e50d46da.cli ``` -You will be presented with a prompt. Type your question and press **Enter**. -Type `exit` to quit. +Commands: + +* `/add ` – Load all `.txt` and `.md` files from the directory into Qdrant. +* `/search ` – Ask the agent a question. +* `/quit` – Exit. + +Example: + +``` +> /add ./documents +Loaded 12 chunks into Qdrant. +Documents added. +> /search What is LangGraph? +Answer: +LangGraph is a framework for building ... +Source: chromadb +``` + +## Environment Variables + +* `TAVILY_API_KEY` – Your Tavily API key. + +Create a `.env` file in the project root: + +``` +TAVILY_API_KEY=your_api_key_here +``` ## 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 +workspace/ +├─ task-6a1864f78a94f887e50d46da/ +│ ├─ vector_store.py # Qdrant vector store helpers +│ ├─ tools.py # Local KB and web search tools +│ ├─ agent.py # Agent definition +│ ├─ cli.py # Interactive command line +│ ├─ requirements.txt +│ └─ README.md ``` -## How It Works +## License -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 OpenAI‑functions‑style agent that - chooses between the two tools based on the user’s query. The system prompt - instructs the LLM to use `search_local_kb` for knowledge‑base 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 LangChain‑compatible 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! \ No newline at end of file +MIT \ No newline at end of file