b68eb03497
revert Delete directory 'solutions'
120 lines
4.1 KiB
Markdown
120 lines
4.1 KiB
Markdown
# Stream‑режим AI‑агента
|
||
|
||
**Stream‑режим AI‑агента** – проект, демонстрирующий работу LangGraph‑агента в режиме потоковой генерации ответов.
|
||
В отличие от обычного вызова `invoke()`, который возвращает результат только после завершения работы, здесь используется `stream()` и вывод токен за токеном прямо в консоль.
|
||
|
||
---
|
||
|
||
## 📦 Установка зависимостей
|
||
|
||
```bash
|
||
# 1️⃣ Клонируйте репозиторий
|
||
git clone https://github.com/your-username/stream-agent.git
|
||
cd stream-agent
|
||
|
||
# 2️⃣ Создайте виртуальное окружение (рекомендуется)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
||
|
||
# 3️⃣ Установите зависимости из requirements.txt
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
`requirements.txt` содержит:
|
||
|
||
```text
|
||
langchain-core>=0.2.0
|
||
langgraph>=0.1.0
|
||
langchain-community>=0.2.0
|
||
tavily-python>=0.1.0
|
||
openai>=1.0.0
|
||
python-dotenv>=1.0.0 # для загрузки переменных окружения
|
||
```
|
||
|
||
> **Важно**:
|
||
> - Установите ключ OpenAI в переменную окружения `OPENAI_API_KEY`.
|
||
> - Если используете Tavily, добавьте `TAVILY_API_KEY` (необязательно, если вы не планируете использовать поиск).
|
||
|
||
```bash
|
||
export OPENAI_API_KEY="sk-..."
|
||
# export TAVILY_API_KEY="..." # при необходимости
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Запуск
|
||
|
||
### 1️⃣ Основной скрипт `stream_agent.py`
|
||
|
||
```bash
|
||
python stream_agent.py
|
||
```
|
||
|
||
Скрипт автоматически:
|
||
|
||
1. Создаёт LLM‑обёртку для GPT‑4o-mini.
|
||
2. Инициализирует инструмент поиска Tavily.
|
||
3. Формирует LangGraph‑агента и запускает его в режиме `stream()`.
|
||
4. Выводит токены ответа по мере их генерации, а также события об использовании инструментов.
|
||
|
||
### 2️⃣ Тестовый скрипт (если есть)
|
||
|
||
Если вы добавили файл `test_stream_agent.py`, запустите:
|
||
|
||
```bash
|
||
pytest test_stream_agent.py
|
||
```
|
||
|
||
---
|
||
|
||
## 📄 Пример использования
|
||
|
||
```python
|
||
# stream_agent.py
|
||
import os
|
||
from langchain_community.tools.tavily_search import TavilySearchResults
|
||
from langgraph.prebuilt import create_agent_executor
|
||
from openai import OpenAI
|
||
|
||
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
|
||
llm = client.chat.completions.create
|
||
|
||
search_tool = TavilySearchResults(max_results=3)
|
||
|
||
agent = create_agent_executor(
|
||
llm=llm,
|
||
tools=[search_tool],
|
||
agent_type="openai-functions",
|
||
)
|
||
|
||
# Запускаем в режиме стрима
|
||
stream = agent.stream(
|
||
{"messages": [{"role": "human", "content": "Расскажи о последних новостях по искусственному интеллекту"}]},
|
||
stream_mode=["messages", "updates"],
|
||
)
|
||
|
||
for chunk_type, data in stream:
|
||
if chunk_type == "messages":
|
||
print(data["content"], end="", flush=True)
|
||
elif chunk_type == "updates":
|
||
# Можно логировать события использования инструментов
|
||
pass
|
||
|
||
print("\n--- Конец ответа ---")
|
||
```
|
||
|
||
При запуске вы увидите вывод токен за токеном, а также сообщения о вызове инструмента поиска.
|
||
|
||
---
|
||
|
||
## 📚 Что дальше?
|
||
|
||
- **Добавить обработку ошибок**: если LLM не отвечает или инструмент падает.
|
||
- **Интегрировать с UI**: например, в Streamlit для веб‑интерфейса.
|
||
- **Расширить набор инструментов**: добавить поиск в Wikipedia, генерацию изображений и т.д.
|
||
|
||
---
|
||
|
||
## 📄 Лицензия
|
||
|
||
MIT © 2026. |