8. Самописный поисковый агент на основе deep agents from scratch: README.md
This commit is contained in:
+68
-57
@@ -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 в репозитории!
|
||||||
*Дата: 2026‑05‑27*
|
|
||||||
Reference in New Issue
Block a user