diff --git a/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md b/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md index f0b3d58..a191308 100644 --- a/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md +++ b/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md @@ -1,25 +1,27 @@ -# 8. Самописный поисковый агент на основе deep agents from scratch +# 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 или использовать облачный сервис. +**Project name:** `deep-search-agent` +**Goal:** Build a custom search agent that can browse the web, create virtual files in memory and finally export them to the real file system. --- -## Установка зависимостей +## 📖 Описание проекта + +В этом репозитории реализован **Deep Agent**, построенный на основе библиотеки [langchain](https://github.com/hwchase17/langchain) и примеров из репозитория `deep-agents-from-scratch`. +Агент умеет: + +1. Выполнять поисковые запросы в интернете (через `requests` + `BeautifulSoup`); +2. Создавать виртуальные файлы, хранить их в памяти (`VirtualFileSystem`); +3. В конце работы выгружать все виртуальные файлы на диск. + +Код находится в одном файле **`solution.py`** и содержит полностью рабочий пример с использованием OpenAI LLM (можно заменить на любой другой). + +--- + +## ⚙️ Установка зависимостей ```bash -# Создайте виртуальное окружение (необязательно) +# Создайте виртуальное окружение (рекомендовано) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate @@ -27,80 +29,88 @@ source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt ``` -`requirements.txt`: +`requirements.txt` содержит: ```text -langchain==0.2.* -openai==1.* -qdrant-client==1.* -rich==13.* -python-dotenv==1.* +langchain==0.2.0 +openai==1.12.0 +beautifulsoup4==4.12.3 +requests==2.32.3 +rich==13.7.1 ``` -> **Совет**: Если вы используете `pipx`, можно установить проект как глобальный пакет. +> **Важно:** +> - Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`. +> ```bash +> export OPENAI_API_KEY="sk-..." +> ``` +> - Если вы используете другую LLM, замените импорт и конфигурацию в коде. --- -## Как запустить - -### 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. Ожидает ввод пользователя в консоли, после чего выполняет поиск и выводит ответ. +При запуске агент: + +1. Спросит у пользователя цель (например: «Найти информацию о последних новостях по теме X»). +2. Выполнит поиск, создаст виртуальные файлы с найденными данными. +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 км², что делает её крупнейшей страной мира по территории. +Enter your goal: Find the latest news about AI breakthroughs in 2024. -[INFO] 2026-05-27 12:00:10 - Запрос обработан за 0.42 сек. -Введите запрос (или 'exit' для выхода): exit +[Agent] Searching for "AI breakthroughs 2024"... +[Agent] Found 3 relevant sources. Creating virtual files... + +Virtual file system created: +- ai_breakthroughs_2024.html +- ai_breakthroughs_2024_summary.txt + +Exporting virtual files to disk... +✅ Files exported to ./output/ + +Done! Check the output folder for results. ``` -> **Tip**: Если вы хотите добавить новые документы, поместите их в папку `data/` и перезапустите скрипт – он автоматически обновит коллекцию. - ---- - -## Структура проекта +После выполнения вы увидите в каталоге `./output/` файлы: ```text -project/ -├─ solution.py # Основной скрипт агента -├─ requirements.txt # Зависимости -├─ .env # Переменные окружения (не коммитить!) -└─ data/ # Папка с документами для индексации +ai_breakthroughs_2024.html # Полный HTML страницы +ai_breakthroughs_2024_summary.txt # Краткое резюме, созданное LLM ``` --- -## Возможные улучшения +## 📂 Структура проекта -- Добавить поддержку нескольких LLM (например, GPT‑4o). -- Реализовать кэширование запросов. -- Интегрировать с веб‑интерфейсом через FastAPI. +``` +deep-search-agent/ +├── solution.py # Основной скрипт с агентом +├── requirements.txt # Зависимости +└── README.md # Это файл +``` + +--- + +## 🔧 Как изменить поведение агента + +- **Изменить LLM** – замените `OpenAI()` на любой другой класс из `langchain.llms`. +- **Добавить новые инструменты** – в список `tools` добавьте свои функции. +- **Настроить поиск** – измените функцию `search_and_parse(url)` или используйте API поисковика. + +--- + +## 📜 Лицензия + +MIT License. См. файл `LICENSE`. --- \ No newline at end of file