1333869afcb469df44f5cfbc46e2f92f990e1b11
📚 Экзамен: RAG‑агент с ChromaDB и веб‑поиском
🚀 Описание проекта
В этом репозитории реализован RAG‑агент (Retrieval‑Augmented Generation), который умеет:
- хранить локальные документы в векторном хранилище ChromaDB;
- выполнять семантический поиск по этим документам с помощью эмбеддингов из Ollama (
nomic-embed-text); - искать информацию в интернете через API Tavily;
- автоматически выбирать, какой источник использовать для ответа на запрос пользователя.
Проект состоит из двух файлов:
| Файл | Что делает |
|---|---|
vectorstore.py |
Создание и загрузка ChromaDB, чтение/чанкинг документов. |
main.py |
Определяет инструменты агента (search_local_kb, web_search) и запускает LangChain‑агента. |
🛠️ Установка зависимостей
# 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в корне проекта и добавьте строку:
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️⃣ Создать/загрузить векторное хранилище и добавить документы
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️⃣ Запустить агента
python main.py
После запуска агент ожидает ввод вопросов от пользователя в консоли. Он сам решит,
использовать локальный поиск (search_local_kb) или веб‑поиск (web_search).
📌 Пример использования
$ python main.py
Введите ваш вопрос (или 'exit' для выхода): Какой язык программирования используется в LangChain?
Ответ:
LangChain использует Python как основной язык разработки. Он предоставляет набор инструментов и абстракций, которые упрощают создание цепочек LLM‑моделей и интеграцию с внешними сервисами.
(Источник: локальная база знаний)
Если вопрос требует информации из интернета:
$ 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 – свободно используйте, модифицируйте и распространяйте проект.
Description
Languages
Python
100%