8. Самописный поисковый агент на основе deep agents from scratch: README.md
This commit is contained in:
+119
-10
@@ -1,26 +1,135 @@
|
||||
# DeepAgent
|
||||
# 8. Самописный поисковый агент на основе deep agents from scratch
|
||||
|
||||
## Описание
|
||||
## Описание проекта
|
||||
Этот проект реализует **самописного поискового агента**, который использует:
|
||||
- **Qdrant** в качестве векторной базы данных для хранения и поиска документов.
|
||||
- **Ollama** (модели `llama3` и `nomic-embed-text`) для генерации эмбеддингов и ответов LLM.
|
||||
- **LangChain** + расширения `langchain-qdrant` и `langchain-ollama` для построения цепочки действий агента.
|
||||
|
||||
Простой deep‑agent, который умеет искать в интернете, скачивать страницы и создавать виртуальные файлы. После выполнения задачи виртуальные файлы выгружаются в реальную файловую систему.
|
||||
Агент принимает запрос пользователя, ищет релевантные документы в Qdrant, формирует ответ с помощью Ollama‑LLM и возвращает его пользователю.
|
||||
|
||||
## Предварительные требования
|
||||
| Компонент | Версия / Минимальные требования | Как установить |
|
||||
|-----------|---------------------------------|----------------|
|
||||
| **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`.
|
||||
|
||||
## Установка
|
||||
|
||||
```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
|
||||
|
||||
# Установите зависимости
|
||||
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
|
||||
```
|
||||
|
||||
## Запуск
|
||||
|
||||
### 1️⃣ `agent.py` – запуск агента в режиме CLI
|
||||
|
||||
```bash
|
||||
python solution.py
|
||||
# Установите переменные окружения (если не используете .env)
|
||||
export QDRANT_URL="http://localhost:6333"
|
||||
export QDRANT_COLLECTION="knowledge_base"
|
||||
|
||||
python agent.py
|
||||
```
|
||||
|
||||
## Как работает
|
||||
После запуска вы увидите приглашение:
|
||||
|
||||
1. **WebSearchTool** – выполняет поиск в DuckDuckGo и возвращает список URL.
|
||||
2. **FetchPageTool** – скачивает содержимое страницы.
|
||||
3. **VirtualFileSystem** – хранит файлы в памяти.
|
||||
4. **DeepAgent** – использует LLM (по умолчанию `gpt-4o-mini`) для планирования действий.
|
||||
```
|
||||
Введите ваш запрос:
|
||||
```
|
||||
|
||||
После выполнения задачи файлы сохраняются в каталог `output/`.
|
||||
Вводите любой вопрос, и агент вернёт ответ.
|
||||
|
||||
### 2️⃣ `client.py` – пример клиентского кода
|
||||
|
||||
```bash
|
||||
python client.py
|
||||
```
|
||||
|
||||
Этот скрипт демонстрирует, как вызвать агента из другого Python‑скрипта:
|
||||
|
||||
```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
|
||||
python agent.py
|
||||
```
|
||||
Введите запрос, например:
|
||||
|
||||
```
|
||||
Какой язык программирования я использую?
|
||||
```
|
||||
|
||||
3. **Ответ**
|
||||
Агент вернёт ответ, сформированный на основе найденных документов и LLM.
|
||||
|
||||
## Дополнительные сведения
|
||||
|
||||
- Если вы хотите изменить модель Ollama или коллекцию Qdrant, отредактируйте переменные окружения `QDRANT_URL`, `QDRANT_COLLECTION` и параметры в `agent.py`.
|
||||
- Для более продвинутой интеграции с веб‑интерфейсом можно использовать FastAPI/Flask – это не входит в базовый README, но легко реализуемо.
|
||||
|
||||
---
|
||||
|
||||
**Спасибо за внимание!** Если возникнут вопросы, откройте issue или свяжитесь с нами напрямую.
|
||||
Reference in New Issue
Block a user