8. Самописный поисковый агент на основе deep agents from scratch: README.md
This commit is contained in:
+57
-93
@@ -1,34 +1,37 @@
|
|||||||
# 8. Самописный поисковый агент на основе deep agents from scratch
|
# 8️⃣ Самописный поисковый агент на основе Deep Agents from Scratch
|
||||||
|
|
||||||
## Описание проекта
|
## 📌 Описание проекта
|
||||||
Этот проект реализует **самописного поискового агента**, который использует:
|
Этот проект реализует **самописного поискового агента**, который использует модели из Ollama и векторное хранилище Qdrant для быстрого поиска и генерации ответов.
|
||||||
- **Qdrant** в качестве векторной базы данных для хранения и поиска документов.
|
Агент умеет:
|
||||||
- **Ollama** (модели `llama3` и `nomic-embed-text`) для генерации эмбеддингов и ответов LLM.
|
|
||||||
- **LangChain** + расширения `langchain-qdrant` и `langchain-ollama` для построения цепочки действий агента.
|
|
||||||
|
|
||||||
Агент принимает запрос пользователя, ищет релевантные документы в 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
|
```bash
|
||||||
# Клонируйте репозиторий (или скачайте файлы)
|
# Клонируйте репозиторий
|
||||||
git clone https://github.com/yourusername/deep-agent.git
|
git clone https://github.com/yourusername/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
|
||||||
@@ -37,99 +40,60 @@ pip install -r requirements.txt
|
|||||||
`requirements.txt` содержит:
|
`requirements.txt` содержит:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
langchain>=0.2.0
|
langchain==0.2.*
|
||||||
langchain-ollama>=0.1.0
|
langchain-ollama==0.1.*
|
||||||
langchain-qdrant>=0.1.0
|
langchain-qdrant==0.1.*
|
||||||
qdrant-client>=1.7.0
|
qdrant-client==1.9.*
|
||||||
python-dotenv>=1.0.0
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Запуск
|
## 🚀 Запуск
|
||||||
|
|
||||||
### 1️⃣ `agent.py` – запуск агента в режиме CLI
|
### 1️⃣ Индексация документов (`agent.py`)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Установите переменные окружения (если не используете .env)
|
python agent.py --index /path/to/documents
|
||||||
export QDRANT_URL="http://localhost:6333"
|
|
||||||
export QDRANT_COLLECTION="knowledge_base"
|
|
||||||
|
|
||||||
python agent.py
|
|
||||||
```
|
```
|
||||||
|
|
||||||
После запуска вы увидите приглашение:
|
* `--index` – путь к каталогу с документами (pdf, txt, html и т.д.).
|
||||||
|
* Скрипт создаст/обновит коллекцию `knowledge_base` в Qdrant.
|
||||||
|
|
||||||
```
|
### 2️⃣ Взаимодействие через CLI (`client.py`)
|
||||||
Введите ваш запрос:
|
|
||||||
```
|
|
||||||
|
|
||||||
Вводите любой вопрос, и агент вернёт ответ.
|
|
||||||
|
|
||||||
### 2️⃣ `client.py` – пример клиентского кода
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python client.py
|
python client.py "Какой смысл жизни?"
|
||||||
```
|
```
|
||||||
|
|
||||||
Этот скрипт демонстрирует, как вызвать агента из другого Python‑скрипта:
|
* Передайте ваш вопрос как аргумент.
|
||||||
|
* Агент выполнит поиск, соберёт релевантные документы и сгенерирует ответ при помощи `llama3`.
|
||||||
|
|
||||||
```python
|
## 📄 Пример использования
|
||||||
from agent import run_agent
|
|
||||||
|
|
||||||
response = run_agent("Какой сегодня прогноз погоды?")
|
|
||||||
print(response)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Пример использования
|
|
||||||
|
|
||||||
1. **Подготовка данных**
|
|
||||||
Добавьте документы в Qdrant (можно через API или скрипт). Например, создайте файл `docs.jsonl`:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{"content":"Python – это язык программирования высокого уровня."}
|
|
||||||
{"content":"Ollama позволяет запускать LLM локально без подключения к OpenAI."}
|
|
||||||
```
|
|
||||||
|
|
||||||
Затем загрузите их в Qdrant с помощью скрипта (не включён в репозиторий, но пример):
|
|
||||||
|
|
||||||
```python
|
|
||||||
from qdrant_client import QdrantClient
|
|
||||||
from langchain_ollama import OllamaEmbeddings
|
|
||||||
|
|
||||||
client = QdrantClient(url="http://localhost:6333")
|
|
||||||
embeddings = OllamaEmbeddings(model="nomic-embed-text")
|
|
||||||
|
|
||||||
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
|
```bash
|
||||||
python agent.py
|
# 1. Индексируем набор документов
|
||||||
```
|
python agent.py --index ./data/articles
|
||||||
Введите запрос, например:
|
|
||||||
|
|
||||||
```
|
# 2. Запускаем клиент для получения ответа
|
||||||
Какой язык программирования я использую?
|
python client.py "Что такое квантовый компьютер?"
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Ответ**
|
**Вывод:**
|
||||||
Агент вернёт ответ, сформированный на основе найденных документов и LLM.
|
|
||||||
|
|
||||||
## Дополнительные сведения
|
```
|
||||||
|
Ответ:
|
||||||
|
Квантовый компьютер – это вычислительное устройство, использующее принципы квантовой механики (суперпозицию и запутанность) для выполнения операций быстрее классических компьютеров. Он способен обрабатывать огромные объёмы данных параллельно, что делает его потенциально мощным инструментом в криптографии, моделировании молекул и оптимизации сложных задач.
|
||||||
|
```
|
||||||
|
|
||||||
- Если вы хотите изменить модель Ollama или коллекцию Qdrant, отредактируйте переменные окружения `QDRANT_URL`, `QDRANT_COLLECTION` и параметры в `agent.py`.
|
## 📚 Дополнительная информация
|
||||||
- Для более продвинутой интеграции с веб‑интерфейсом можно использовать FastAPI/Flask – это не входит в базовый README, но легко реализуемо.
|
|
||||||
|
- **Параметры Qdrant** можно изменить через переменные окружения `QDRANT_URL` и `COLLECTION_NAME`.
|
||||||
|
- Если вы хотите использовать другую модель LLM или эмбеддер, просто поменяйте аргументы в `OllamaLLM(model="...")` и `OllamaEmbeddings(model="...")`.
|
||||||
|
- Для более продвинутой интеграции можно подключить дополнительные инструменты LangChain (например, поиск по вебу) через декоратор `@tool`.
|
||||||
|
|
||||||
|
## 🤝 Вклад
|
||||||
|
|
||||||
|
Пожалуйста, откройте issue или pull request, если хотите улучшить функциональность, добавить новые источники данных или исправить баги.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Спасибо за внимание!** Если возникнут вопросы, откройте issue или свяжитесь с нами напрямую.
|
*Автор: [Ваше имя]*
|
||||||
|
*Дата: 2026‑05‑27*
|
||||||
Reference in New Issue
Block a user