Агент с RAG‑памятью
Описание проекта
Проект реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы данных Qdrant, используя модели Ollama (llama3 для генерации текста и nomic-embed-text для эмбеддингов). Агент использует LangChain для построения цепочки инструментов (RAG) и взаимодействия с пользователем.
Ключевые возможности
- Семантический поиск по базе знаний.
- Добавление новых документов в базу.
- Чанкование больших текстов перед сохранением.
- Интеграция LLM для генерации ответов на основе найденной информации.
Стек технологий
| Технология | Версия / Пакет |
|---|---|
| Python | 3.10+ |
| Qdrant | v1.x (локальный сервер) |
| Ollama | llama3, nomic-embed-text |
| LangChain | langchain, langchain-qdrant, langchain-ollama |
Установка зависимостей
# 1. Скачиваем модели Ollama
ollama pull llama3
ollama pull nomic-embed-text
# 2. Устанавливаем Python‑пакеты
pip install langchain langchain-qdrant langchain-ollama
Важно
- Qdrant должен быть запущен локально (по умолчанию
localhost:6333).- Ollama сервис также должен работать в фоне.
Структура проекта
.
├── solution.py # основной скрипт с реализацией агента
└── README.md # эта документация
solution.py содержит:
- Конфигурацию подключения к Qdrant и Ollama.
- Два инструмента (
search_knowledge_base,add_to_knowledge_base) – реализованы через декоратор@tool. - Логику чанкования с помощью
RecursiveCharacterTextSplitter. - Создание агента, который использует LLM и инструменты для RAG‑обратной связи.
Запуск
python solution.py
Скрипт запускает интерактивный режим: пользователь вводит запрос, агент отвечает, используя найденные векторные документы.
Для тестирования можно добавить примерный документ:
python solution.py --add "title=Python Basics" --content="Python is a high-level programming language..."
Пример использования
1. Добавление документа
python solution.py add \
--title "Python Basics" \
--content "Python is a high-level, interpreted, general-purpose programming language. Created by Guido van Rossum and first released in 1991."
После выполнения команда добавит документ в коллекцию
knowledge_baseи выведет сообщение об успехе.
2. Поиск по базе
python solution.py query "What is Python?"
Агент выполнит семантический поиск, найдёт релевантные чанки и сформирует ответ с использованием LLM.
Как это работает (техническое резюме)
- Чанкование –
RecursiveCharacterTextSplitterразбивает большие тексты на части длиной до 1000 символов с перекрытием 200. - Эмбеддинг – каждая часть преобразуется в эмбеддинги через Ollama (
nomic-embed-text) и сохраняется в Qdrant. - Поиск – при запросе агент использует
search_knowledge_base, который ищет ближайшие векторы в коллекции, возвращая топ‑N документов. - Ответ – LLM (
llama3) генерирует финальный ответ, опираясь на найденные документы.
Расширение проекта
- Добавить поддержку нескольких моделей Ollama.
- Интегрировать хранение метаданных (дата добавления, автор).
- Реализовать удаление/обновление документов через инструменты.
- Создать веб‑интерфейс на FastAPI для удобного взаимодействия.
Лицензия
MIT License – свободно используйте и модифицируйте код по своему усмотрению.