Экзамен: RAG-агент с ChromaDB и веб-поиском: README.md
This commit is contained in:
@@ -1,3 +1,160 @@
|
||||
# task-6a1864f7-ekzamen-rag-agent-s-chrom
|
||||
# RAG‑Agent with ChromaDB and Web Search
|
||||
|
||||
Решения домашних заданий
|
||||
A lightweight RAG (Retrieval‑Augmented Generation) agent that uses a local **ChromaDB** vector store for knowledge retrieval and **Tavily** for live web search.
|
||||
The agent automatically decides whether to answer from the local knowledge base or to fetch fresh information from the web.
|
||||
|
||||
> **Prerequisites**
|
||||
> • Python 3.10+
|
||||
> • Ollama (LLM & embeddings)
|
||||
> • Tavily API key
|
||||
|
||||
---
|
||||
|
||||
## 📦 Project Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── vectorstore.py # Vector store creation & document ingestion
|
||||
├── agent.py # RAG agent implementation (not shown in the prompt)
|
||||
├── .env # Tavily API key
|
||||
├── requirements.txt # Dependencies
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
```bash
|
||||
# 1. Pull required models into Ollama
|
||||
ollama pull llama3
|
||||
ollama pull nomic-embed-text
|
||||
|
||||
# 2. Install Python dependencies
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
`requirements.txt`
|
||||
|
||||
```text
|
||||
langchain
|
||||
langchain-chroma
|
||||
langchain-tavily
|
||||
langchain-ollama
|
||||
tavily-python
|
||||
chromadb
|
||||
python-dotenv
|
||||
```
|
||||
|
||||
> **Note**:
|
||||
> *If you use a different LLM or embeddings provider, adjust the `create_vectorstore` function accordingly.*
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
Create a `.env` file in the project root:
|
||||
|
||||
```dotenv
|
||||
TAVILY_API_KEY=your_tavily_api_key_here
|
||||
```
|
||||
|
||||
The key is used by the Tavily client for web search.
|
||||
|
||||
---
|
||||
|
||||
## 📚 Using the Vector Store
|
||||
|
||||
### 1. Create the store
|
||||
|
||||
```python
|
||||
from vectorstore import create_vectorstore
|
||||
|
||||
vectorstore = create_vectorstore("./chroma_db")
|
||||
```
|
||||
|
||||
### 2. Load documents into the store
|
||||
|
||||
```python
|
||||
from vectorstore import load_documents
|
||||
|
||||
# Directory containing .txt or .md files
|
||||
load_documents("./knowledge_base", vectorstore)
|
||||
```
|
||||
|
||||
The function will:
|
||||
|
||||
1. Read all `.txt` and `.md` files in the given directory.
|
||||
2. Split them into chunks using `RecursiveCharacterTextSplitter`.
|
||||
3. Add the chunks to the Chroma collection.
|
||||
|
||||
---
|
||||
|
||||
## 🧩 Running the Agent
|
||||
|
||||
> **Assumption**: `agent.py` contains the main RAG agent logic that imports `vectorstore.py`.
|
||||
> The agent automatically chooses between the local vector store and Tavily search.
|
||||
|
||||
```bash
|
||||
python agent.py
|
||||
```
|
||||
|
||||
The agent will:
|
||||
|
||||
1. Prompt the user for a question.
|
||||
2. Query the vector store for relevant chunks.
|
||||
3. If the answer is insufficient, perform a web search via Tavily.
|
||||
4. Generate a final answer with the chosen source.
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Example Workflow
|
||||
|
||||
```bash
|
||||
$ python agent.py
|
||||
Enter your question (or 'exit' to quit): What is the capital of France?
|
||||
|
||||
Answer: The capital of France is Paris.
|
||||
Source: Local knowledge base (retrieved from chroma_db)
|
||||
```
|
||||
|
||||
If the question is about a very recent event:
|
||||
|
||||
```bash
|
||||
$ python agent.py
|
||||
Enter your question (or 'exit' to quit): Who won the 2024 World Series?
|
||||
|
||||
Answer: The 2024 World Series was won by the Texas Rangers.
|
||||
Source: Web search (Tavily)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 Adding New Documents
|
||||
|
||||
1. Drop your `.txt` or `.md` files into the `knowledge_base/` directory.
|
||||
2. Run:
|
||||
|
||||
```bash
|
||||
python -c "from vectorstore import load_documents, create_vectorstore; load_documents('knowledge_base', create_vectorstore())"
|
||||
```
|
||||
|
||||
The new documents will be indexed automatically.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Troubleshooting
|
||||
|
||||
| Symptom | Likely Cause | Fix |
|
||||
|---------|--------------|-----|
|
||||
| `ModuleNotFoundError: No module named 'langchain_ollama'` | Missing dependency | `pip install langchain-ollama` |
|
||||
| `Ollama` not running | Ollama daemon stopped | `ollama serve` |
|
||||
| Tavily errors | Invalid API key | Verify `.env` and restart |
|
||||
|
||||
---
|
||||
|
||||
## 📄 License
|
||||
|
||||
MIT License – feel free to adapt and extend.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user