Stream‑режим AI‑агента: README.md
This commit is contained in:
@@ -0,0 +1,120 @@
|
|||||||
|
# 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.
|
||||||
Reference in New Issue
Block a user