Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 718новых вакансий за сутки·92 064вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 263
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python16 419
  • Облачные технологии13 176
  • QA вакансии3 434
  • Backend вакансии2 038
  • Инженер данных1 679
  • Продакт-менеджер1 175

Разработка

  • Android1 816
  • iOS1 666
  • AI вакансии939
  • Fullstack вакансии894
  • Frontend вакансии718
  • Mobile вакансии38

По стеку

  • Go8 563
  • Java6 092
  • Node.js1 890
  • Kotlin1 554
  • .NET1 545
  • Rust1 433
  • PHP641
  • C#563
  • C++498

DevOps и инфраструктура

  • Kubernetes7 305
  • DevOps вакансии5 596
  • Linux-инфраструктура5 291
  • Terraform / IaC4 015
  • CI/CD2 559
  • Мониторинг и Observability1 735
  • SRE548
  • Кибербезопасность411

Аналитика и данные

  • Data Scientist1 045
  • Бизнес-аналитик868
  • Аналитик данных830
  • Системный аналитик134

Другие направления

  • Проджект-менеджер531
  • UI/UX дизайн129
  • Ручное тестирование14

По регионам

  • Вакансии в США45 164
  • Вакансии в Европе21 402
  • Вакансии в Канаде4 469
  • Работа в России3 876

По формату

  • Удалённые вакансии74 516
  • Релокация в США45 163
  • Гибридная работа11 409
  • Офисная работа6 957

По уровню

  • Senior вакансии41 452
  • Middle вакансии20 529
  • Junior вакансии6 700

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме LangGraphВсе вопросы
LangGraphMiddleКодинг

Как реализовать стриминг в LangGraph для отображения промежуточных шагов агента пользователю?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

LangGraph поддерживает стриминг через graph.stream() / graph.astream() с режимами values, updates, messages и events; для промежуточных шагов агента используют режим messages или astream_events.

Стриминг обновлений состояния (updates)

from typing import Annotated, TypedDict
import operator
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from langgraph.graph.message import add_messages


class State(TypedDict):
    messages: Annotated[list, add_messages]


llm = ChatOpenAI(model="gpt-4o-mini", streaming=True)


def call_model(state: State) -> dict:
    response = llm.invoke(state["messages"])
    return {"messages": [response]}


builder = StateGraph(State)
builder.add_node("model", call_model)
builder.set_entry_point("model")
builder.add_edge("model", END)
graph = builder.compile()

# Синхронный стриминг шагов
for chunk in graph.stream(
    {"messages": [HumanMessage(content="Привет!")]},
    stream_mode="updates",
):
    print(chunk)  # {"model": {"messages": [AIMessage(...)]}}

Стриминг в LangGraph

LangGraph предоставляет несколько режимов стриминга, которые выбираются параметром stream_mode. Это позволяет показывать пользователю прогресс выполнения агента в реальном времени.

Режимы стриминга

  • "values" — после каждого шага отдаёт полное состояние графа.
  • "updates" — отдаёт только дельту (что изменилось на этом шаге).
  • "messages" — стримит токены LLM по мере генерации (требует LangChain-модели с поддержкой стриминга).
  • "debug" — детализированные события для отладки.

Стриминг токенов LLM (messages mode)

import asyncio
from langchain_core.messages import HumanMessage


async def stream_tokens():
    async for chunk, metadata in graph.astream(
        {"messages": [HumanMessage(content="Расскажи о Python")]},
        stream_mode="messages",
    ):
        # chunk — AIMessageChunk с токенами
        # metadata — {"langgraph_node": "model", ...}
        if hasattr(chunk, "content") and chunk.content:
            print(chunk.content, end="", flush=True)


asyncio.run(stream_tokens())

astream_events для полного контроля

async def stream_events():
    async for event in graph.astream_events(
        {"messages": [HumanMessage(content="Вопрос")]},
        version="v2",
    ):
        kind = event["event"]
        if kind == "on_chat_model_stream":
            content = event["data"]["chunk"].content
            if content:
                print(content, end="", flush=True)
        elif kind == "on_chain_start":
            print(f"\n[START node: {event['name']}]")
        elif kind == "on_chain_end":
            print(f"\n[END node: {event['name']}]")


asyncio.run(stream_events())

Несколько режимов одновременно

async for chunk in graph.astream(
    {"messages": [HumanMessage(content="test")]},
    stream_mode=["messages", "updates"],  # список режимов
):
    mode, data = chunk  # tuple (режим, данные)
    print(f"{mode}: {data}")

Подводные камни

  • streaming=True в модели — без этого флага в ChatOpenAI/ChatAnthropic режим "messages" вернёт единственный чанк в конце, а не поток.
  • astream vs stream — в async-контексте (FastAPI, async handlers) используйте async-версии; вызов синхронного stream внутри asyncio вызывает блокировку event loop.
  • thread_id при стриминге с checkpointer — нужно передавать config={"configurable": {"thread_id": "..."}}}, иначе состояние не сохраняется.
  • Большой объём событий в astream_events — при длинных агентных цепочках количество событий огромно; фильтруйте по event["name"].
  • Кодировка в HTTP SSE — при отдаче через FastAPI StreamingResponse убедитесь, что каждый чанк заканчивается на \n\n для корректного SSE-протокола.
  • Отмена стрима — если клиент отключился, asyncio-генератор нужно явно закрывать через aclose(), иначе LLM-запрос продолжится в фоне.
  • Режим values медленнее — он сериализует всё состояние на каждом шаге; для больших состояний предпочтительнее updates.

Частые вопросы на собеседовании

  • Как LangGraph представляет состояние с помощью TypedDict и как оно передаётся между узлами?
  • Что является основной абстракцией в LangGraph — что такое nodes, edges и state?
  • Что такое LangGraph и как он расширяет LangChain для построения stateful агентских воркфлоу?
  • В каких data/AI-задачах LangGraph даёт реальный выигрыш, а где лучше выбрать другой инструмент или более простой pipeline?

Типичные ошибки

  • Объяснять streaming intermediate steps только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

Что проверяет интервьюер

  • Может ли связать streaming intermediate steps с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Как вы знаете этот вопрос?

Проверить себя по теме LangGraph →

Источники

  • https://docs.langchain.com/oss/python/langgraph/streaming
←Предыдущий вопросВ чём разница между синхронным и асинхронным вызовом графа LangGraph?Следующий вопрос→Как скомпилировать `StateGraph` и что делает `graph.compile()`?

Связанные темы

LangGraphdata-ailanggraphllm-orchestrationtool-calling