Inquir Compute · agentic-воркфлоу

Бэкенд agentic-воркфлоу для многошаговых AI-агентов

Agentic-воркфлоу нужен durable-бэкенд: каждый шаг — изолированная serverless-функция, вызовы инструментов идут через authenticated-маршруты шлюза, а долгая или нестабильная работа — на durable-очереди фоновых задач: автоповторы с backoff, dead-letter и прогоны, переживающие рестарт. Трассировки по шагам показывают вход, выход и число повторов на каждый ход модели.

Обновлено: 2026-06-28

Суть ответа

Бэкенд agentic-воркфлоу для многошаговых AI-агентов. Каждый шаг воркфлоу — serverless-функция: plan, call-tool, validate, notify, approve. Durable-очередь фоновых задач связывает шаги с автоповторами, backoff и dead-letter — упавший шаг обогащения повторяется без перезапуска планирования модели.

Когда подходит и когда нет

  • Многошаговые агенты с инструментами, валидацией и уведомлением людей
  • Воркфлоу с durable-состоянием, повторами на шаг или approval-gates

На что обратить внимание

  • In-memory state machine теряет прогресс при рестарте. Нет durable-чекпоинта между вызовами инструментов, аудита для compliance и паузы на human approval без самописной обвязки.
  • Прямые вызовы инструментов из оркестратора смешивают трафик модели с ключами БД и внешних API в одной среде — сложнее разграничить доступ и ротировать секреты.

Почему agentic-воркфлоу нужен отдельный бэкенд

Один цикл LLM с inline-инструментами работает в демо. В проде agentic-воркфлоу длятся минуты или часы: исследование, действие, проверка, эскалация, уведомление. При падении шага четыре нужен повтор только его — не весь диалог с начала.

Без отдельного бэкенда оркестрация, выполнение инструментов и побочные эффекты делят один процесс. Один плохой деплой или утечка памяти роняет все воркфлоу агента.

Где ломается лёгкая оркестрация агентов

In-memory state machine теряет прогресс при рестарте. Нет durable-чекпоинта между вызовами инструментов, аудита для compliance и паузы на human approval без самописной обвязки.

Прямые вызовы инструментов из оркестратора смешивают трафик модели с ключами БД и внешних API в одной среде — сложнее разграничить доступ и ротировать секреты.

Serverless-функции и пайплайны как agentic-слой

Каждый шаг воркфлоу — serverless-функция: plan, call-tool, validate, notify, approve. Durable-очередь фоновых задач связывает шаги с автоповторами, backoff и dead-letter — упавший шаг обогащения повторяется без перезапуска планирования модели.

Вызовы инструментов идут через authenticated-маршруты шлюза с секретами на функцию. Оркестратор видит структурированный JSON; платформа даёт изоляцию, тёплые пулы и историю выполнения по шагам.

Паттерны бэкенда agentic-воркфлоу

Durable-многошаговые прогоны

Долгие шаги выполняются на durable-очереди фоновых задач: автоповторы с exponential backoff, dead-letter после повторных сбоев и reaping по visibility-timeout, так что прогоны переживают рестарт воркера. Упавший шаг повторяется без перезапуска завершённых.

Инструменты как функции шлюза

Каждый инструмент — authenticated HTTP-эндпоинт в изолированном контейнере с scoped-секретами — не inline-код в оркестраторе.

Human-in-the-loop

Пауза пайплайна перед чувствительными действиями; продолжение по вебхуку или ручному триггеру.

Ветвление и fan-out

Маршрутизация по выходу инструмента, confidence или политике — без вложенных if/else в монолите.

Как собрать бэкенд agentic-воркфлоу на Inquir

Разделите оркестрацию и выполнение: модель планирует, функции шлюза выполняют инструменты, а durable-очередь фоновых задач несёт долгую работу с ретраями.

1

Определить шаги воркфлоу

Сопоставьте каждое действие агента с функцией или шагом пайплайна: plan, tool-call, validate, notify, approve.

2

Подключить инструменты к шлюзу

Одна функция на инструмент с API-ключом и секретами workspace. Структурированный JSON обратно в оркестратор.

3

Связать шаги в пайплайн

