# 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.