Zum Inhalt springen

fast2flow

fast2flow ist eine hochperformante Routing-Erweiterung, die eingehende Nachrichten mit deterministischem tokenbasiertem Scoring (BM25) und optionalem LLM-Fallback an den passenden Flow weiterleitet.

Kernkonzept: Eine Benutzerin oder ein Benutzer sendet eine Nachricht wie “refund please” → fast2flow prüft tenant-spezifische Indizes → gibt eine Routing-Direktive zurück (Dispatch, Respond, Deny oder Continue).

Wichtige Prinzipien:

  • Deterministisch zuerst - Tokenbasiertes BM25-Scoring für vorhersehbares, erklärbares Routing
  • Fail-open - Fehler, Timeouts oder fehlende Indizes erzeugen eine Continue-Direktive
  • Zeitlich begrenzt - Erzwingung harter Timeouts über time_budget_ms
  • Richtliniengesteuert - Laufzeitverhalten ändert sich ohne Codeänderungen
Incoming Message
┌──────────────────────────────────────────────────┐
│ fast2flow Pipeline │
│ │
│ ┌────────────────────────────────────────────┐ │
│ │ 1. Hook Filter │ │
│ │ Allow/deny lists, respond rules, policy │ │
│ └────────────────────────────────────────────┘ │
│ │ │
│ ┌────────────────────────────────────────────┐ │
│ │ 2. Index Lookup │ │
│ │ Load TF-IDF index for tenant scope │ │
│ └────────────────────────────────────────────┘ │
│ │ │
│ ┌────────────────────────────────────────────┐ │
│ │ 3. Deterministic Strategy (BM25) │ │
│ │ Token scoring with title boosting (2x) │ │
│ └────────────────────────────────────────────┘ │
│ │ │
│ ┌────────────────────────────────────────────┐ │
│ │ 4. Confidence Gate │ │
│ │ min_confidence threshold check │ │
│ └────────────────────────────────────────────┘ │
│ │ │
│ ┌────────────────────────────────────────────┐ │
│ │ 5. LLM Fallback (optional) │ │
│ │ OpenAI or Ollama for ambiguous cases │ │
│ └────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
Routing Directive (Dispatch / Respond / Deny / Continue)

Jede Routing-Entscheidung erzeugt eine von vier Direktiven:

DirektiveZweckFelder
dispatchAn einen bestimmten Flow weiterleitentarget, confidence, reason
respondSofortige Antwort zurückgebenmessage
denyDie Anfrage blockierenreason
continueKeine Entscheidung, Verarbeitung durch den Aufrufer
// Dispatch to a flow
{"type": "dispatch", "target": "support-pack:refund_request", "confidence": 0.92, "reason": "BM25 match"}
// Auto-respond without routing
{"type": "respond", "message": "Use the self-service refund form at /refund."}
// Block the request
{"type": "deny", "reason": "Denied by scope policy"}
// Pass through (fail-open default)
{"type": "continue"}

fast2flow wird als .gtpack-Artefakt über GHCR verteilt:

Terminal-Fenster
# Pull from GHCR
oras pull ghcr.io/greentic-biz/providers/routing-hook/fast2flow.gtpack:latest
# Or reference a specific version
oras pull ghcr.io/greentic-biz/providers/routing-hook/fast2flow.gtpack:v0.4.6

Das Pack registriert einen post_ingress-Hook, der Nachrichten abfängt, bevor sie irgendeinen Flow erreichen.

fast2flow enthält drei WASM-Komponenten (für wasm32-wasip2):

KomponenteZweckOperation
IndexerBaut einen durchsuchbaren TF-IDF-Index aus Flow-Metadatenbuild, update
MatcherSchnelles intentbasiertes Matching gegen den Index auf Basis von BM25match
RouterOrchestriert die komplette Routing-Pipelineroute

Diese Komponenten werden von drei im Pack definierten Flows koordiniert:

