Files
task-6a02e23d-agent-s-rag-p…/README.md
T

115 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Агент с 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 – свободно используйте и модифицируйте код по своему усмотрению.