4.1 KiB
4.1 KiB
Stream‑режим AI‑агента
Stream‑режим AI‑агента – проект, демонстрирующий работу LangGraph‑агента в режиме потоковой генерации ответов.
В отличие от обычного вызова invoke(), который возвращает результат только после завершения работы, здесь используется stream() и вывод токен за токеном прямо в консоль.
📦 Установка зависимостей
# 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 содержит:
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(необязательно, если вы не планируете использовать поиск).
export OPENAI_API_KEY="sk-..."
# export TAVILY_API_KEY="..." # при необходимости
🚀 Запуск
1️⃣ Основной скрипт stream_agent.py
python stream_agent.py
Скрипт автоматически:
- Создаёт LLM‑обёртку для GPT‑4o-mini.
- Инициализирует инструмент поиска Tavily.
- Формирует LangGraph‑агента и запускает его в режиме
stream(). - Выводит токены ответа по мере их генерации, а также события об использовании инструментов.
2️⃣ Тестовый скрипт (если есть)
Если вы добавили файл test_stream_agent.py, запустите:
pytest test_stream_agent.py
📄 Пример использования
# 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.