# RAG‑Agent with Qdrant & Ollama This repository contains a minimal but functional implementation of a **RAG (Retrieval‑Augmented Generation) agent** that: * Stores embeddings in a **Qdrant** vector database. * Generates embeddings with **Ollama** (`nomic-embed-text`). * Uses **LangChain** (v1+) for the agent, tools and prompt‑engineering. The agent can: * Search the knowledge base (`/search`). * Add new documents (`/add`). * Interact through a simple CLI. ## 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 the CLI python -m src.cli ``` > **Note**: Qdrant must be running locally on port 6333. You can start it using Docker: > > ```bash > docker run -p 6333:6333 qdrant/qdrant > ``` ## Directory structure ``` workspace/task-6a02e23da6fe2e4ac16acf65/ ├─ src/ │ ├─ vector_store.py # Qdrant wrapper │ ├─ tools.py # LangChain tools │ ├─ agent.py # Agent implementation │ ├─ loader.py # Utility for bulk loading │ └─ cli.py # Interactive CLI ├─ requirements.txt └─ README.md ``` ## Usage ### Load documents from a folder ```bash python -m src.loader /path/to/text/files ``` ### Start the interactive CLI ```bash python -m src.cli ``` - `/add` – add a new document. - `/search` – perform a semantic search. - `/quit` – exit. Any other input is treated as a user message and processed by the agent. ## How it works 1. **Vector store** – `KnowledgeBase` wraps `QdrantVectorStore`. It splits documents into chunks using `RecursiveCharacterTextSplitter`, embeds them with `OllamaEmbeddings`, and stores the vectors. 2. **Tools** – Two tools (`search_knowledge_base`, `add_to_knowledge_base`) are exposed to the agent via LangChain's `@tool` decorator. 3. **Agent** – Built with `create_tool_calling_agent` and `AgentExecutor`. The system prompt encourages the assistant to use the tools. 4. **CLI** – Provides a simple REPL for adding documents, searching, and chatting with the agent. ## Extending * Replace the embedding model with any Ollama model. * Swap Qdrant for another vector store supported by LangChain. * Add more tools (e.g., delete, update) following the same pattern. --- Happy experimenting!