5.1 KiB
Агент с RAG‑памятью
Описание проекта
Проект реализует AI‑агента, способного хранить, искать и использовать знания в локальной векторной базе данных Qdrant при помощи Ollama (LLM llama3 и эмбеддинг‑модель nomic-embed-text).
Агент использует LangChain для построения цепочки действий, а также предоставляет два инструмента:
| Инструмент | Описание |
|---|---|
search_knowledge_base(query, max_results) |
Семантический поиск по базе знаний. |
add_to_knowledge_base(content, title) |
Добавление нового документа в базу (с чанкингом и эмбеддингами). |
Стек технологий
- Python 3.10+
- Qdrant – локальная векторная база данных
- Ollama – LLM
llama3+ эмбеддингиnomic-embed-text - LangChain – фреймворк для агентов, RAG и инструментов
Установка зависимостей
# 1. Ollama (LLM и эмбеддинг‑модели)
ollama pull llama3
ollama pull nomic-embed-text
# 2. Python пакеты
pip install langchain langchain-qdrant langchain-ollama
Важно: Qdrant должен быть запущен локально (по умолчанию на
localhost:6333).
Если вы используете Docker, можно быстро поднять контейнер:docker run -p 6333:6333 qdrant/qdrant
Структура проекта
| Файл | Описание |
|---|---|
rag_agent.py |
Основная логика агента и его инструменты. |
qdrant_client.py |
Обёртка над QdrantVectorStore: инициализация, добавление документов, поиск. |
chunker.py |
Модуль для разбиения текста на чанки (RecursiveCharacterTextSplitter). |
init_loader.py |
Скрипт загрузки начальных данных в базу. |
cli_client.py |
CLI‑интерфейс для взаимодействия с агентом из командной строки. |
Как запустить
1. Инициализация базы (опционально)
Если вы хотите сразу наполнить базу тестовыми данными, выполните:
python init_loader.py
Скрипт
init_loader.pyчитает файлы из папкиdata/, разбивает их на чанки и сохраняет в Qdrant.
2. Запуск CLI‑клиента
CLI позволяет задавать вопросы агенту, а также добавлять новые документы:
python cli_client.py
Примеры использования
| Команда | Описание |
|---|---|
ask "Какой смысл жизни?" |
Агент выполнит поиск в базе и сформирует ответ. |
add "data/new_doc.txt" "Новый документ" |
Добавляет новый файл в базу знаний (с чанкингом). |
3. Запуск агента напрямую
Если вам нужен только агент без CLI, можно импортировать его из rag_agent.py:
from rag_agent import agent_executor
response = agent_executor.invoke({"input": "Расскажи о Qdrant"})
print(response["output"])
Пример кода (CLI)
$ python cli_client.py ask "Что такое RAG?"
Agent: Searching knowledge base...
Result: ...
Answer: ...
Настройка переменных окружения
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
QDRANT_HOST |
localhost |
Хост Qdrant. |
QDRANT_PORT |
6333 |
Порт Qdrant. |
QDRANT_COLLECTION |
rag_collection |
Имя коллекции в Qdrant. |
EMBEDDING_MODEL |
nomic-embed-text |
Модель эмбеддингов. |
LLM_MODEL |
llama3 |
Модель LLM. |
Тесты
Тесты находятся в папке tests/. Запустить их можно так:
pytest tests/
Убедитесь, что Qdrant и Ollama запущены перед запуском тестов.
Лицензия
MIT License – см. файл LICENSE.
Примечание:
- Для работы с большим объёмом данных рекомендуется использовать более мощные модели эмбеддингов и LLM.
- Если вы хотите использовать облачные сервисы вместо локальных, замените импорты и конфигурацию в файлах проекта.