Агент с RAG‑памятью: README.md

This commit is contained in:
2026-05-27 11:28:37 +00:00
parent 6c93c067c7
commit 3bf779e7a3
@@ -1,115 +1,115 @@
# Агент с RAG‑памятью # Агент с RAG‑памятью
## Описание проекта ## Описание проекта
Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы данных Qdrant, используя модели Ollama (`llama3` для генерации текста и `nomic-embed-text` для эмбеддингов). Агент использует LangChain для построения цепочки инструментов (RAG) и взаимодействия с пользователем.
`solution.py` реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM `llama3` и эмбеддинговая модель `nomic-embed-text`). > **Ключевые возможности**
Агент использует LangChain для: > * Семантический поиск по базе знаний.
> * Добавление новых документов в базу.
> * Чанкование больших текстов перед сохранением.
> * Интеграция LLM для генерации ответов на основе найденной информации.
* **RAG** RetrievalAugmented Generation ---
* Инструменты поиска (`search_knowledge_base`) и добавления (`add_to_knowledge_base`) в базу знаний
* Чанкинга больших документов через `RecursiveCharacterTextSplitter`
* Взаимодействия с Qdrant через `QdrantVectorStore`
## Стек технологий ## Стек технологий
| Технология | Версия | | Технология | Версия / Пакет |
|------------|--------| |------------|----------------|
| Python | 3.10+ | | Python | 3.10+ |
| Ollama | 0.1+ | | Qdrant | v1.x (локальный сервер) |
| Qdrant | 1.x | | Ollama | `llama3`, `nomic-embed-text` |
| LangChain | 0.2+ | | LangChain | `langchain`, `langchain-qdrant`, `langchain-ollama` |
## Установка зависимостей ---
## Установка зависимостей
```bash ```bash
# 1️⃣ Загрузить модели в Ollama # 1. Скачиваем модели Ollama
ollama pull llama3 ollama pull llama3
ollama pull nomic-embed-text ollama pull nomic-embed-text
# 2️⃣ Установить Python‑пакеты # 2. Устанавливаем Python‑пакеты
pip install langchain langchain-qdrant langchain-ollama pip install langchain langchain-qdrant langchain-ollama
``` ```
> **Важно** > **Важно**
> Qdrant должен быть запущен локально (по умолчанию `localhost:6333`). > * Qdrant должен быть запущен локально (по умолчанию `localhost:6333`).
> Если у вас нет Docker, установите Qdrant через официальную инструкцию: > * Ollama сервис также должен работать в фоне.
> ```bash
> docker run -p 6333:6333 qdrant/qdrant ---
> ```
## Структура проекта
```
.
├── solution.py # основной скрипт с реализацией агента
└── README.md # эта документация
```
`solution.py` содержит:
1. Конфигурацию подключения к Qdrant и Ollama.
2. Два инструмента (`search_knowledge_base`, `add_to_knowledge_base`) – реализованы через декоратор `@tool`.
3. Логику чанкования с помощью `RecursiveCharacterTextSplitter`.
4. Создание агента, который использует LLM и инструменты для RAG‑обратной связи.
---
## Запуск ## Запуск
```bash ```bash
python solution.py --help python solution.py
``` ```
### Основные команды > Скрипт запускает интерактивный режим: пользователь вводит запрос, агент отвечает, используя найденные векторные документы.
> Для тестирования можно добавить примерный документ:
| Флаг | Описание |
|------|----------|
| `--add FILE` | Добавить документ из файла в базу знаний |
| `--search QUERY [--max N]` | Выполнить семантический поиск по базе |
| `--agent` | Запустить интерактивного агента, который сам будет использовать RAG |
#### Пример добавления документа
```bash ```bash
python solution.py --add docs/guide.txt python solution.py --add "title=Python Basics" --content="Python is a high-level programming language..."
``` ```
#### Пример поиска ---
## Пример использования
### 1. Добавление документа
```bash ```bash
python solution.py --search "Как настроить Qdrant?" --max 5 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 ```bash
python solution.py --agent python solution.py query "What is Python?"
``` ```
После запуска агент будет ждать ваших вопросов и отвечать, используя найденную информацию из базы. > Агент выполнит семантический поиск, найдёт релевантные чанки и сформирует ответ с использованием LLM.
## Пример использования в коде ---
```python ## Как это работает (техническое резюме)
from langchain_ollama import ChatOllama
from langchain_qdrant import QdrantVectorStore
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.tools import tool
from langchain.agents import create_agent, AgentExecutor, Tool
from langchain.schema import Document
# Инициализация клиента Qdrant 1. **Чанкование** `RecursiveCharacterTextSplitter` разбивает большие тексты на части длиной до 1000 символов с перекрытием 200.
store = QdrantVectorStore( 2. **Эмбеддинг** – каждая часть преобразуется в эмбеддинги через Ollama (`nomic-embed-text`) и сохраняется в Qdrant.
url="http://localhost:6333", 3. **Поиск** – при запросе агент использует `search_knowledge_base`, который ищет ближайшие векторы в коллекции, возвращая топ‑N документов.
collection_name="knowledge_base", 4. **Ответ** LLM (`llama3`) генерирует финальный ответ, опираясь на найденные документы.
embedding_function=OllamaEmbeddings(model="nomic-embed-text")
)
# Чанкинг текста ---
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = splitter.split_text("Многострочный текст...")
# Добавление в базу ## Расширение проекта
store.add_documents([Document(page_content=d) for d in docs])
# Поиск - Добавить поддержку нескольких моделей Ollama.
results = store.similarity_search_with_score("Как настроить Qdrant?", k=3) - Интегрировать хранение метаданных (дата добавления, автор).
- Реализовать удаление/обновление документов через инструменты.
- Создать веб‑интерфейс на FastAPI для удобного взаимодействия.
for doc, score in results: ---
print(f"[{score:.2f}] {doc.page_content[:200]}...")
```
## Структура проекта ## Лицензия
``` MIT License – свободно используйте и модифицируйте код по своему усмотрению.
project/
├── solution.py # Основной скрипт
└── docs/ # Пример документов для добавления
```
## Лицензия
MIT © 2026.