Block-Referenz-Syntax
Wie man Daten zwischen Blöcken in YAML-Workflows referenziert
Block-Referenzen sind die Grundlage des Datenflusses in Sim-Workflows. Das VerstĂ€ndnis, wie man Ausgaben von einem Block korrekt als Eingaben fĂŒr einen anderen referenziert, ist essenziell fĂŒr den Aufbau funktionaler Workflows.
Grundlegende Referenzregeln
1. Verwende Blocknamen, nicht Block-IDs
# Block definition
email-sender:
type: agent
name: "Email Generator"
# ... configuration
# Reference the block
next-block:
inputs:
userPrompt: "Process this: <emailgenerator.content>"
# Block definition
email-sender:
type: agent
name: "Email Generator"
# ... configuration
# â Don't reference by block ID
next-block:
inputs:
userPrompt: "Process this: <email-sender.content>"
2. Namen in Referenzformat umwandeln
Um eine Block-Referenz zu erstellen:
- Nimm den Blocknamen: "Email Generator"
- Konvertiere zu Kleinbuchstaben: "email generator"
- Entferne Leerzeichen und Sonderzeichen: "emailgenerator"
- FĂŒge Eigenschaft hinzu:
<emailgenerator.content>
3. Verwende die richtigen Eigenschaften
Verschiedene Blocktypen stellen unterschiedliche Eigenschaften bereit:
- Agent-Blöcke:
.content
(die KI-Antwort) - Funktionsblöcke:
.output
(der RĂŒckgabewert) - API-Blöcke:
.output
(die Antwortdaten) - Tool-Blöcke:
.output
(das Tool-Ergebnis)
Referenzbeispiele
HĂ€ufige Block-Referenzen
# Agent block outputs
<agentname.content> # Primary AI response
<agentname.tokens> # Token usage information
<agentname.cost> # Estimated cost
<agentname.tool_calls> # Tool execution details
# Function block outputs
<functionname.output> # Function return value
<functionname.error> # Error information (if any)
# API block outputs
<apiname.output> # Response data
<apiname.status> # HTTP status code
<apiname.headers> # Response headers
# Tool block outputs
<toolname.output> # Tool execution result
Blocknamen mit mehreren Wörtern
# Block name: "Data Processor 2"
<dataprocessor2.output>
# Block name: "Email Validation Service"
<emailvalidationservice.output>
# Block name: "Customer Info Agent"
<customerinfoagent.content>
Spezielle ReferenzfÀlle
Starter-Block
Der Starter-Block wird immer als <start.input>
referenziert, unabhÀngig von seinem tatsÀchlichen Namen.
# Starter block definition
my-custom-start:
type: starter
name: "Custom Workflow Start"
# ... configuration
# Always reference as 'start'
agent-1:
inputs:
userPrompt: <start.input> # â
Correct
# userPrompt: <customworkflowstart.input> # â Wrong
Schleifenvariablen
Innerhalb von Schleifenblöcken sind spezielle Variablen verfĂŒgbar:
# Available in loop child blocks
<loop.index> # Current iteration (0-based)
<loop.currentItem> # Current item being processed (forEach loops)
<loop.items> # Full collection (forEach loops)
Parallele Variablen
Innerhalb von parallelen Blöcken sind spezielle Variablen verfĂŒgbar:
# Available in parallel child blocks
<parallel.index> # Instance number (0-based)
<parallel.currentItem> # Item for this instance
<parallel.items> # Full collection
Komplexe Referenzbeispiele
Zugriff auf verschachtelte Daten
Bei der Referenzierung komplexer Objekte wird die Punktnotation verwendet:
# If an agent returns structured data
data-analyzer:
type: agent
name: "Data Analyzer"
inputs:
responseFormat: |
{
"schema": {
"type": "object",
"properties": {
"analysis": {"type": "object"},
"summary": {"type": "string"},
"metrics": {"type": "object"}
}
}
}
# Reference nested properties
next-step:
inputs:
userPrompt: |
Summary: <dataanalyzer.analysis.summary>
Score: <dataanalyzer.metrics.score>
Full data: <dataanalyzer.content>
Mehrere Referenzen im Text
email-composer:
type: agent
inputs:
userPrompt: |
Create an email with the following information:
Customer: <customeragent.content>
Order Details: <orderprocessor.output>
Support Ticket: <ticketanalyzer.content>
Original request: <start.input>
Referenzen in Codeblöcken
Bei der Verwendung von Referenzen in Funktionsblöcken werden diese als JavaScript-Werte ersetzt:
data-processor:
type: function
inputs:
code: |
// References are replaced with actual values
const customerData = <customeragent.content>;
const orderInfo = <orderprocessor.output>;
const originalInput = <start.input>;
// Process the data
return {
customer: customerData.name,
orderId: orderInfo.id,
processed: true
};
Referenzvalidierung
Sim validiert alle Referenzen beim Importieren von YAML:
GĂŒltige Referenzen
- Block existiert im Workflow
- Eigenschaft ist fĂŒr den Blocktyp geeignet
- Keine zirkulÀren AbhÀngigkeiten
- Korrekte Syntaxformatierung
HĂ€ufige Fehler
- Block nicht gefunden: Referenzierter Block existiert nicht
- Falsche Eigenschaft: Verwendung von
.content
in einem Funktionsblock - Tippfehler: Falsch geschriebene Blocknamen oder Eigenschaften
- ZirkulÀre Referenzen: Block referenziert sich direkt oder indirekt selbst
Best Practices
- Verwende beschreibende Blocknamen: Macht Referenzen lesbarer
- Sei konsistent: Verwende die gleiche Namenskonvention durchgÀngig
- ĂberprĂŒfe Referenzen: Stelle sicher, dass alle referenzierten Blöcke existieren
- Vermeide tiefe Verschachtelungen: Halte Referenzketten ĂŒberschaubar
- Dokumentiere komplexe AblĂ€ufe: FĂŒge Kommentare hinzu, um Referenzbeziehungen zu erklĂ€ren