# flows/index.ygtc — Runs at deploy time to build indexes
# flows/match.ygtc — Runtime BM25 intent matching
# flows/route.ygtc — Full routing pipeline with LLM fallback

fast2flow indexiert Flows aus den .ygtc-Dateien deines Bundles. Der Indexer scannt dein Bundle-Verzeichnis, extrahiert Metadaten (title, description, tags) und baut einen TF-IDF-Index mit BM25-Scoring.

my-bundle/
├── packs/
│ ├── support-pack/
│ │ └── flows/
│ │ ├── refund.ygtc
│ │ ├── shipping.ygtc
│ │ └── faq.ygtc
│ └── hr-pack/
│ └── flows/
│ ├── leave.ygtc
│ └── booking.ygtc

Jede Flow-Datei liefert die Metadaten, die für das Intent-Matching verwendet werden:

refund.ygtc
id: refund_request
title: Process Refund Request
description: Handle customer refund requests for orders and payments
type: messaging
tags:
- refund
- payment
- billing
- return
start: collect_info
nodes:
collect_info:
templating.handlebars:
text: "Please provide your order number for the refund."
routing:
- out: true

Verwende die CLI, um einen Index aus deinem Bundle zu bauen:

Terminal-Fenster
greentic-fast2flow bundle index \
--bundle ./my-bundle \
--output ./state/indexes \
--tenant demo \
--team default \
--verbose

Dies erzeugt:

  • index.json - TF-IDF-Index mit Termfrequenzen und Dokumentfrequenzen
  • intents.md - Menschenlesbare Intent-Dokumentation
Terminal-Fenster
greentic-fast2flow bundle validate --bundle ./my-bundle

Richtlinien steuern das Routing-Verhalten zur Laufzeit ohne Codeänderungen. Es sind JSON-Dateien, die aus /mnt/registry/fast2flow-policy.json oder einem benutzerdefinierten Pfad geladen werden.

fast2flow-policy.json
{
"stage_order": ["scope", "channel", "provider"],
"default": {
"min_confidence": 0.5,
"llm_min_confidence": 0.5,
"candidate_limit": 20
},
"scope_overrides": [],
"channel_overrides": [],
"provider_overrides": []
}

Alle Regelfelder sind optional. Es werden nur explizit angegebene Felder angewendet:

FeldTypBeschreibung
min_confidencef32Mindest-BM25-Score für Dispatch (0.0-1.0)
llm_min_confidencef32Mindest-LLM-Confidence für Dispatch (0.0-1.0)
candidate_limitusizeMaximale Anzahl auszuwertender Kandidaten
allow_channelsstring[]Whitelist-Kanäle (null = alle erlauben)
deny_channelsstring[]Blacklist-Kanäle
allow_providersstring[]Whitelist-Provider (null = alle erlauben)
deny_providersstring[]Blacklist-Provider
allow_scopesstring[]Whitelist-Scopes (null = alle erlauben)
deny_scopesstring[]Blacklist-Scopes
respond_rulesobject[]Regeln für automatische Antworten (Keyword-Matching)

Overrides werden in der Reihenfolge der Stufen angewendet (scope → channel → provider), mit Prioritätssortierung innerhalb jeder Stufe.

Scope override - strengere Confidence für einen VIP-Tenant:

{
"id": "vip-tenant",
"priority": 10,
"scope": "tenant-vip",
"rules": {
"min_confidence": 0.8,
"candidate_limit": 10
}
}

Channel override - automatische Antwort im E-Mail-Kanal:

{
"id": "email-autorespond",
"priority": 20,
"channel": "email",
"rules": {
"respond_rules": [
{
"needle": "refund",
"message": "Refund requests via email take 3–5 business days. Use chat for instant support.",
"mode": "contains"
}
]
}
}

Provider override - auf einen bestimmten Provider beschränken:

{
"id": "slack-only",
"priority": 30,
"provider": "slack",
"rules": {
"deny_providers": ["telegram"]
}
}

