diff --git a/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md b/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md index cac1f7c..b9005fd 100644 --- a/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md +++ b/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/README.md @@ -1,34 +1,37 @@ -# 8. Самописный поисковый агент на основе deep agents from scratch +# 8️⃣ Самописный поисковый агент на основе Deep Agents from Scratch -## Описание проекта -Этот проект реализует **самописного поискового агента**, который использует: -- **Qdrant** в качестве векторной базы данных для хранения и поиска документов. -- **Ollama** (модели `llama3` и `nomic-embed-text`) для генерации эмбеддингов и ответов LLM. -- **LangChain** + расширения `langchain-qdrant` и `langchain-ollama` для построения цепочки действий агента. +## 📌 Описание проекта +Этот проект реализует **самописного поискового агента**, который использует модели из Ollama и векторное хранилище Qdrant для быстрого поиска и генерации ответов. +Агент умеет: -Агент принимает запрос пользователя, ищет релевантные документы в Qdrant, формирует ответ с помощью Ollama‑LLM и возвращает его пользователю. +- Индексировать документы (PDF, TXT, HTML и т.д.) с помощью эмбеддеров `nomic-embed-text`. +- Хранить embeddings в коллекции Qdrant. +- Выполнять запросы к LLM `llama3` для генерации ответов на основе найденных документов. +- Работать как CLI‑интерфейс через файл `client.py`. -## Предварительные требования -| Компонент | Версия / Минимальные требования | Как установить | -|-----------|---------------------------------|----------------| -| **Python** | 3.10+ | `python -m venv .venv && source .venv/bin/activate` | -| **pip** | 21+ | Встроен в Python | -| **Ollama** | Любая версия, но рекомендуется ≥ 0.1.0 | `curl -fsSL https://ollama.com/install.sh | sh` | -| **Qdrant** | 2.x (или 3.x) | Docker: `docker run -p 6333:6333 qdrant/qdrant` | -| **Docker** | Любая версия, если используете контейнер Qdrant | `sudo apt-get install docker.io` | +## ⚙️ Предварительные требования -> ⚠️ Убедитесь, что Ollama запущен и доступен по адресу `http://localhost:11434`, а Qdrant – по `http://localhost:6333`. +| Компонент | Версия (рекоменд.) | Как установить | +|-----------|--------------------|----------------| +| **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` | -## Установка +> **Важно:** +> * Ollama должен быть запущен и иметь модели `llama3` и `nomic-embed-text`. +> * Qdrant должен работать на `http://localhost:6333` (или изменить переменную окружения `QDRANT_URL`). + +## 📦 Установка ```bash -# Клонируйте репозиторий (или скачайте файлы) +# Клонируйте репозиторий git clone https://github.com/yourusername/deep-agent.git cd deep-agent -# Создайте и активируйте виртуальное окружение +# Создайте виртуальное окружение и активируйте его 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 @@ -37,99 +40,60 @@ pip install -r requirements.txt `requirements.txt` содержит: ```text -langchain>=0.2.0 -langchain-ollama>=0.1.0 -langchain-qdrant>=0.1.0 -qdrant-client>=1.7.0 -python-dotenv>=1.0.0 +langchain==0.2.* +langchain-ollama==0.1.* +langchain-qdrant==0.1.* +qdrant-client==1.9.* ``` -## Запуск +## 🚀 Запуск -### 1️⃣ `agent.py` – запуск агента в режиме CLI +### 1️⃣ Индексация документов (`agent.py`) ```bash -# Установите переменные окружения (если не используете .env) -export QDRANT_URL="http://localhost:6333" -export QDRANT_COLLECTION="knowledge_base" - -python agent.py +python agent.py --index /path/to/documents ``` -После запуска вы увидите приглашение: +* `--index` – путь к каталогу с документами (pdf, txt, html и т.д.). +* Скрипт создаст/обновит коллекцию `knowledge_base` в Qdrant. -``` -Введите ваш запрос: -``` - -Вводите любой вопрос, и агент вернёт ответ. - -### 2️⃣ `client.py` – пример клиентского кода +### 2️⃣ Взаимодействие через CLI (`client.py`) ```bash -python client.py +python client.py "Какой смысл жизни?" ``` -Этот скрипт демонстрирует, как вызвать агента из другого Python‑скрипта: +* Передайте ваш вопрос как аргумент. +* Агент выполнит поиск, соберёт релевантные документы и сгенерирует ответ при помощи `llama3`. -```python -from agent import run_agent +## 📄 Пример использования -response = run_agent("Какой сегодня прогноз погоды?") -print(response) +```bash +# 1. Индексируем набор документов +python agent.py --index ./data/articles + +# 2. Запускаем клиент для получения ответа +python client.py "Что такое квантовый компьютер?" ``` -## Пример использования +**Вывод:** -1. **Подготовка данных** - Добавьте документы в Qdrant (можно через API или скрипт). Например, создайте файл `docs.jsonl`: +``` +Ответ: +Квантовый компьютер – это вычислительное устройство, использующее принципы квантовой механики (суперпозицию и запутанность) для выполнения операций быстрее классических компьютеров. Он способен обрабатывать огромные объёмы данных параллельно, что делает его потенциально мощным инструментом в криптографии, моделировании молекул и оптимизации сложных задач. +``` - ```json - {"content":"Python – это язык программирования высокого уровня."} - {"content":"Ollama позволяет запускать LLM локально без подключения к OpenAI."} - ``` +## 📚 Дополнительная информация - Затем загрузите их в Qdrant с помощью скрипта (не включён в репозиторий, но пример): +- **Параметры Qdrant** можно изменить через переменные окружения `QDRANT_URL` и `COLLECTION_NAME`. +- Если вы хотите использовать другую модель LLM или эмбеддер, просто поменяйте аргументы в `OllamaLLM(model="...")` и `OllamaEmbeddings(model="...")`. +- Для более продвинутой интеграции можно подключить дополнительные инструменты LangChain (например, поиск по вебу) через декоратор `@tool`. - ```python - from qdrant_client import QdrantClient - from langchain_ollama import OllamaEmbeddings +## 🤝 Вклад - client = QdrantClient(url="http://localhost:6333") - embeddings = OllamaEmbeddings(model="nomic-embed-text") +Пожалуйста, откройте issue или pull request, если хотите улучшить функциональность, добавить новые источники данных или исправить баги. - with open("docs.jsonl") as f: - for line in f: - doc = Document(page_content=line.strip()) - vector = embeddings.embed_query(doc.page_content) - client.upsert( - collection_name="knowledge_base", - points=[{ - "id": hash(line), - "vector": vector, - "payload": {"content": doc.page_content} - }] - ) - ``` +--- -2. **Запуск агента** - ```bash - python agent.py - ``` - Введите запрос, например: - - ``` - Какой язык программирования я использую? - ``` - -3. **Ответ** - Агент вернёт ответ, сформированный на основе найденных документов и LLM. - -## Дополнительные сведения - -- Если вы хотите изменить модель Ollama или коллекцию Qdrant, отредактируйте переменные окружения `QDRANT_URL`, `QDRANT_COLLECTION` и параметры в `agent.py`. -- Для более продвинутой интеграции с веб‑интерфейсом можно использовать FastAPI/Flask – это не входит в базовый README, но легко реализуемо. - ---- - -**Спасибо за внимание!** Если возникнут вопросы, откройте issue или свяжитесь с нами напрямую. \ No newline at end of file +*Автор: [Ваше имя]* +*Дата: 2026‑05‑27* \ No newline at end of file