115 lines
5.2 KiB
Markdown
115 lines
5.2 KiB
Markdown
# Агент с 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` |
|
||
|
||
---
|
||
|
||
## Установка зависимостей
|
||
|
||
```bash
|
||
# 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` содержит:
|
||
1. Конфигурацию подключения к Qdrant и Ollama.
|
||
2. Два инструмента (`search_knowledge_base`, `add_to_knowledge_base`) – реализованы через декоратор `@tool`.
|
||
3. Логику чанкования с помощью `RecursiveCharacterTextSplitter`.
|
||
4. Создание агента, который использует LLM и инструменты для RAG‑обратной связи.
|
||
|
||
---
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
python solution.py
|
||
```
|
||
|
||
> Скрипт запускает интерактивный режим: пользователь вводит запрос, агент отвечает, используя найденные векторные документы.
|
||
> Для тестирования можно добавить примерный документ:
|
||
|
||
```bash
|
||
python solution.py --add "title=Python Basics" --content="Python is a high-level programming language..."
|
||
```
|
||
|
||
---
|
||
|
||
## Пример использования
|
||
|
||
### 1. Добавление документа
|
||
|
||
```bash
|
||
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. Поиск по базе
|
||
|
||
```bash
|
||
python solution.py query "What is Python?"
|
||
```
|
||
|
||
> Агент выполнит семантический поиск, найдёт релевантные чанки и сформирует ответ с использованием LLM.
|
||
|
||
---
|
||
|
||
## Как это работает (техническое резюме)
|
||
|
||
1. **Чанкование** – `RecursiveCharacterTextSplitter` разбивает большие тексты на части длиной до 1000 символов с перекрытием 200.
|
||
2. **Эмбеддинг** – каждая часть преобразуется в эмбеддинги через Ollama (`nomic-embed-text`) и сохраняется в Qdrant.
|
||
3. **Поиск** – при запросе агент использует `search_knowledge_base`, который ищет ближайшие векторы в коллекции, возвращая топ‑N документов.
|
||
4. **Ответ** – LLM (`llama3`) генерирует финальный ответ, опираясь на найденные документы.
|
||
|
||
---
|
||
|
||
## Расширение проекта
|
||
|
||
- Добавить поддержку нескольких моделей Ollama.
|
||
- Интегрировать хранение метаданных (дата добавления, автор).
|
||
- Реализовать удаление/обновление документов через инструменты.
|
||
- Создать веб‑интерфейс на FastAPI для удобного взаимодействия.
|
||
|
||
---
|
||
|
||
## Лицензия
|
||
|
||
MIT License – свободно используйте и модифицируйте код по своему усмотрению. |