ダッシュボードのエディター UI ではなく、REST API でルートグラフを定義できます。ルートは内部的に、次のようなシンプルな JSON 構造で表されます。
{
"id": "<route id>",
"name": "<route name>",
"elements": [<array of elements>]
}ダイナミックルーティングでは、複数の要素タイプを組み合わせて高度なルーティングフローを作れます。各要素には、入力、出力、設定項目があります。
ルートの開始を示します。すべてのルートは Start 要素から始める必要があります。
- 入力: なし
- 出力:
next: 変更していないリクエストを次の要素へ転送します
{
"id": "<id>",
"type": "start",
"outputs": {
"next": { "elementId": "<id>" }
}
}リクエストパラメーターに基づく条件を評価し、結果に応じてリクエストを振り分けます。
- 入力: リクエスト
- 出力:
true: 条件が true のとき、指定した要素へリクエストを転送しますfalse: 条件が false のとき、指定した要素へリクエストを転送します
conditions は $eq、$ne、$in、$and、$or など、MongoDB 風の演算子に対応しています。
{
"id": "<id>",
"type": "conditional",
"properties": {
"conditions": {
"metadata.plan": { "$eq": "free" }
}
},
"outputs": {
"true": { "elementId": "<id>" },
"false": { "elementId": "<id>" }
}
}複数の出力へ確率的にリクエストを振り分けます。A/B テストや段階的ロールアウトに使えます。
- 入力: リクエスト
- 出力: 名前付きのパーセンテージ出力を最大 5 つ
- 各出力キー(例:
"10%")がその分岐の確率です。キーの合計は 100% である必要があります
- 各出力キー(例:
{
"id": "<id>",
"type": "percentage",
"outputs": {
"10%": { "elementId": "<id>" },
"40%": { "elementId": "<id>" },
"50%": { "elementId": "<id>" }
}
}リクエストメタデータに基づく制限を適用します。回数ベースとコストベースの両方に対応しています。
- 入力: リクエスト
- 出力:
success: レート制限に達していないとき、指定した要素へリクエストを転送しますfallback: レート制限されたリクエスト向けの任意の出力です(指定しない場合、ルートは終了します)
プロパティ:
limitType:"count"または"cost"key: レート制限に使うリクエストフィールド(例:"metadata.user_id")limit: 許可するリクエスト数またはコストの上限window: 時間ウィンドウ(秒)
{
"id": "<id>",
"type": "rate",
"properties": {
"limitType": "count",
"key": "metadata.user_id",
"limit": 100,
"window": 3600
},
"outputs": {
"success": { "elementId": "node_model_workers_ai" },
"fallback": { "elementId": "node_model_openai_mini" }
}
}指定したモデルとプロバイダーで推論を実行します。タイムアウトとリトライを設定できます。
- 入力: リクエスト
- 出力:
success: モデルが応答のストリーミングを開始できたとき、指定した要素へリクエストを転送しますfallback: すべてのリトライ後にモデルが失敗した、またはタイムアウトしたときの任意の出力です
プロパティ:
provider: AI プロバイダー(例:"openai"、"anthropic")model: 使うモデル名timeout: リクエストのタイムアウト(ミリ秒)retries: リトライ回数
{
"id": "<id>",
"type": "model",
"properties": {
"provider": "openai",
"model": "gpt-4o-mini",
"timeout": 60000,
"retries": 4
},
"outputs": {
"success": { "elementId": "<id>" },
"fallback": { "elementId": "<id>" }
}
}ルートの終了を示します。最後に成功したモデル応答を返します。モデル応答がなければエラーを返します。
- 入力: リクエスト
- 出力: なし(空の
outputsオブジェクトを指定します)
{
"id": "<id>",
"type": "end",
"outputs": {}
}