8. Самописный поисковый агент на основе deep agents from scratch: README.md
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
|||||||
|
# 8. Самописный поисковый агент на основе deep agents from scratch
|
||||||
|
|
||||||
|
## Описание проекта
|
||||||
|
Проект реализует **deep agent** – автономного поискового агента, который использует:
|
||||||
|
- **OpenAI LLM** для генерации ответов и запросов к базе знаний.
|
||||||
|
- **Qdrant** в качестве векторного хранилища для быстрых семантических поисков.
|
||||||
|
- **LangChain** для упрощения взаимодействия между компонентами (LLM, embeddings, vector store).
|
||||||
|
- **Rich** для красивого вывода информации в консоли.
|
||||||
|
|
||||||
|
Агент умеет:
|
||||||
|
1. Загружать документы и сохранять их эмбеддинги в Qdrant.
|
||||||
|
2. Выполнять запросы пользователя, находить релевантные фрагменты текста и генерировать ответы на основе LLM.
|
||||||
|
3. Показать результаты поиска в виде таблицы с метриками.
|
||||||
|
|
||||||
|
> **Важно**: Для работы проекта необходим доступ к API OpenAI (ключ `OPENAI_API_KEY`) и работающий экземпляр Qdrant, который можно запустить локально через Docker или использовать облачный сервис.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Установка зависимостей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создайте виртуальное окружение (необязательно)
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
|
|
||||||
|
# Установите зависимости из requirements.txt
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
`requirements.txt`:
|
||||||
|
|
||||||
|
```text
|
||||||
|
langchain==0.2.*
|
||||||
|
openai==1.*
|
||||||
|
qdrant-client==1.*
|
||||||
|
rich==13.*
|
||||||
|
python-dotenv==1.*
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Совет**: Если вы используете `pipx`, можно установить проект как глобальный пакет.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Как запустить
|
||||||
|
|
||||||
|
### 1. Настройка переменных окружения
|
||||||
|
Создайте файл `.env` в корне проекта и добавьте:
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXX
|
||||||
|
QDRANT_URL=http://localhost:6333 # URL вашего Qdrant сервера
|
||||||
|
COLLECTION_NAME=my_collection # Имя коллекции для хранения эмбеддингов
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Важно**: Убедитесь, что Qdrant запущен и доступен по указанному URL.
|
||||||
|
|
||||||
|
### 2. Запуск скрипта
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Скрипт выполнит следующие шаги:
|
||||||
|
1. Инициализирует подключение к Qdrant.
|
||||||
|
2. Загружает документы из папки `data/` (если она существует) и сохраняет их эмбеддинги.
|
||||||
|
3. Ожидает ввод пользователя в консоли, после чего выполняет поиск и выводит ответ.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Пример использования
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ python solution.py
|
||||||
|
[INFO] 2026-05-27 12:00:00 - Инициализация Qdrant...
|
||||||
|
[INFO] 2026-05-27 12:00:01 - Коллекция 'my_collection' найдена.
|
||||||
|
Введите запрос (или 'exit' для выхода): Какова площадь России?
|
||||||
|
Ответ:
|
||||||
|
Россия занимает площадь около 17 098 242 км², что делает её крупнейшей страной мира по территории.
|
||||||
|
|
||||||
|
[INFO] 2026-05-27 12:00:10 - Запрос обработан за 0.42 сек.
|
||||||
|
Введите запрос (или 'exit' для выхода): exit
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Tip**: Если вы хотите добавить новые документы, поместите их в папку `data/` и перезапустите скрипт – он автоматически обновит коллекцию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Структура проекта
|
||||||
|
|
||||||
|
```text
|
||||||
|
project/
|
||||||
|
├─ solution.py # Основной скрипт агента
|
||||||
|
├─ requirements.txt # Зависимости
|
||||||
|
├─ .env # Переменные окружения (не коммитить!)
|
||||||
|
└─ data/ # Папка с документами для индексации
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Возможные улучшения
|
||||||
|
|
||||||
|
- Добавить поддержку нескольких LLM (например, GPT‑4o).
|
||||||
|
- Реализовать кэширование запросов.
|
||||||
|
- Интегрировать с веб‑интерфейсом через FastAPI.
|
||||||
|
|
||||||
|
---
|
||||||
Reference in New Issue
Block a user