8. Самописный поисковый агент на основе deep agents from scratch: README.md

This commit is contained in:
2026-05-27 15:38:06 +00:00
parent 6a36982b21
commit 39134c9f91
@@ -1,99 +1,110 @@
# 8️⃣ Самописный поисковый агент на основе Deep Agents from Scratch
# 8️⃣ Самописный поисковый агент на основе deep agents from scratch
## 📌 Описание проекта
Этот проект реализует **самописного поискового агента**, который использует модели из Ollama и векторное хранилище Qdrant для быстрого поиска и генерации ответов.
Агент умеет:
## 📌 Описание проекта
Этот проект реализует **deep agent** (глубокий агент), способный:
- Искать информацию в интернете с помощью `requests` и `beautifulsoup4`.
- Генерировать текстовые ответы при помощи модели Ollama (`llama3`).
- Хранить найденные данные во внутренней памяти, используя Qdrant как векторную базу.
- Создавать виртуальные файлы (объекты `Document`) и сохранять их в реальную файловую систему после завершения работы.
- Индексировать документы (PDF, TXT, HTML и т.д.) с помощью эмбеддеров `nomic-embed-text`.
- Хранить embeddings в коллекции Qdrant.
- Выполнять запросы к LLM `llama3` для генерации ответов на основе найденных документов.
- Работать как CLI‑интерфейс через файл `client.py`.
## ⚙️ Предварительные требования
Агент построен на примере из репозитория **langchain-ai/deep-agents-from-scratch** и расширён функциональностью поиска и сохранения файлов.
## ⚙️ Предварительные требования
| Компонент | Версия (рекоменд.) | Как установить |
|-----------|--------------------|----------------|
| **Python** | ≥ 3.10 | `python -m venv .venv && source .venv/bin/activate` |
| **Ollama** | Любая, но минимум 0.1.0 | [Скачать](https://ollama.ai) и запустить: `ollama serve` |
| **Qdrant** | ≥ 1.9 | Docker: `docker run -p 6333:6333 qdrant/qdrant` |
| **LangChain** | 0.2.x | Установится через `requirements.txt` |
| Python | ≥ 3.10 | `python -m venv .venv && source .venv/bin/activate` |
| Ollama | Любая, но минимум `llama3` | `curl -fsSL https://ollama.ai/install.sh | sh`<br>или скачайте с официального сайта |
| Qdrant | ≥ 1.6 | `docker run -p 6333:6333 qdrant/qdrant` (Docker) |
| Docker | — | `sudo apt-get install docker.io` |
> **Важно:**
> * Ollama должен быть запущен и иметь модели `llama3` и `nomic-embed-text`.
> * Qdrant должен работать на `http://localhost:6333` (или изменить переменную окружения `QDRANT_URL`).
> **Важно**: Убедитесь, что Ollama запущен и модель `llama3` доступна (`ollama pull llama3`).
> Qdrant должен быть поднят на `http://localhost:6333`. Если используете другой адрес/порт, задайте переменную окружения `QDRANT_URL`.
## 📦 Установка
```bash
# Клонируйте репозиторий
git clone https://github.com/yourusername/deep-agent.git
# Клонируем репозиторий (если ещё не сделано)
git clone https://github.com/<ваш-аккаунт>/deep-agent.git
cd deep-agent
# Создайте виртуальное окружение и активируйте его
# Создаём виртуальное окружение и активируем его
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости
# Устанавливаем зависимости
pip install -r requirements.txt
```
`requirements.txt` содержит:
```text
langchain==0.2.*
langchain-ollama==0.1.*
langchain-qdrant==0.1.*
qdrant-client==1.9.*
requests
beautifulsoup4
langchain
langchain-community
python-dotenv
langchain-ollama
langchain-qdrant
rich
```
## 🚀 Запуск
### 1️⃣ Индексация документов (`agent.py`)
## 🚀 Запуск файлов
### 1️⃣ `agent.py`
Файл, содержащий логику агента.
Запускается так:
```bash
python agent.py --index /path/to/documents
python agent.py --query "Какой язык программирования лучше всего использовать для машинного обучения?"
```
Параметр `--query` задаёт начальный запрос к агенту.
* `--index` – путь к каталогу с документами (pdf, txt, html и т.д.).
* Скрипт создаст/обновит коллекцию `knowledge_base` в Qdrant.
### 2️⃣ Взаимодействие через CLI (`client.py`)
### 2️⃣ `client.py`
Простой клиент, который демонстрирует взаимодействие с агентом через API.
Запускается так:
```bash
python client.py "Какой смысл жизни?"
python client.py --endpoint http://localhost:8000/api/ask --question "Что такое deep learning?"
```
* Передайте ваш вопрос как аргумент.
* Агент выполнит поиск, соберёт релевантные документы и сгенерирует ответ при помощи `llama3`.
> **Замечание**: Для работы `client.py` требуется запущенный сервер (см. ниже).
## 🛠️ Запуск сервера (если нужен API)
В проекте есть простая FastAPI‑интерфейс, который можно поднять:
```bash
uvicorn client:app --reload
```
После запуска вы сможете обращаться к эндпоинту `/api/ask` через `client.py`.
## 📄 Пример использования
```bash
# 1. Индексируем набор документов
python agent.py --index ./data/articles
1. **Инициализация**
Запустите агент с запросом:
```bash
python agent.py --query "Какой язык программирования лучше всего использовать для машинного обучения?"
```
# 2. Запускаем клиент для получения ответа
python client.py "Что такое квантовый компьютер?"
```
2. **Поиск и генерация**
Агент выполнит поиск в интернете, соберёт релевантные страницы, преобразует их в документы и сохранит в Qdrant.
**Вывод:**
3. **Создание виртуальных файлов**
На основе найденной информации агент создаст виртуальные файлы (объекты `Document`) с содержимым и метаданными.
```
Ответ:
Квантовый компьютер – это вычислительное устройство, использующее принципы квантовой механики (суперпозицию и запутанность) для выполнения операций быстрее классических компьютеров. Он способен обрабатывать огромные объёмы данных параллельно, что делает его потенциально мощным инструментом в криптографии, моделировании молекул и оптимизации сложных задач.
```
4. **Экспорт**
После завершения работы все виртуальные файлы будут выгружены в реальную файловую систему по указанному пути (`output/` по умолчанию).
## 📚 Дополнительная информация
5. **Результат**
В каталоге `output/` появятся файлы, например:
```
output/
├─ 1.md
├─ 2.md
└─ summary.txt
```
- **Параметры Qdrant** можно изменить через переменные окружения `QDRANT_URL` и `COLLECTION_NAME`.
- Если вы хотите использовать другую модель LLM или эмбеддер, просто поменяйте аргументы в `OllamaLLM(model="...")` и `OllamaEmbeddings(model="...")`.
- Для более продвинутой интеграции можно подключить дополнительные инструменты LangChain (например, поиск по вебу) через декоратор `@tool`.
## 📚 Дополнительные сведения
## 🤝 Вклад
- **Конфигурация**: Все параметры (URL Qdrant, путь к выходной папке и т.д.) можно задать через `.env` файл.
- **Логи**: Агент использует `rich` для красивого вывода таблиц и логов в консоль.
- **Расширяемость**: Добавьте новые инструменты (например, API поисковых систем) с помощью декоратора `@tool`.
Пожалуйста, откройте issue или pull request, если хотите улучшить функциональность, добавить новые источники данных или исправить баги.
---
---
*Автор: [Ваше имя]*
*Дата: 20260527*
Если возникнут вопросы или понадобится помощь — открывайте issue в репозитории!