Lewati ke konten

fast2flow

fast2flow adalah ekstensi routing berperforma tinggi yang merutekan pesan masuk ke flow yang sesuai menggunakan penilaian deterministik berbasis token (BM25) dengan fallback LLM opsional.

Konsep inti: Pengguna mengirim pesan seperti “refund please” → fast2flow memeriksa indeks khusus tenant → mengembalikan direktif routing (Dispatch, Respond, Deny, atau Continue).

Prinsip utama:

  • Deterministik lebih dulu — Penilaian BM25 berbasis token untuk routing yang dapat diprediksi dan dijelaskan
  • Fail-open — Error, timeout, atau indeks yang hilang menghasilkan direktif Continue
  • Dibatasi waktu — Penegakan hard timeout melalui time_budget_ms
  • Berbasis kebijakan — Perilaku runtime berubah tanpa perubahan kode
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)

Setiap keputusan routing menghasilkan satu dari empat direktif:

DirektifTujuanField
dispatchRute ke flow tertentutarget, confidence, reason
respondKembalikan respons langsungmessage
denyBlokir permintaanreason
continueTidak ada keputusan, biarkan pemanggil menanganinya
// 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 didistribusikan sebagai artifact .gtpack melalui GHCR:

Terminal window
# 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

Pack ini mendaftarkan hook post_ingress yang mencegat pesan sebelum mencapai flow mana pun.

fast2flow menyertakan tiga komponen WASM (menargetkan wasm32-wasip2):

KomponenTujuanOperasi
IndexerMembangun indeks TF-IDF yang dapat dicari dari metadata flowbuild, update
MatcherPencocokan intent cepat berbasis BM25 terhadap indeksmatch
RouterMengorkestrasi pipeline routing lengkaproute

Komponen ini dikoordinasikan oleh tiga flow yang didefinisikan di pack:

# 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 mengindeks flow dari file .ygtc di bundle Anda. Indexer memindai direktori bundle, mengekstrak metadata (title, description, tags), dan membangun indeks TF-IDF dengan penilaian BM25.

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

Setiap file flow menyediakan metadata yang digunakan untuk pencocokan intent:

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

Gunakan CLI untuk membangun indeks dari bundle Anda:

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

Perintah ini menghasilkan:

  • index.json — Indeks TF-IDF dengan frekuensi istilah dan frekuensi dokumen
  • intents.md — Dokumentasi intent yang mudah dibaca manusia
Terminal window
greentic-fast2flow bundle validate --bundle ./my-bundle

Kebijakan mengendalikan perilaku routing saat runtime tanpa perubahan kode. Kebijakan ini berupa file JSON yang dimuat dari /mnt/registry/fast2flow-policy.json atau path kustom.

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": []
}

Semua field aturan bersifat opsional, hanya field yang ditentukan yang akan diterapkan:

FieldJenisDeskripsi
min_confidencef32Skor BM25 minimum untuk dispatch (0.0–1.0)
llm_min_confidencef32Confidence LLM minimum untuk dispatch (0.0–1.0)
candidate_limitusizeJumlah kandidat maksimum yang dievaluasi
allow_channelsstring[]Daftar kanal yang diizinkan (null = izinkan semua)
deny_channelsstring[]Daftar kanal yang ditolak
allow_providersstring[]Daftar provider yang diizinkan (null = izinkan semua)
deny_providersstring[]Daftar provider yang ditolak
allow_scopesstring[]Daftar scope yang diizinkan (null = izinkan semua)
deny_scopesstring[]Daftar scope yang ditolak
respond_rulesobject[]Aturan respons otomatis (pencocokan keyword)

Override diterapkan sesuai urutan stage (scope → channel → provider) dengan pengurutan prioritas di dalam tiap stage.

Override scope — confidence lebih ketat untuk tenant VIP:

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

Override channel — respons otomatis di kanal email:

{
"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"
}
]
}
}

Override provider — batasi ke provider tertentu:

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

Aturan respons otomatis mencocokkan teks sebelum pipeline routing berjalan:

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

Mode yang didukung: exact, contains (default), regex.

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

Ketika strategi BM25 deterministik menghasilkan skor confidence rendah, fast2flow dapat menggunakan fallback ke LLM untuk klasifikasi.

ProviderVariabel Lingkungan
OpenAIFAST2FLOW_OPENAI_API_KEY_PATH, FAST2FLOW_OPENAI_MODEL_PATH
OllamaFAST2FLOW_OLLAMA_ENDPOINT_PATH, FAST2FLOW_OLLAMA_MODEL_PATH
DisabledFAST2FLOW_LLM_PROVIDER=disabled (default)
Terminal window
# Enable OpenAI fallback
FAST2FLOW_LLM_PROVIDER=openai \
FAST2FLOW_OPENAI_API_KEY_PATH=/run/secrets/openai-key \
greentic-fast2flow-routing-host < request.json
Terminal window
# 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 window
# 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 window
# Simulate a routing decision
greentic-fast2flow route simulate \
--scope tenant-a \
--text "I need a refund" \
--indexes-path /tmp/indexes
Terminal window
# Print default policy template
greentic-fast2flow policy print-default
# Validate policy file
greentic-fast2flow policy validate --file policy.json
VariabelDefaultDeskripsi
FAST2FLOW_LLM_PROVIDERdisabledProvider LLM: disabled, openai, ollama
FAST2FLOW_POLICY_PATH/mnt/registry/fast2flow-policy.jsonPath file kebijakan
FAST2FLOW_TRACE_POLICYSet ke 1 untuk mengeluarkan jejak kebijakan ke stderr
FAST2FLOW_MIN_CONFIDENCE0.5Ambang confidence minimum default
FAST2FLOW_LLM_MIN_CONFIDENCE0.5Confidence minimum LLM default
FAST2FLOW_CANDIDATE_LIMIT20Maksimum kandidat default

fast2flow dioptimalkan untuk routing latensi rendah:

TahapLatensi Tipikal
Hook filter (allow/deny)< 0.1ms
BM25 index lookup< 1ms
Resolusi kebijakan< 0.1ms
Fallback LLM (jika aktif)200–500ms
  1. Tulis title yang deskriptif — Kata pada title mendapat boost TF-IDF 2x untuk skor yang lebih baik
  2. Gunakan tag yang spesifik — Tag adalah sinyal utama untuk pencocokan BM25
  3. Tetapkan ambang yang tepat — Mulai dari min_confidence: 0.5 lalu sesuaikan naik
  4. Gunakan kebijakan untuk override — Ubah perilaku per scope/channel/provider tanpa redeploy
  5. Pantau tingkat Continue — Output Continue yang tinggi menunjukkan celah pada cakupan flow Anda
  6. Pertahankan LLM sebagai fallback — Routing deterministik lebih cepat dan lebih dapat diprediksi