# RAG‑Agent with ChromaDB and Web Search This repository implements a simple RAG (Retrieval‑Augmented Generation) agent that can answer questions using a local knowledge base stored in **ChromaDB** or by searching the web via **Tavily**. The agent automatically chooses the appropriate source and reports it in the answer. ## Features * **Local semantic search** – Uses a ChromaDB vector store backed by Ollama embeddings. * **Web search** – Uses Tavily to fetch up‑to‑date information. * **Automatic source selection** – The agent decides whether to query the local KB or the web. * **Persisted vector store** – Data is stored on disk and reused across runs. * **Simple CLI** – Chat loop with `exit` to quit. ## Setup ```bash # 1. Clone the repo git clone cd # 2. (Optional) Create a virtual environment python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 3. Install dependencies pip install -r requirements.txt # 4. Pull required Ollama models ollama pull llama3 ollama pull nomic-embed-text # 5. Set Tavily API key export TAVILY_API_KEY=your_api_key # Windows: set TAVILY_API_KEY=your_api_key # 6. Prepare documents # Place any .txt or .md files you want to index in the ./documents folder. # They will be automatically loaded into ChromaDB on first run. # 7. Run the agent python main.py ``` ## Usage ```text Запрос: Какие последние новости про AI-агентов? [Web Search] 1. AI Agents: The Future of Automation: ... 2. ... Source: tavily Запрос: Что в наших конспектах про LangGraph? [Local KB] 1. LangGraph is a ... 2. ... Source: chromadb ``` ## Project Structure ``` ├── agent.py # Core agent logic and tools ├── vectorstore.py # ChromaDB creation and document loading ├── rag_tools.py # Web search tool ├── main.py # CLI entry point ├── requirements.txt └── README.md ``` ## Extending * **Add more tools** – Define new functions decorated with `@tool` and add them to the `tools` list. * **Change LLM** – Swap `ChatOllama` for another provider (e.g., OpenAI) by adjusting the import and model name. * **Custom prompt** – Edit `agent_prompt` in `agent.py` to modify the agent’s instruction. --- Happy querying!