126 lines
5.8 KiB
Markdown
126 lines
5.8 KiB
Markdown
# 📚 Экзамен: RAG‑агент с ChromaDB и веб‑поиском
|
||
|
||
## 🚀 Описание проекта
|
||
В этом репозитории реализован **RAG‑агент** (Retrieval‑Augmented Generation), который умеет:
|
||
- хранить локальные документы в векторном хранилище **ChromaDB**;
|
||
- выполнять семантический поиск по этим документам с помощью эмбеддингов из **Ollama** (`nomic-embed-text`);
|
||
- искать информацию в интернете через API **Tavily**;
|
||
- автоматически выбирать, какой источник использовать для ответа на запрос пользователя.
|
||
|
||
Проект состоит из двух файлов:
|
||
|
||
| Файл | Что делает |
|
||
|------|------------|
|
||
| `vectorstore.py` | Создание и загрузка ChromaDB, чтение/чанкинг документов. |
|
||
| `main.py` | Определяет инструменты агента (`search_local_kb`, `web_search`) и запускает LangChain‑агента. |
|
||
|
||
---
|
||
|
||
## 🛠️ Установка зависимостей
|
||
|
||
```bash
|
||
# 1️⃣ Скачиваем модели Ollama (LLM + эмбеддинги)
|
||
ollama pull llama3
|
||
ollama pull nomic-embed-text
|
||
|
||
# 2️⃣ Устанавливаем Python‑пакеты
|
||
pip install langchain langchain-chroma langchain-tavily langchain-ollama tavily-python chromadb python-dotenv
|
||
```
|
||
|
||
> **Важно**:
|
||
> - Убедитесь, что у вас установлен Docker (или другой способ запуска Ollama).
|
||
> - Для работы Tavily нужен API‑ключ. Создайте файл `.env` в корне проекта и добавьте строку:
|
||
|
||
```dotenv
|
||
TAVILY_API_KEY=YOUR_TAVILY_KEY_HERE
|
||
```
|
||
|
||
---
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```
|
||
.
|
||
├── chroma_db/ # Папка, где будет храниться база данных (создаётся автоматически)
|
||
├── documents/ # Пример папки с .txt/.md файлами для индексации
|
||
│ ├── doc1.md
|
||
│ └── doc2.txt
|
||
├── vectorstore.py # Модуль работы с ChromaDB
|
||
├── main.py # Запуск агента
|
||
└── .env # Tavily API ключ
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Как запустить
|
||
|
||
### 1️⃣ Создать/загрузить векторное хранилище и добавить документы
|
||
|
||
```bash
|
||
python - <<'PY'
|
||
from vectorstore import create_vectorstore, load_documents
|
||
|
||
# Создаём (или загружаем) коллекцию
|
||
vectorstore = create_vectorstore("./chroma_db")
|
||
|
||
# Загружаем все .txt/.md из папки documents
|
||
load_documents("documents", vectorstore)
|
||
print("Документы успешно добавлены в ChromaDB")
|
||
PY
|
||
```
|
||
|
||
> После выполнения вы увидите сообщение о том, что документы загружены.
|
||
> Если база уже существует, она будет просто открыта.
|
||
|
||
### 2️⃣ Запустить агента
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
После запуска агент ожидает ввод вопросов от пользователя в консоли. Он сам решит,
|
||
использовать локальный поиск (`search_local_kb`) или веб‑поиск (`web_search`).
|
||
|
||
---
|
||
|
||
## 📌 Пример использования
|
||
|
||
```text
|
||
$ python main.py
|
||
Введите ваш вопрос (или 'exit' для выхода): Какой язык программирования используется в LangChain?
|
||
|
||
Ответ:
|
||
LangChain использует Python как основной язык разработки. Он предоставляет набор инструментов и абстракций, которые упрощают создание цепочек LLM‑моделей и интеграцию с внешними сервисами.
|
||
|
||
(Источник: локальная база знаний)
|
||
```
|
||
|
||
Если вопрос требует информации из интернета:
|
||
|
||
```text
|
||
$ python main.py
|
||
Введите ваш вопрос (или 'exit' для выхода): Что такое квантовый компьютер?
|
||
|
||
Ответ:
|
||
Квантовый компьютер – это устройство, использующее принципы квантовой механики для выполнения вычислений. Он может обрабатывать информацию в виде кубитов, которые могут находиться в суперпозиции состояний, что позволяет выполнять параллельные расчёты.
|
||
|
||
(Источник: веб‑поиск через Tavily)
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 Дополнительные сведения
|
||
|
||
- **ChromaDB** – быстрый и лёгкий в использовании векторный хранилище.
|
||
Документация: https://docs.langchain.com/oss/python/integrations/vectorstores/chroma
|
||
- **OllamaEmbeddings** – локальная модель эмбеддингов, не требует подключения к облаку.
|
||
Документация: https://github.com/langchain-ai/langchain/tree/main/libs/langchain_ollama
|
||
- **Tavily** – простой API для веб‑поиска.
|
||
Документация: https://docs.tavily.com/
|
||
- **LangChain** – фреймворк для построения агентов и цепочек LLM.
|
||
|
||
---
|
||
|
||
## 📄 Лицензия
|
||
|
||
MIT License – свободно используйте, модифицируйте и распространяйте проект. |