Agent Flow
KI-1 · Operator
Intent Router
Intent → API Operation Mapping
↓ User Intent
OpenAPI Spec
→ Operation + Schema
Aufgaben
- Parst OpenAPI-Spec beim Start (Paths, Operations, Schemas)
- Erkennt Intent aus User-Input via Tool-Use / Function Calling
- Selektiert passende Operation (POST /orders, PUT /invoices …)
- Extrahiert das erwartete Request-Body-Schema aus der Spec
- Orchestriert KI-2 & KI-3 als Sub-Agenten mit klaren Aufträgen
Output an Sub-Agenten
- an KI-2: “Extrahiere Felder X, Y, Z aus Dokument”
- an KI-3: “Fülle Schema S mit Daten D, ergänze Defaults”
- Wartet auf strukturierten JSON-Return beider Agenten
- Sendet finales HTTP-Request über generischen HTTP-Client
// Pseudo-Prompt: KI-1 Tool Definition
tools: [{
"name": "select_api_operation",
"description": "Maps user intent to OpenAPI operationId",
"input_schema": {
"operationId": string, // z.B. "createOrder"
"method": string, // POST | PUT | GET
"path": string, // /api/v1/orders
"bodySchema": object // JSON Schema aus Spec
}
}]
Schema + Extraktion-Auftrag
KI-2 · Extractor
Document Parser
PDF/Dokument → Strukturierte Rohdaten
↓ PDF / Dok
Extraktions-Auftrag
→ Raw JSON
Aufgaben
- Erhält PDF / Bild als Base64 + Liste der zu extrahierenden Felder
- Gibt strukturierte Rohdaten zurück (noch kein Schema-Mapping)
- Kennzeichnet Felder als confident / uncertain / missing
- Keine Kenntnis der API — reine Datenextraktion
Output-Format
- JSON mit extrahierten Key-Value-Paaren
- Confidence-Score pro Feld (0–1)
- Quellenreferenz (Seitenangabe, Textstelle)
// KI-2 Response
{
"extracted": {
"customer_name": { value: "Acme GmbH", confidence: 0.97
},
"invoice_date": { value: "2024-03-01", confidence: 0.91
},
"total_amount": { value: "4250.00", confidence: 0.88 },
"vat_id": { value: null, confidence: 0.0,
missing: true }
}
}
Rohdaten + Body-Schema
KI-3 · Mapper
Schema Filler
Rohdaten → Valides Request-Body-Objekt
↓ Raw JSON
JSON Schema
→ Valid Body
Aufgaben
- Mappt extrahierte Felder auf Schema-Eigenschaften (Name-Matching, Typ-Casting)
- Füllt Pflichtfelder, ergänzt Defaults aus der Spec
- Transformiert Datentypen (String → ISO-Date, String → Float)
- Generiert sinnvolle Werte für fehlende optionale Felder
- Validiert Output gegen JSON Schema vor Rückgabe
Output-Format
- Fertig befülltes, schema-konformes JSON-Body-Objekt
- Liste von Mapping-Entscheidungen (Audit Log)
- Warnung bei missing required fields
// KI-3 Response → valides Body-Objekt
{
"body": {
"customerName": "Acme GmbH", // mapped + validated
"invoiceDate": "2024-03-01", // ISO 8601 cast
"amount": 4250.00, // string → float
"currency": "EUR", // default aus Spec
"vatId": null // optional, fehlt
},
"warnings": ["vatId missing, field is optional"]
}
Valides Body-Objekt
Generic HTTP Client
API Executor
Führt den API-Call aus
↓ Method + Path + Body
→ API Response
Generisches Interface
- Nimmt method, path, headers, body entgegen — alles von KI-1 geliefert
- Kein API-spezifisches Wissen nötig
- Auth-Handling (Bearer, API-Key) via Config
- Response wird an KI-1 zurückgegeben für User-Feedback
Vorteile dieses Designs
- Austauschbar: Jede REST-API mit OpenAPI-Spec funktioniert
- KI-2 & KI-3 sind domänenunabhängig wiederverwendbar
- Klare Verantwortungstrennung per Agent
- Erweiterbar: KI-4 für Validierung / Review
// Generischer HTTP Client (TypeScript)
async function executeApiCall({
method, path, body, headers
}: ApiCallParams) {
const res = await fetch(baseUrl + path, {
method,
headers: { "Content-Type": "application/json", ...headers },
body: JSON.stringify(body)
});
return res.json();
}
Daten-Kontrakte zwischen Agenten
KI-1 → KI-2 Auftrag
documentbase64 | url
fieldsToExtractstring[]
documentType"pdf" | "image"
hintsRecord<string,string>
KI-2 → KI-3 Output
extractedExtractedField[]
confidencenumber (0–1)
missingstring[]
raw_textstring (optional)
KI-3 → HTTP Client
bodyRecord<string,unknown>
validboolean
warningsstring[]
auditLogMappingDecision[]
System-Prompt Muster (KI-1 Operator)
// Systemdynamik: KI-1 erhält die vollständige OpenAPI-Spec als Kontext
SYSTEM:
Du bist ein API-Operator. Dir liegt folgende OpenAPI-Spec vor: {spec_json}
ABLAUF:
1. Erkenne den Intent des Users und wähle die passende Operation aus der Spec
2. Rufe select_api_operation(operationId, method, path, bodySchema) auf
3. Beauftrage KI-2: “Extrahiere aus dem Dokument: {required_fields}”
4. Beauftrage KI-3: “Mappe {ki2_output} auf Schema {bodySchema}”
5. Sende den finalen Body via HTTP-Client
WICHTIG: Validiere das finale Body-Objekt gegen die Spec bevor du den Call absetzt.
Fehlende Pflichtfelder → frage den User nach, sende keinen invaliden Request.