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`. Агент построен на примере из репозитория **langchain-ai/deep-agents-from-scratch** и расширён функциональностью поиска и сохранения файлов.
- Хранить embeddings в коллекции Qdrant.
- Выполнять запросы к LLM `llama3` для генерации ответов на основе найденных документов.
- Работать как CLI‑интерфейс через файл `client.py`.
## ⚙️ Предварительные требования ## ⚙️ Предварительные требования
| Компонент | Версия (рекоменд.) | Как установить | | Компонент | Версия (рекоменд.) | Как установить |
|-----------|--------------------|----------------| |-----------|--------------------|----------------|
| **Python** | ≥ 3.10 | `python -m venv .venv && source .venv/bin/activate` | | Python | ≥ 3.10 | `python -m venv .venv && source .venv/bin/activate` |
| **Ollama** | Любая, но минимум 0.1.0 | [Скачать](https://ollama.ai) и запустить: `ollama serve` | | Ollama | Любая, но минимум `llama3` | `curl -fsSL https://ollama.ai/install.sh | sh`<br>или скачайте с официального сайта |
| **Qdrant** | ≥ 1.9 | Docker: `docker run -p 6333:6333 qdrant/qdrant` | | Qdrant | ≥ 1.6 | `docker run -p 6333:6333 qdrant/qdrant` (Docker) |
| **LangChain** | 0.2.x | Установится через `requirements.txt` | | Docker | — | `sudo apt-get install docker.io` |
> **Важно:** > **Важно**: Убедитесь, что Ollama запущен и модель `llama3` доступна (`ollama pull llama3`).
> * Ollama должен быть запущен и иметь модели `llama3` и `nomic-embed-text`. > Qdrant должен быть поднят на `http://localhost:6333`. Если используете другой адрес/порт, задайте переменную окружения `QDRANT_URL`.
> * Qdrant должен работать на `http://localhost:6333` (или изменить переменную окружения `QDRANT_URL`).
## 📦 Установка ## 📦 Установка
```bash ```bash
# Клонируйте репозиторий # Клонируем репозиторий (если ещё не сделано)
git clone https://github.com/yourusername/deep-agent.git git clone https://github.com/<ваш-аккаунт>/deep-agent.git
cd deep-agent cd deep-agent
# Создайте виртуальное окружение и активируйте его # Создаём виртуальное окружение и активируем его
python -m venv .venv python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости # Устанавливаем зависимости
pip install -r requirements.txt pip install -r requirements.txt
``` ```
`requirements.txt` содержит: `requirements.txt` содержит:
```text ```text
langchain==0.2.* requests
langchain-ollama==0.1.* beautifulsoup4
langchain-qdrant==0.1.* langchain
qdrant-client==1.9.* langchain-community
python-dotenv
langchain-ollama
langchain-qdrant
rich
``` ```
## 🚀 Запуск ## 🚀 Запуск файлов
### 1️⃣ Индексация документов (`agent.py`)
### 1️⃣ `agent.py`
Файл, содержащий логику агента.
Запускается так:
```bash ```bash
python agent.py --index /path/to/documents python agent.py --query "Какой язык программирования лучше всего использовать для машинного обучения?"
``` ```
Параметр `--query` задаёт начальный запрос к агенту.
* `--index` – путь к каталогу с документами (pdf, txt, html и т.д.). ### 2️⃣ `client.py`
* Скрипт создаст/обновит коллекцию `knowledge_base` в Qdrant. Простой клиент, который демонстрирует взаимодействие с агентом через API.
Запускается так:
### 2️⃣ Взаимодействие через CLI (`client.py`)
```bash ```bash
python client.py "Какой смысл жизни?" python client.py --endpoint http://localhost:8000/api/ask --question "Что такое deep learning?"
``` ```
* Передайте ваш вопрос как аргумент. > **Замечание**: Для работы `client.py` требуется запущенный сервер (см. ниже).
* Агент выполнит поиск, соберёт релевантные документы и сгенерирует ответ при помощи `llama3`.
## 🛠️ Запуск сервера (если нужен API)
В проекте есть простая FastAPI‑интерфейс, который можно поднять:
```bash
uvicorn client:app --reload
```
После запуска вы сможете обращаться к эндпоинту `/api/ask` через `client.py`.
## 📄 Пример использования ## 📄 Пример использования
```bash 1. **Инициализация**
# 1. Индексируем набор документов Запустите агент с запросом:
python agent.py --index ./data/articles ```bash
python agent.py --query "Какой язык программирования лучше всего использовать для машинного обучения?"
```
# 2. Запускаем клиент для получения ответа 2. **Поиск и генерация**
python client.py "Что такое квантовый компьютер?" Агент выполнит поиск в интернете, соберёт релевантные страницы, преобразует их в документы и сохранит в 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` для красивого вывода таблиц и логов в консоль.
Пожалуйста, откройте issue или pull request, если хотите улучшить функциональность, добавить новые источники данных или исправить баги. - **Расширяемость**: Добавьте новые инструменты (например, API поисковых систем) с помощью декоратора `@tool`.
--- ---
*Автор: [Ваше имя]* Если возникнут вопросы или понадобится помощь — открывайте issue в репозитории!
*Дата: 20260527*