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