Перейти к основному содержимому

Типы запросов

Workflow определяют, какой Provider (исполнитель) обрабатывает запрос, объявляя request.kind. Система имеет несколько встроенных типов запросов, соответствующих различным бэкендам и режимам выполнения.

Обзор типов запросов

kindПрименимый ProviderОписание
pass-through.run.v1pass-throughЧисто локальное выполнение, удалённый бэкенд не задействован
skillrunner.job.v1skillrunner / acpОдношаговое выполнение навыка SkillRunner
skillrunner.sequence.v1acpМногошаговое цепочечное выполнение навыков
acp.prompt.v1acpОтправить промпт непосредственно бэкенду ACP
acp.skill.run.v1acpОтправить запуск навыка непосредственно бэкенду ACP
generic-http.request.v1generic-httpОдношаговый вызов HTTP API
generic-http.steps.v1generic-httpМногошаговые вызовы HTTP API

pass-through.run.v1 — Чисто локальное выполнение

Удалённый бэкенд не требуется; выполняется непосредственно внутри плагина. Подходит для чисто локальных сценариев, таких как файловые операции и экспорт данных.

{
"provider": "pass-through",
"request": {
"kind": "pass-through.run.v1"
}
}

При построении запроса в хуке buildRequest обычно передают selectionContext и parameter:

export function buildRequest({ selectionContext, executionOptions }) {
return {
kind: "pass-through.run.v1",
selectionContext,
parameter: executionOptions?.workflowParams || {},
};
}

skillrunner.job.v1 — Одношаговое выполнение навыка

Отправить один запрос на выполнение навыка бэкенду Skill-Runner. Опрос для получения результатов после отправки.

{
"provider": "skillrunner",
"request": {
"kind": "skillrunner.job.v1",
"create": {
"skill_id": "literature-analysis",
"skill_source": "local-package"
},
"input": {
"upload": {
"files": [
{ "key": "source", "from": "selected.markdown" }
]
}
},
"poll": {
"interval_ms": 2000,
"timeout_ms": 600000
}
}
}
ПолеОписание
create.skill_idИдентификатор навыка для выполнения
create.skill_sourceИсточник навыка. "local-package" (входит в пакет), "installed" (уже установлен)
input.upload.filesСписок файлов для загрузки. from может быть "selected.markdown", "selected.pdf", "selected.source"
poll.interval_msИнтервал опроса (миллисекунды)
poll.timeout_msОбщий таймаут (миллисекунды)

Когда workflow выбирает бэкенд ACP, skillrunner.job.v1 автоматически адаптируется к acp.skill.run.v1, поэтому workflow, объявленные как skillrunner.job.v1, также совместимы с бэкендом ACP.

skillrunner.sequence.v1 — Многошаговое цепочечное выполнение навыков

Когда несколько навыков нужно выстроить в последовательность (где выход одного шага становится входом следующего), используйте последовательное выполнение. Типичные сценарии включают многоэтапные конвейеры (например, трёхшаговый поток синтеза по теме: подготовка → основное обогащение → завершение), где каждый шаг обрабатывается разным навыком, передавая промежуточные результаты через механизм handoff.

Свяжите несколько навыков в последовательность, где выход одного шага может служить входом для следующего (handoff).

{
"provider": "acp",
"request": {
"kind": "skillrunner.sequence.v1",
"sequence": {
"steps": [
{
"id": "prepare",
"skill_id": "create-topic-synthesis-prepare",
"workspace": "new",
"parameter": { "language": "en-US" }
},
{
"id": "core",
"skill_id": "topic-synthesis-core-enrichment",
"workspace": "reuse-workflow",
"handoff": {
"from_step": "prepare",
"pass_through": true
}
},
{
"id": "finalize",
"skill_id": "topic-synthesis-finalize",
"workspace": "reuse-workflow"
}
]
}
}
}

Конфигурация шага

