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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python7 042
  • Облачные технологии5 085
  • QA вакансии1 814
  • Android1 199
  • Инженер данных831
  • Продакт-менеджер339

Разработка

  • iOS1 135
  • Backend вакансии1 131
  • Fullstack вакансии475
  • AI вакансии458
  • Frontend вакансии404
  • Mobile вакансии27

По стеку

  • Go4 093
  • Java2 435
  • Kotlin990
  • Node.js827
  • Rust665
  • .NET525
  • PHP282
  • C++223
  • C#199

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

  • Kubernetes2 931
  • Linux-инфраструктура2 312
  • DevOps вакансии2 110
  • Terraform / IaC1 714
  • CI/CD872
  • Мониторинг и Observability825
  • SRE253
  • Кибербезопасность50

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

  • Аналитик данных497
  • Data Scientist463
  • Бизнес-аналитик374
  • Системный аналитик54

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

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

По регионам

  • Вакансии в США25 531
  • Вакансии в Европе9 792
  • Работа в России3 193
  • Вакансии в Канаде2 236

По формату

  • Удалённые вакансии43 578
  • Релокация в США25 531
  • Гибридная работа4 289
  • Офисная работа3 340

По уровню

  • Senior вакансии21 650
  • Middle вакансии12 211
  • Junior вакансии3 886

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

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise125 вакансий
  • Celonis28 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen17 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

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

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

Какие ключевые абстракции LangGraph нужно понимать, чтобы не получать формально рабочие, но неверные результаты?

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

Ключевые абстракции LangGraph: State с reducer-функциями (иначе данные перетираются), чистые Node-функции, детерминированный conditional routing и Checkpointer с уникальным thread_id для корректного resume.

State — единственный источник истины

State — это TypedDict (или Pydantic-модель), который передаётся между всеми узлами. Ошибка новичков: мутировать внешние переменные вместо возврата нового State. LangGraph применяет reducer-функции для слияния обновлений; по умолчанию последний write выигрывает, но для списков нужен явный Annotated[list, operator.add].

import operator
from typing import Annotated, TypedDict

class State(TypedDict):
    messages: Annotated[list, operator.add]  # reducer: append, не replace
    current_tool: str                         # replace: последний write побеждает
    retry_count: int

Без явного reducer для messages каждый узел перезапишет список, и история диалога потеряется — граф работает, но результат неверный.

Ключевые абстракции LangGraph

LangGraph строится на четырёх уровнях: State, Node, Edge и Checkpointer. Непонимание любого из них ведёт к формально работающему, но неверному поведению.

Node — чистая функция над State

Узел получает State, возвращает словарь с изменёнными полями. Узел не должен хранить внутреннее состояние между вызовами — только читать из State и писать в State. Типичная ошибка: кешировать результат LLM в closure вместо State, из-за чего при resume после checkpoint данные теряются.

Edge и conditional routing

Рёбра определяют поток управления. add_edge — безусловный переход. add_conditional_edges принимает routing-функцию, которая возвращает строку с именем следующего узла. Routing-функция должна быть чистой и детерминированной — она вызывается при каждом replay из checkpoint.

from typing import Literal

def should_continue(state: State) -> Literal["tools", "__end__"]:
    last_msg = state["messages"][-1]
    if hasattr(last_msg, "tool_calls") and last_msg.tool_calls:
        return "tools"
    return "__end__"

builder.add_conditional_edges("agent", should_continue)

Checkpointer — персистентность и resume

Checkpointer сохраняет StateSnapshot после каждого узла. Это позволяет прерваться на interrupt_before=["human_review"] и возобновить позже. Ключевой концепт — thread_id: каждый независимый диалог/сессия должен иметь уникальный thread_id, иначе состояния перемешаются.

from langgraph.checkpoint.sqlite import SqliteSaver

with SqliteSaver.from_conn_string("checkpoints.db") as memory:
    graph = builder.compile(checkpointer=memory)

    config = {"configurable": {"thread_id": "user-42-session-7"}}

    # Первый вызов
    result = graph.invoke({"messages": [], "retry_count": 0}, config)

    # Возобновление с того же места
    snapshot = graph.get_state(config)
    graph.update_state(config, {"retry_count": 0})  # коррекция состояния
    resumed = graph.invoke(None, config)  # None = продолжить с checkpoint

Send API для динамического fan-out

Send позволяет запустить один узел несколько раз параллельно с разными данными — для map-reduce паттернов. Без понимания Send разработчики пишут цикл внутри узла, теряя параллелизм и видимость в трассировке.

from langgraph.types import Send

def spawn_workers(state: State):
    return [Send("worker", {"item": item}) for item in state["items"]]

builder.add_conditional_edges("dispatcher", spawn_workers)

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

  • Мутация State in-place вместо возврата нового словаря: LangGraph не увидит изменение, snapshot окажется устаревшим.
  • Отсутствие reducer для списков: каждый узел перетирает предыдущие сообщения вместо добавления.
  • Один thread_id на всех пользователей: состояния перемешиваются, получаете чужие данные.
  • Не-детерминированная routing-функция (с side effects или random): при replay из checkpoint граф пойдёт другим путём.
  • Хранение ссылок на внешние объекты (DB-соединение) в State: checkpoint не сериализует их, resume падает с ошибкой.
  • Игнорирование RunnableConfig: без передачи config в вложенные вызовы теряется thread_id и трассировка LangSmith.
  • Использование SqliteSaver в production с параллельными запросами: SQLite не поддерживает concurrent writes — нужен PostgresSaver.
  • Отсутствие явного терминального условия в цикличных графах: граф зависает в бесконечном цикле без исключения.

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

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

Что портит ответ

  • Знать термины LangGraph, но не понимать связи между абстракциями
  • Объяснять поведение через отдельные примеры вместо причинной модели
  • Не связывать mental model с диагностикой ошибок

Что слушает интервьюер

  • Понимает ключевые абстракции LangGraph
  • Может предсказывать поведение системы через mental model
  • Связывает модель с debugging и production decisions

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

Проверить себя по теме LangGraph →
←Предыдущий вопросКак отлаживать LangGraph-приложение с помощью трейсинга LangSmith?Следующий вопрос→Как проверять корректность решения на LangGraph, а не только успешное выполнение кода?

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

LangGraphlanggraphsystems-thinkingtechnical-communicationtechnology-selectiontrade-off-analysis