Passa al contenuto principale

Tipi di richiesta

I Workflow determinano quale Provider (esecutore) gestisce la richiesta dichiarando request.kind. Il sistema dispone di diversi tipi di richiesta integrati, corrispondenti a diversi backend e modalità di esecuzione.

Panoramica dei tipi di richiesta

kindProvider applicabileDescrizione
pass-through.run.v1pass-throughEsecuzione puramente locale, nessun backend remoto coinvolto
skillrunner.job.v1skillrunner / acpEsecuzione di una Skill SkillRunner in un singolo passo
skillrunner.sequence.v1acpEsecuzione di Skill concatenate in più passi
acp.prompt.v1acpInvia direttamente un prompt al backend ACP
acp.skill.run.v1acpInvia direttamente un'esecuzione di Skill al backend ACP
generic-http.request.v1generic-httpChiamata API HTTP in un singolo passo
generic-http.steps.v1generic-httpChiamate API HTTP in più passi

pass-through.run.v1 — Esecuzione puramente locale

Nessun backend remoto richiesto; viene eseguito direttamente all'interno del plugin. Adatto per scenari puramente locali come operazioni su file ed esportazione di dati.

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

Quando si costruisce la richiesta nell'hook buildRequest, tipicamente si passano selectionContext e parameter:

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

skillrunner.job.v1 — Esecuzione di Skill in un singolo passo

Invia una richiesta di esecuzione di una singola Skill al backend Skill-Runner. Effettua il polling dei risultati dopo l'invio.

{
"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
}
}
}
CampoDescrizione
create.skill_idIdentificatore della Skill da eseguire
create.skill_sourceOrigine della Skill. "local-package" (inclusa nel pacchetto), "installed" (già installata)
input.upload.filesElenco di file da caricare. from può essere "selected.markdown", "selected.pdf", "selected.source"
poll.interval_msIntervallo di polling (millisecondi)
poll.timeout_msTimeout totale (millisecondi)

Quando il Workflow seleziona il backend ACP, skillrunner.job.v1 si adatta automaticamente a acp.skill.run.v1, quindi i Workflow dichiarati come skillrunner.job.v1 sono compatibili anche con il backend ACP.

skillrunner.sequence.v1 — Concatenamento di Skill in più passi

Quando è necessario concatenare più Skill in sequenza (dove l'output di un passo diventa l'input del successivo), utilizzare l'esecuzione di sequenza. Gli scenari tipici includono pipeline multi-stadio (ad es., il flusso in tre passi della Sintesi dell'argomento: prepare → core enrichment → finalize), dove ogni passo è gestito da una Skill diversa, passando i risultati intermedi tramite il meccanismo di handoff.

Concatena più Skill in sequenza, dove l'output di un passo può servire come input del successivo (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"
}
]
}
}
}

Configurazione dei passi

CampoDescrizione
idIdentificatore univoco per il passo, referenziato dall'handoff
skill_idIdentificatore della Skill da eseguire
modeObbligatorio. Modalità di esecuzione: "auto" (non interattiva) o "interactive" (richiede input dell'utente)
workspacePolitica dello spazio di lavoro. "new" (crea un nuovo spazio di lavoro), "reuse-workflow" (riutilizza lo spazio di lavoro padre)
parameterParametri passati alla Skill
inputDati di input passati alla Skill
short_circuitRegole di terminazione anticipata. Vedere sotto
fetch_typeSpecifica il tipo di fetch per passo. "bundle" (scarica il bundle zip degli artifact); se non specificato, utilizza il result.fetch.type a livello di Workflow
apply_resultApplicazione del risultato a livello di passo: workflow_id specifica quale applyResult del sotto-Workflow invocare; on_failure controlla il comportamento in caso di errore ("continue" o "fail_sequence")
include_ifEsecuzione condizionale del passo. O { kind: "parameter", parameter: "...", equals: ... } per controllare un parametro del Workflow, o { kind: "runtime", condition: "..." } per condizioni di runtime

Terminazione anticipata (short_circuit)

Quando il valore di ritorno di un passo soddisfa le condizioni, salta i passi successivi e utilizza l'output del passo corrente come risultato finale.

{
"id": "prepare",
"skill_id": "create-topic-synthesis-prepare",
"workspace": "new",
"short_circuit": {
"when": {
"path": "status",
"equals": "canceled"
},
"result": "step_output"
}
}
CampoDescrizione
when.pathQuale campo nel JSON di output del passo controllare
when.equalsAttiva la terminazione quando il valore del campo è uguale a questo valore
resultRisultato dopo la terminazione: "step_output" (output completo del passo corrente)

Configurazione dell'handoff

L'handoff passa i dati da un passo ai passi successivi tramite un array bindings. Ogni binding descrive un singolo trasferimento di valore o file.

Pass-through completo (tutti i campi di output da un passo precedente):

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

Mappatura selettiva dei campi:

{
"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
}
]
}
}
Campo del bindingDescrizione
kind"value" per valori di dati, "file" per riferimenti a file
stepID del passo di origine (da quale passo leggere l'output). Se omesso, legge dal passo immediatamente precedente
sourceNome del campo nel JSON di output del passo di origine
targetPercorso JSON dove il valore deve essere scritto nell'input del passo corrente (ad es., "/input/field_name")
requiredSe true, il passo fallirà quando il valore di origine è mancante. Il valore predefinito è false
valuePer kind: "value", un valore letterale da passare (utilizzato quando step/source sono omessi)

generic-http.request.v1 — Chiamata API HTTP

Invia una singola richiesta HTTP al backend Generic HTTP.

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

Comunemente utilizzato per chiamare API REST esterne (ad es., servizio di analisi PDF MinerU).

generic-http.steps.v1 — Chiamate HTTP in più passi

Esegue più passi di richiesta HTTP in sequenza.

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

Come scegliere il Provider giusto

Il tuo Workflow deve...Scegli il providerTipo di richiesta
Eseguire operazioni puramente locali, nessuna chiamata remotapass-throughpass-through.run.v1
Inviare una singola Skill al Skill-Runnerskillrunnerskillrunner.job.v1
Concatenare più Skill in sequenzaacpskillrunner.sequence.v1
Chiamare un'API HTTPgeneric-httpgeneric-http.request.v1

Nota: provider è l'unico campo che determina con quali backend un Workflow è compatibile. request.kind viene utilizzato solo per il routing all'esecutore corretto e non partecipa all'inferenza della compatibilità del backend.

Prossimi passi