Документация

Суб-пайплайны

Один pipeline может вызывать другой как функцию — для вынесения переиспользуемой логики или совместного использования возможности между организациями, с полным аудиторским следом.

Суб-пайплайны

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

Два симметричных строительных блока:

  • pipeline_callable (получатель, объявленный на узле Start) раскрывает pipeline за URL, с типизированным контрактом входа и выхода.
  • pipeline_call (узел) вызывает этот pipeline: он отображает свои входы из текущего контекста и сохраняет результат в выходной ключ.

Раскрытие pipeline (pipeline_callable)

На «сервисном» pipeline вы добавляете получатель pipeline_callable, который объявляет:

  • Входы — список ожидаемых параметров (имя, тип, обязательный или опциональный).
  • Выходы — ключи возвращаемого результата.
  • Ключ ответа — какое значение контекста составляет ответ.
  • Бюджет времени — максимальное время выполнения (30 с по умолчанию, 300 с максимум).

Затем pipeline получает публичный URL (с токеном) для передачи вызывающему pipeline. Токен можно ротировать в любой момент, чтобы отозвать доступ.

Вызов pipeline (pipeline_call)

На «потребляющем» pipeline узел pipeline_call настраивается с помощью:

  • URL целевого pipeline.
  • Отображения входов — для каждого ожидаемого параметра — селектор контекста, который его поставляет.
  • Выходного ключа, где сохраняется результат.

При сбое (тайм-аут, ошибка, некорректный ответ) pipeline продолжается: выходной ключ получает null, а ключ ._error описывает произошедшее. Оркестрация запасного варианта — ответственность вашего pipeline (запасная ветвь, оповещение).

Межорганизационные вызовы: opt-in и с аудитом

Суб-пайплайн может быть вызван другой организацией — это основа для совместного использования возможностей между сущностями. Модель остаётся строгой:

  • Отклоняется по умолчанию. Межорганизационные вызовы возможны только если администратор раскрытого pipeline явно их разрешает (allow_cross_org).
  • Рекомендуется подпись HMAC. Как только межорганизационный вызов открыт, активируется общий секрет: каждый запрос подписывается, а получатель отклоняет любую отсутствующую или недействительную подпись.
  • Всё трассируется. Каждый вызов записывает аудиторскую запись (вызывающая организация, узел, глубина, задержка, статус) — до выполнения, чтобы трасса существовала даже в случае инцидента. Обе стороны могут просматривать собственные логи (сторона вызывающего и сторона вызываемого), в соответствии с правами доступа GDPR.

Биллинг: вызываемая организация платит за ресурсы (LLM, голос…), потреблённые во время выполнения. Логика гостя: вы используете ресурсы своего хоста.

Предотвращение циклов

Pipeline, который вызвал бы сам себя — напрямую или через цепочку — потреблял бы кредиты бесконечно. Две защиты:

  • Статическое обнаружение при регистрации (внутри организации): редактор отказывается публиковать прямой цикл (A → A) или косвенный цикл (A → B → C → A), указывая на нарушающую цепочку.
  • Защита во время выполнения (между организациями, где статическая видимость невозможна): каждый вызов передаёт свою глубину; за пределами настроенного потолка вызов обрывается.

Режимы выполнения

  • Синхронный — узел ждёт полного ответа. Подходит для коротких операций.
  • Потоковый — для долго выполняющегося суб-пайплайна (рассуждение LLM, пакетная обработка) прогресс передаётся в реальном времени без фиксированного тайм-аута. Вызывающий pipeline может отобразить этот прогресс в UI.

Когда его использовать

  • Вынесите последовательность, переиспользуемую несколькими pipeline (суммировать тред, квалифицировать лид, проверить документ).
  • Разделите возможность между организациями — одна сущность раскрывает «проверить счёт по ERP», другая её потребляет, с аудиторским следом с обеих сторон.
  • Распараллельте веерный запуск независимых подзадач из цикла.