Regeln für automatische Antworten gleichen Text ab, bevor die Routing-Pipeline ausgeführt wird:

{
"needle": "business hours",
"message": "Our business hours are Mon–Fri 9AM–5PM UTC.",
"mode": "contains"
}

Unterstützte Modi: exact, contains (Standard), regex.

Terminal-Fenster
# Print default policy
greentic-fast2flow policy print-default
# Validate a policy file
greentic-fast2flow policy validate --file ./my-policy.json

Wenn die deterministische BM25-Strategie niedrige Confidence-Werte erzeugt, kann fast2flow für die Klassifizierung auf ein LLM zurückfallen.

ProviderUmgebungsvariablen
OpenAIFAST2FLOW_OPENAI_API_KEY_PATH, FAST2FLOW_OPENAI_MODEL_PATH
OllamaFAST2FLOW_OLLAMA_ENDPOINT_PATH, FAST2FLOW_OLLAMA_MODEL_PATH
DeaktiviertFAST2FLOW_LLM_PROVIDER=disabled (Standard)
Terminal-Fenster
# Enable OpenAI fallback
FAST2FLOW_LLM_PROVIDER=openai \
FAST2FLOW_OPENAI_API_KEY_PATH=/run/secrets/openai-key \
greentic-fast2flow-routing-host < request.json
Terminal-Fenster
# Build TF-IDF index from bundle
greentic-fast2flow bundle index \
--bundle ./my-bundle \
--output ./indexes \
--tenant demo \
--team default \
--generate-docs \
--verbose
# Validate bundle has indexable flows
greentic-fast2flow bundle validate --bundle ./my-bundle
Terminal-Fenster
# Build index from flow definitions JSON
greentic-fast2flow index build \
--scope tenant-a \
--flows flows.json \
--output /tmp/indexes
# Inspect a built index
greentic-fast2flow index inspect \
--scope tenant-a \
--input /tmp/indexes
Terminal-Fenster
# Simulate a routing decision
greentic-fast2flow route simulate \
--scope tenant-a \
--text "I need a refund" \
--indexes-path /tmp/indexes
Terminal-Fenster
# Print default policy template
greentic-fast2flow policy print-default
# Validate policy file
greentic-fast2flow policy validate --file policy.json
VariableStandardBeschreibung
FAST2FLOW_LLM_PROVIDERdisabledLLM-Provider: disabled, openai, ollama
FAST2FLOW_POLICY_PATH/mnt/registry/fast2flow-policy.jsonPfad zur Richtliniendatei
FAST2FLOW_TRACE_POLICYAuf 1 setzen, um den Richtlinien-Trace nach stderr auszugeben
FAST2FLOW_MIN_CONFIDENCE0.5Standardwert für die minimale Confidence-Schwelle
FAST2FLOW_LLM_MIN_CONFIDENCE0.5Standardwert für die minimale LLM-Confidence
FAST2FLOW_CANDIDATE_LIMIT20Standardwert für die maximale Kandidatenzahl

fast2flow ist für Routing mit niedriger Latenz optimiert:

StageTypische Latenz
Hook-Filter (allow/deny)< 0.1ms
BM25-Index-Lookup< 1ms
Richtlinienauflösung< 0.1ms
LLM-Fallback (falls aktiviert)200–500ms
  1. Aussagekräftige Titel schreiben - Wörter im Titel erhalten einen 2x-TF-IDF-Boost für besseres Scoring
  2. Spezifische Tags verwenden - Tags sind das primäre Signal für BM25-Matching
  3. Passende Schwellenwerte setzen - Mit min_confidence: 0.5 beginnen und nach oben anpassen
  4. Richtlinien für Overrides nutzen - Verhalten pro Scope/Kanal/Provider ohne Redeploy ändern
  5. Continue-Rate überwachen - Hohe Continue-Ausgabe weist auf Lücken in der Flow-Abdeckung hin
  6. LLM als Fallback behalten - Deterministisches Routing ist schneller und vorhersehbarer