ПолеОписание
idУникальный идентификатор шага, на который ссылается handoff
skill_idИдентификатор навыка для выполнения
modeОбязательный. Режим выполнения: "auto" (неинтерактивный) или "interactive" (требует ввода пользователя)
workspaceПолитика рабочего пространства. "new" (создать новое рабочее пространство), "reuse-workflow" (переиспользовать родительское рабочее пространство)
parameterПараметры, передаваемые навыку
inputВходные данные, передаваемые навыку
short_circuitПравила раннего завершения. См. ниже
fetch_typeУказать тип получения для каждого шага. "bundle" (загрузить пакет zip артефактов); если не указано, используется result.fetch.type на уровне workflow
apply_resultПрименение результата на уровне шага: workflow_id указывает, какой applyResult под-workflow вызывать; on_failure контролирует поведение при ошибке ("continue" или "fail_sequence")
include_ifУсловное выполнение шага. Либо { kind: "parameter", parameter: "...", equals: ... } для проверки параметра workflow, либо { kind: "runtime", condition: "..." } для условий выполнения

Раннее завершение (short_circuit)

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

{
"id": "prepare",
"skill_id": "create-topic-synthesis-prepare",
"workspace": "new",
"short_circuit": {
"when": {
"path": "status",
"equals": "canceled"
},
"result": "step_output"
}
}
ПолеОписание
when.pathКакое поле в выходном JSON шага проверять
when.equalsЗапустить завершение, когда значение поля равно этому значению
resultРезультат после завершения: "step_output" (полный выход текущего шага)

Конфигурация Handoff

Handoff передаёт данные от одного шага к последующим шагам через массив bindings. Каждая привязка описывает одну передачу значения или файла.

Полная передача (все выходные поля из предшествующего шага):

{
"handoff": {
"bindings": [
{
"kind": "value",
"target": "/input/handoff"
}
]
}
}

Выборочное сопоставление полей:

{
"handoff": {
"bindings": [
{
"kind": "value",
"step": "step1",
"source": "output_field_name",
"target": "/input/field_name",
"required": false
},
{
"kind": "value",
"step": "step1",
"source": "status",
"target": "/input/step1_status",
"required": false
}
]
}
}
Поле привязкиОписание
kind"value" для данных, "file" для ссылок на файлы
stepID исходного шага (из выхода какого шага читать). Если пропущено, читается из непосредственно предшествующего шага
sourceИмя поля в выходном JSON исходного шага
targetJSON-путь, куда должно быть записано значение во входе текущего шага (например, "/input/field_name")
requiredЕсли true, шаг завершится с ошибкой, когда исходное значение отсутствует. По умолчанию false
valueДля kind: "value", буквальное значение для передачи (используется, когда step/source пропущены)

generic-http.request.v1 — Вызов HTTP API

Отправить один HTTP-запрос бэкенду Generic HTTP.

{
"provider": "generic-http",
"request": {
"kind": "generic-http.request.v1"
}
}

Обычно используется для вызова внешних REST API (например, сервиса разбора PDF MinerU).

generic-http.steps.v1 — Многошаговые вызовы HTTP

Выполнить несколько шагов HTTP-запросов последовательно.

{
"provider": "generic-http",
"request": {
"kind": "generic-http.steps.v1"
}
}

Как выбрать правильный Provider

Что должен делать ваш workflow...Выберите providerТип запроса
Выполнять чисто локальные операции, без удалённых вызововpass-throughpass-through.run.v1
Отправить один навык в Skill-Runnerskillrunnerskillrunner.job.v1
Связать несколько навыков в последовательностьacpskillrunner.sequence.v1
Вызвать HTTP APIgeneric-httpgeneric-http.request.v1

Примечание: provider — это единственное поле, определяющее, с какими бэкендами совместим workflow. request.kind используется только для маршрутизации к правильному исполнителю и не участвует в выводе совместимости бэкендов.

Следующие шаги