JieGou wird mit 260+ MCP-Integrationen, 9 LLM-Anbietern und einem visuellen Workflow-Builder ausgeliefert. Aber jede Organisation hat einzigartige Tools, interne APIs und Prozesse, die eine Allzweck-Plattform nicht voraussehen kann.
Heute starten wir drei Erweiterbarkeitsfunktionen, die es Ihnen ermöglichen, Ihre eigenen Fähigkeiten in JieGou einzubringen — ohne die Codebase zu forken oder darauf zu warten, dass wir eine Integration bauen.
Custom Webhook Tools
Definieren Sie ein Tool, das von einem beliebigen HTTP-Endpunkt unterstützt wird. Ihr Tool wird in Recipes, Workflows und dem konversationellen Agenten verfügbar — genau wie integrierte Tools.
Wie es funktioniert
- Tool definieren: Name, Beschreibung, JSON-Eingabeschema und Endpunkt-URL
- Anfrage konfigurieren: Methode (GET/POST), benutzerdefinierte Header (verschlüsselt), optionales Handlebars-Anfrage-Template
- Antwort zuordnen: JSONPath-Ausdruck zur Extraktion der relevanten Ausgabe
- Scope festlegen: Bestimmten Abteilungen zuweisen oder kontoweit verfügbar machen
Beispiel: Bestandsprüfungs-Tool
{
"name": "check_inventory",
"description": "Check current inventory levels for a product SKU",
"inputSchema": {
"type": "object",
"properties": {
"sku": { "type": "string", "description": "Product SKU" }
},
"required": ["sku"]
},
"endpoint": {
"url": "https://api.internal.example.com/inventory/{{sku}}",
"method": "GET",
"headers": { "Authorization": "Bearer {{env.INVENTORY_API_KEY}}" },
"timeoutMs": 10000
},
"responseMapping": "$.data.quantity"
}
Jetzt kann jedes Recipe oder jeder Workflow-Schritt check_inventory als Tool verwenden. Das LLM sieht es neben integrierten Tools und ruft es auf, wenn es relevant ist.
Sicherheit
- HTTPS erforderlich in der Produktion
- Benutzerdefinierte Header sind im Ruhezustand verschlüsselt (dasselbe AES-256-GCM wie BYOK-Schlüssel)
- Alle ausgehenden Anfragen gehen durch die Timeout-, Retry- und Rate-Limiting-Infrastruktur der Plattform
- Antwortgröße begrenzt auf 100KB
- Tool-Ausführungen zählen zu den Rate-Limits Ihres Kontos
Custom Webhook Tools sind ab Team-Tarifen verfügbar.
Custom Workflow-Schritttypen
Für Logik, die über einen Webhook-Aufruf hinausgeht, definieren Sie benutzerdefinierte Schritttypen als TypeScript-Module, die in V8-Isolaten laufen — vollständig sandboxed ohne Zugriff auf Dateisystem, Netzwerk oder Host-Prozess.
Die Sandbox
Custom-Schritte werden in isolated-vm V8-Isolaten mit strengen Einschränkungen ausgeführt:
- Speicherlimit: 128MB pro Ausführung
- CPU-Zeitlimit: Konfigurierbar pro Schritt
- Kein
require()oderimport: Abhängigkeiten werden explizit injiziert - Kein Dateisystem oder Netzwerk: Nur plattformseitig bereitgestellte APIs sind verfügbar
Injizierte APIs
Custom-Schritte können eine Teilmenge von Plattformfähigkeiten nutzen, die zum Definitionszeitpunkt deklariert werden:
| API | Was sie bereitstellt |
|---|---|
http | Proxied HTTP-Fetch (respektiert Rate-Limits) |
llm | LLM-Aufruf (nutzt die BYOK-Konfiguration des Kontos, für Abrechnung getrackt) |
firestore_read | Nur-Lese-Firestore-Zugriff (auf Konto beschränkt) |
Beispiel: Sentiment-Aggregator-Schritt
// Custom step: aggregate-sentiment
// Allowed APIs: llm
export async function execute(input: { reviews: string[] }, context: any) {
const results = await Promise.all(
input.reviews.map(review =>
context.llm.invoke(`Rate this review's sentiment from 1-5: "${review}". Reply with just the number.`, { model: 'haiku' })
)
);
const scores = results.map(r => parseInt(r.trim())).filter(n => !isNaN(n));
const average = scores.reduce((a, b) => a + b, 0) / scores.length;
return {
averageSentiment: Math.round(average * 10) / 10,
totalReviews: scores.length,
distribution: {
positive: scores.filter(s => s >= 4).length,
neutral: scores.filter(s => s === 3).length,
negative: scores.filter(s => s <= 2).length,
},
};
}
Bearbeiten Sie Code im integrierten Monaco-Editor, definieren Sie Ein-/Ausgabeschemata und testen Sie mit Beispieldaten vor der Bereitstellung.
Custom-Schritttypen sind in Enterprise-Tarifen verfügbar.
Lifecycle Hooks
Registrieren Sie Webhook-Endpunkte, die bei Workflow- und Recipe-Ausführungsereignissen auslösen. Verwenden Sie sie zur Integration mit Slack, PagerDuty, benutzerdefinierten Dashboards oder jedem HTTP-Dienst.
Unterstützte Ereignisse
| Ereignis | Wann es auslöst |
|---|---|
workflow:start | Workflow-Ausführung beginnt |
workflow:complete | Workflow endet erfolgreich |
workflow:error | Workflow schlägt fehl |
step:start | Einzelner Schritt beginnt |
step:complete | Einzelner Schritt endet |
step:error | Einzelner Schritt schlägt fehl |
recipe:start | Recipe-Ausführung beginnt |
recipe:complete | Recipe endet |
approval:requested | Genehmigungsgate ausgelöst |
approval:granted | Genehmigung erteilt |
approval:rejected | Genehmigung verweigert |
Nicht-blockierend vs. blockierend
Nicht-blockierende Hooks (Standard) sind Fire-and-Forget. Die Plattform sendet den Webhook und setzt die Ausführung fort, ohne auf eine Antwort zu warten. Verwenden Sie diese für Benachrichtigungen und Protokollierung.
Blockierende Hooks pausieren die Ausführung, bis der Webhook antwortet (10-Sekunden-Timeout). Die Antwort kann den Ausführungskontext ändern. Verwenden Sie diese für Pre-Flight-Checks oder dynamische Konfigurationsinjektion. Blockierende Hooks haben einen Circuit Breaker — wenn sie wiederholt fehlschlagen, werden sie automatisch deaktiviert.
Beispiel: Slack-Benachrichtigung bei Workflow-Abschluss
{
"name": "Slack notify on completion",
"events": ["workflow:complete", "workflow:error"],
"webhookUrl": "https://hooks.slack.com/services/T.../B.../xxx",
"blocking": false
}
Lifecycle Hooks sind ab Team-Tarifen verfügbar.
Wie sie zusammenarbeiten
Die drei Erweiterbarkeitsfunktionen lassen sich natürlich kombinieren:
- Ein Custom Tool prüft Ihre interne Bestands-API
- Ein Custom-Schritt führt spezialisierte Geschäftslogik in einer V8-Sandbox aus
- Ein Lifecycle Hook benachrichtigt Ihren Slack-Kanal, wenn der Workflow abgeschlossen ist
Alle drei respektieren das bestehende Sicherheitsmodell der Plattform — RBAC, Audit-Protokollierung, Rate-Limiting und Abteilungseingrenzung gelten einheitlich.
Erkunden Sie die Erweiterbarkeitsfunktionen in Ihren Kontoeinstellungen.