Stream-режим AI-агента: README.md
This commit is contained in:
@@ -1,106 +1,107 @@
|
||||
# Stream‑режим AI‑агента
|
||||
# Stream‑Mode AI Agent
|
||||
|
||||
## Описание проекта
|
||||
Этот проект реализует **AI‑агент**, построенный на основе LangGraph и LangChain, который использует модели из Ollama (по умолчанию `llama3`) и векторную базу Qdrant для хранения эмбеддингов.
|
||||
Главная особенность – **потоковый вывод** (`stream()`), благодаря которому ответы генерируются токен за токеном и сразу отображаются в консоли, а не после завершения работы.
|
||||
## 📖 Описание проекта
|
||||
Проект реализует **AI‑агента**, способного выполнять задачи, используя:
|
||||
- **LangChain** – фреймворк для построения цепочек и агентов;
|
||||
- **Ollama** – локальный LLM (model `llama3`);
|
||||
- **Qdrant** – векторная база данных для хранения эмбеддингов;
|
||||
- **langchain‑qdrant** – интеграция LangChain с Qdrant;
|
||||
- **langchain‑ollama** – обёртка Ollama для LangChain.
|
||||
|
||||
## Предварительные требования
|
||||
Главной особенностью является переход от синхронного вызова `.invoke()` к потоковому выводу через `.stream()`. Теперь ответы агента появляются в консоли токен за токеном, что делает взаимодействие более отзывчивым и похожим на ChatGPT.
|
||||
|
||||
| Пакет | Версия | Зачем нужен |
|
||||
|-------|--------|-------------|
|
||||
| `ollama` | любой актуальный | Запускает локальную модель LLM (llama3) |
|
||||
| `qdrant` | 1.x+ | Хранит векторные эмбеддинги для быстрых запросов |
|
||||
| `python>=3.10` | – | Язык выполнения |
|
||||
|
||||
> **Важно**: Установите и запустите Ollama и Qdrant перед запуском агента.
|
||||
## ⚙️ Предварительные требования
|
||||
- **Python 3.10+**
|
||||
- **Ollama** (установить можно по инструкции: https://ollama.ai/)
|
||||
```bash
|
||||
curl -fsSL https://ollama.com/install.sh | sh
|
||||
```
|
||||
После установки скачайте нужную модель:
|
||||
```bash
|
||||
ollama pull llama3
|
||||
```
|
||||
- **Qdrant**
|
||||
Можно запустить локально через Docker:
|
||||
```bash
|
||||
docker run -p 6333:6333 qdrant/qdrant
|
||||
```
|
||||
|
||||
## 📦 Установка зависимостей
|
||||
```bash
|
||||
# Пример установки Ollama (Linux)
|
||||
curl -fsSL https://ollama.ai/install.sh | sh
|
||||
|
||||
# Запуск модели llama3
|
||||
ollama run llama3
|
||||
|
||||
# Установка Qdrant (Docker)
|
||||
docker pull qdrant/qdrant
|
||||
docker run -p 6333:6333 qdrant/qdrant
|
||||
```
|
||||
|
||||
## Установка проекта
|
||||
|
||||
```bash
|
||||
git clone https://github.com/yourname/stream-ai-agent.git
|
||||
cd stream-ai-agent
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
`requirements.txt` содержит все необходимые пакеты, включая `langchain`, `langchain-ollama`, `langchain-qdrant`, `qdrant-client` и др.
|
||||
|
||||
`requirements.txt` содержит:
|
||||
|
||||
```
|
||||
langchain==0.2.*
|
||||
langgraph==0.1.*
|
||||
langchain-ollama==0.1.*
|
||||
langchain-qdrant==0.1.*
|
||||
nomic-embed-text==0.3.*
|
||||
python-dotenv
|
||||
```
|
||||
|
||||
## Запуск
|
||||
## 🚀 Запуск
|
||||
|
||||
### 1. Инициализация агента (agent.py)
|
||||
```bash
|
||||
# 1. Убедитесь, что Ollama и Qdrant запущены.
|
||||
# 2. Запустите агента:
|
||||
python agent.py
|
||||
```
|
||||
|
||||
### Пример команды с аргументами (если добавлены CLI‑параметры)
|
||||
|
||||
```bash
|
||||
python agent.py --prompt "Расскажи о последних новостях в области AI"
|
||||
При запуске агент будет ждать ввода команды в консоли, например:
|
||||
```
|
||||
> What is the capital of France?
|
||||
```
|
||||
|
||||
## Пример использования
|
||||
|
||||
После запуска вы увидите интерактивный ввод:
|
||||
### 2. Пример использования с потоковым выводом
|
||||
После запуска вы можете вводить запросы. Ответ будет печататься токен за токеном:
|
||||
|
||||
```
|
||||
> Какую роль играет Qdrant в работе агента?
|
||||
> Tell me a short story about a robot learning to dance.
|
||||
Robot: I was built in a factory...
|
||||
Robot: ...and then I discovered music...
|
||||
Robot: ...
|
||||
```
|
||||
|
||||
Ответ будет выводиться токен за токеном:
|
||||
### 3. Остановка
|
||||
Нажмите `Ctrl+C` или введите команду `exit`.
|
||||
|
||||
```
|
||||
Qdrant используется как быстрый
|
||||
векторный хранилище для эмбеддингов,
|
||||
что позволяет быстро находить релевантные
|
||||
тексты и ускорять генерацию ответов.
|
||||
```
|
||||
|
||||
### Пример кода, который можно вставить в `agent.py` (потоковый вывод)
|
||||
## 📄 Пример использования кода
|
||||
|
||||
```python
|
||||
from langchain_ollama import ChatOllama
|
||||
from langchain.agents import create_agent, AgentExecutor
|
||||
from langchain.tools import tool
|
||||
from langchain_ollama import OllamaLLM
|
||||
from langchain_qdrant import QdrantStore
|
||||
import os
|
||||
|
||||
# Инициализация LLM
|
||||
llm = ChatOllama(model="llama3")
|
||||
# LLM
|
||||
llm = OllamaLLM(model="llama3", temperature=0.7, timeout=60)
|
||||
|
||||
# Потоковый вызов
|
||||
for chunk in llm.stream(prompt):
|
||||
print(chunk.content, end="", flush=True)
|
||||
print() # Перевод строки после завершения
|
||||
# Векторная база (Qdrant)
|
||||
store = QdrantStore(
|
||||
url=os.getenv("QDRANT_URL", "http://localhost:6333"),
|
||||
collection_name="my_collection",
|
||||
embedding_function=OllamaLLM(model="nomic-embed-text")
|
||||
)
|
||||
|
||||
# Инструмент
|
||||
@tool
|
||||
def check_wish(wish: str) -> str:
|
||||
"""Проверка желания на наличие подвоха."""
|
||||
return f"Wish '{wish}' looks safe."
|
||||
|
||||
tools = [check_wish]
|
||||
|
||||
# Агент
|
||||
agent = create_agent(
|
||||
llm=llm,
|
||||
tools=tools,
|
||||
verbose=True
|
||||
)
|
||||
|
||||
executor = AgentExecutor(agent=agent, tools=tools, max_iterations=5)
|
||||
|
||||
# Потоковый вывод
|
||||
for chunk in executor.stream("Will I get a promotion?"):
|
||||
print(chunk, end="", flush=True)
|
||||
```
|
||||
|
||||
> **Совет**: При работе с LangGraph используйте `AgentExecutor` в режиме `stream=True`, чтобы получать токен за токеном из всех инструментов.
|
||||
|
||||
## Вклад
|
||||
|
||||
1. Форкните репозиторий.
|
||||
2. Создайте ветку (`git checkout -b feature/stream-mode`).
|
||||
3. Сделайте коммит и отправьте PR.
|
||||
|
||||
Убедитесь, что тесты проходят: `pytest`.
|
||||
## 📚 Что дальше?
|
||||
- Добавить более сложные инструменты (запросы к API, работа с файлами и т.д.).
|
||||
- Настроить хранение истории диалога в Qdrant для контекстуального ответа.
|
||||
- Интегрировать с веб‑интерфейсом или чат‑ботом.
|
||||
|
||||
---
|
||||
|
||||
**Автор:** Ваше имя
|
||||
**Дата создания:** 2026‑05‑27
|
||||
**Happy coding!**
|
||||
Reference in New Issue
Block a user