Durable-прогоны: повторы на шаг, ветвление по выходу инструмента, ожидание approval и полная история.

Agentic-воркфлоу: plan → tool → validate → notify

HTTP-вход ставит прогон агента как durable-задачу в очередь. Каждый шаг — отдельный вызов функции, записанный в очереди; при рестарте воркера reaping по visibility-timeout повторно запускает шаг в работе, а не весь прогон. Упавшие шаги повторяются с backoff и уходят в dead-letter по лимиту.

pipelines/research-agent.json (pipeline graph)
{
  "schemaVersion": 1,
  "nodes": [
    { "id": "in",      "kind": "httpTrigger", "name": "Start research", "config": { "method": "POST" } },
    { "id": "search",  "kind": "lambda", "name": "Search docs",
      "config": { "functionId": "search-docs",
                  "inputMapping": { "query": "{{trigger.body.query}}" },
                  "retryPolicy": { "maxAttempts": 3, "backoffMs": 1000, "strategy": "exponential" } } },
    { "id": "draft",   "kind": "lambda", "name": "Generate draft",
      "config": { "functionId": "generate-draft",
                  "inputMapping": { "results": "{{steps.search.output.results}}" } } },
    { "id": "approve", "kind": "humanGate", "name": "Approve publish",
      "config": { "mode": "approve", "promptTemplate": "Publish the draft for {{trigger.body.query}}?" } },
    { "id": "publish", "kind": "lambda", "name": "Publish result", "config": { "functionId": "publish-result" } },
    { "id": "reject",  "kind": "lambda", "name": "Notify rejected", "config": { "functionId": "notify-rejected" } }
  ],
  "edges": [
    { "id": "e1", "sourceNodeId": "in",      "targetNodeId": "search" },
    { "id": "e2", "sourceNodeId": "search",  "targetNodeId": "draft",   "sourceHandle": "success" },
    { "id": "e3", "sourceNodeId": "draft",   "targetNodeId": "approve", "sourceHandle": "success" },
    { "id": "e4", "sourceNodeId": "approve", "targetNodeId": "publish", "sourceHandle": "approve" },
    { "id": "e5", "sourceNodeId": "approve", "targetNodeId": "reject",  "sourceHandle": "reject" }
  ]
}
functions/search-docs.mjs (pipeline step function)
export async function handler(event) {
  // API key auth enforced at the gateway route before this code runs
  const { query } = JSON.parse(event.body || '{}');
  const results = await searchInternalDocs(query); // DB_URL from workspace secrets
  return { statusCode: 200, body: JSON.stringify({ results, count: results.length }) };
}
start a run (via the pipeline httpTrigger route)
# The httpTrigger node exposes the pipeline on a gateway route.
# POST a query to start a run; it flows search -> draft -> approval.
curl -X POST https://<your-app>/api/research-agent \
  -H "X-Api-Key: $INQUIR_API_KEY" \
  -d '{"query":"Q3 pricing changes"}'
# -> { "runId": "...", "status": "RUNNING" }
# The run pauses at the humanGate until someone approves or rejects;
# each step's input, output, and retry count is in the execution history.

Когда уместен бэкенд agentic-воркфлоу

Когда это уместно

  • Многошаговые агенты с инструментами, валидацией и уведомлением людей
  • Воркфлоу с durable-состоянием, повторами на шаг или approval-gates

Когда лучше выбрать другое

  • Одноходовый чат с одним вызовом инструмента без побочных эффектов

Вопросы и ответы

Чем отличается от бэкенда tool calling?

Tool calling — отдельные HTTP-эндпоинты на инструмент. Agentic-воркфлоу добавляет многошаговый слой: цепочки шагов на durable-очереди фоновых задач, ветвление, ожидание approval, автоповторы и историю выполнения по шагам.

Можно ли использовать LangGraph или CrewAI?

Да. Оставьте свой фреймворк оркестрации; направляйте вызовы инструментов на маршруты Inquir, а долгие или повторяемые шаги — в durable-очередь фоновых задач.

Что при падении шага пайплайна?

Шаг повторяется по политике пайплайна. Завершённые шаги не перезапускаются. В истории видно, какой шаг упал, сколько было повторов и текст ошибки.