Запись архива

Агентный код: почему программисты переходят на асинхронные цепочки LLM-вызовов

Рефакторинг агентной архитектуры — от жёстких цепочек к асинхронным графам. Разбор изменений в подходах LangChain, Vercel AI SDK и Dify, которые стоит внедрить уже сейчас.

Схема сравнения синхронной и асинхронной архитектуры AI-агентов с цепочками LLM-вызовов
Схема сравнения синхронной и асинхронной архитектуры AI-агентов с цепочками LLM-вызовов
Job11 | by baileyg100 | openverse | by

В середине 2024 года архитектура AI-агентов перестала быть академическим упражнением и превратилась в инженерную задачу. Проекты, которые ещё полгода назад собирали агентов из линейных цепочек LLM-вызовов, теперь переписывают ядро оркестрации. Причина проста: последовательные вызовы моделей не масштабируются ни по времени, ни по стоимости, ни по надёжности.

Речь не о том, чтобы заменить один промпт на другой. Речь о смене парадигмы: от жёстких цепочек (chain) к асинхронным графам (async graph), где агенты могут ветвиться, ждать внешние события и перезапрашивать модели параллельно. Разберём, что изменилось в ключевых инструментах, где находятся реальные ограничения и что можно протестировать на своём проекте уже сегодня.

Почему асинхронность стала необходимостью

Классическая цепочка — Agent A вызвал LLM, получил ответ, передал Agent B, тот снова вызвал LLM. При среднем времени ответа модели 2–5 секунд цепочка из пяти шагов превращается в 10–25 секунд чистого ожидания. Для интерактивных сценариев — чат-ботов поддержки, код-ревью, голосовых ассистентов — это неприемлемо.

Дополнительный фактор — стоимость. Каждый последовательный вызов оплачивается отдельно, а при ошибке на пятом шаге перезапускать приходится всю цепочку. Асинхронные графы позволяют запускать независимые подзадачи параллельно, сокращая общее время выполнения и уменьшая число повторных вызовов.

Что изменилось в ключевых инструментах

Три основные платформы для построения агентов — LangChain/LangGraph, Vercel AI SDK и Dify — за последние месяцы выпустили крупные обновления, смещающие фокус на асинхронную оркестрацию.

Инструмент Ключевое изменение Версия Дата релиза
LangGraph Введение графов с параллельными узлами и условными переходами v0.2 Июль 2024
Vercel AI SDK Поддержка streaming-агентов и tool calls в асинхронном режиме v3.4 Август 2024
Dify Нативный async workflow с визуальным редактором графов v0.8 Сентябрь 2024

LangGraph официально объявил о переходе от цепочек к графам как к основному способу построения агентов. В документации LangChain говорится, что графовый подход позволяет «явно моделировать состояния, параллелизм и циклы», что критично для агентов, работающих с внешними API или базами данных. Теперь разработчик может определить узлы, которые выполняются параллельно, и условные рёбра, которые выбирают следующий шаг на основе выхода LLM.

Vercel AI SDK добавил потоковую передачу вызовов инструментов (tool calls) в асинхронном режиме. Это значит, что агент может начать обрабатывать ответ модели, не дожидаясь завершения всего вызова. Для код-генерации и анализа данных это даёт прирост скорости до 40% по сравнению с синхронным режимом.

Dify, платформа с открытым исходным кодом, в версии 0.8 представила визуальный редактор асинхронных графов. Пользователь может перетаскивать узлы «LLM-вызов», «API-запрос» и «условие» и соединять их параллельно. В блоге проекта отмечается, что это позволяет создавать агентов, которые одновременно анализируют несколько источников данных.

Практический сценарий: асинхронный код-ревью агент

Представьте агента, который проверяет pull request: анализирует код на ошибки, читает связанные issue, проверяет стиль и генерирует резюме. В синхронном варианте это занимает 30–40 секунд. В асинхронном графе задачи делятся на параллельные потоки:

  • Узел 1: анализ кода на ошибки (вызов LLM, 4–6 секунд)
  • Узел 2: чтение связанных issue (API GitHub, 1–2 секунды)
  • Узел 3: проверка стиля (лёгкая модель, 2–3 секунды)
  • Узел 4: сбор результатов и генерация резюме (запускается после завершения всех узлов 1–3)

Общее время — около 6–8 секунд вместо 30–40. При этом стоимость вызовов не растёт, так как параллельные запросы оплачиваются так же, как последовательные.

Ограничения и контраргументы

Асинхронные графы не панацея. Первое ограничение — сложность отладки. В синхронной цепочке легко воспроизвести шаги: каждый вызов зависит от предыдущего. В асинхронном графе состояние распределённое, и ошибка может возникнуть в любом узле. Инструменты вроде LangSmith частично решают эту проблему, но пока не полностью.

Второе — модели не всегда корректно обрабатывают параллельные контексты. Если два узла отправляют запросы к одной LLM, модель может смешать контексты или вернуть несогласованные ответы. В документации LangGraph это описано как known limitation — разработчик должен явно управлять shared state через reduce-функции.

Третье — порог входа. Для простого агента с двумя-тремя шагами синхронная цепочка остаётся быстрее в разработке и проще в поддержке. Асинхронный граф оправдан, когда количество узлов превышает пять или есть внешние зависимости с разным временем ответа.

Что можно протестировать уже сегодня

Начать стоит с небольшого эксперимента. Возьмите существующего агента, который выполняет три-четыре последовательных LLM-вызова, и попробуйте перевести его на графовую архитектуру.

Для пользователей LangChain: замените `Chain` на `StateGraph` из LangGraph. Определите узлы как асинхронные функции с `async def`. Добавьте параллельные рёбра.
2. Для пользователей Vercel AI SDK: включите `streamText` с `toolCall` streaming. Проверьте, как агент реагирует на частичные результаты.
3. Для пользователей Dify: создайте новый workflow в визуальном редакторе, соедините узлы «LLM» и «HTTP Request» параллельно. Замерьте время выполнения.

Официальный репозиторий LangGraph содержит примеры для типовых сценариев. В блоге Vercel есть туториал по асинхронным tool calls. Dify публикует шаблоны workflow в своём GitHub.

Важно помнить: ни один из инструментов не гарантирует полной согласованности состояний при параллельных вызовах. Тестируйте на реальных данных, замеряйте latency и стоимость. Если прирост скорости не превышает 20% — возможно, синхронная цепочка остаётся лучшим выбором для вашего сценария.

Асинхронные графы — это не мода, а ответ на инженерные ограничения последовательных вызовов. Они не заменяют понимания работы LLM, но дают инструмент для построения более быстрых и дешёвых агентов. Начните с одного сценария, измерьте результат и принимайте решение на основе цифр, а не хайпа.