ai_call is a logic-block step with full access to entity data and workspace isolation, deliberately kept flexible rather than split into several narrower AI steps.
ai_call
A single provider call for classification, extraction, summarization, generation, scoring, decisions, or translation. You give it context fields, an intent, and an output format; you get a typed result.
{
"type": "ai_call",
"intent": "classify",
"contextFields": [{ "label": "review", "value": "{{input.reviewText}}" }],
"outputFormat": "category",
"categories": ["positive", "negative", "neutral"]
} The output shape follows outputFormat:
- text →
response(string). - json → a flat object with your declared
outputFields. - score →
score(0–100). - category →
categorymatched against yourcategories. - boolean →
decision(true/false). - list → an array of items.
- image → a generated-image URL.
- audio → a generated-audio (TTS) URL.
Comparing options doesn't need a separate step
There's no dedicated "compare" step. Feed the candidates into contextFields and use intent: "decide" or "classify" to pick between them in one call — or run ai_call once per candidate (e.g. once per provider or per option) and combine the results in a downstream condition/formula step. ai_call is deliberately the one flexible AI step rather than several narrow ones.
Every result also reports tokensUsed. For json, list the fields you want extracted:
{
"intent": "extract",
"contextFields": [{ "label": "email_body", "value": "{{input.emailText}}" }],
"outputFormat": "json",
"outputFields": [
{ "name": "sender_name", "description": "full name of the sender" },
{ "name": "requested_date", "description": "meeting date in ISO format" },
{ "name": "topic", "description": "one-line meeting topic" }
]
} RAG — grounding an ai_call in entity data
There's no separate retrieval step either — use list_entities in search mode to pull matching records, then feed them into an ai_call as context and instruct it to answer only from what was retrieved.
s1: list_entities entity=policy mode=search search={{input.question}} limit=3
s2: ai_call intent=generate
contextFields=[{ label: documents, value: {{s1.items}} },
{ label: question, value: {{input.question}} }]
instructions="Answer only using the provided documents."
outputFormat=text ai_call in depth — the 4 builder tabs
Each tab in the ai_call step editor has its own dedicated article, since there's real depth in each one: