印格

逻辑路由

逻辑路由 JSON 参考

控制台「逻辑 JSON」为唯一逻辑源(logic_json / RouteLogicV2)。流程图是 flowNodes 的可视化映射;每次应用或画布编辑都会经 parseRouteLogic + syncLogicFromFlowNodes 规范化,并与同一套 validateRouteLogic(含 Gateway Endpoint 上下文)检测。

顶层字段

routingMode 为 single | byInputFormat | conditional | flow;operation 固定为 generate(embed 由 flowNodes 中 kind: embed 表示)。

PathTypeDescription
versionnumber必须为 2
operationstring固定 "generate"
routingModestringsingle | byInputFormat | conditional | flow
input.promptTemplatestring提示词模板,如 {{prompt}}
defaultBranchobject默认分支:providerId、model 或 nodeKey(Endpoint)、generation
branches[]array条件分支(与 flowNodes 编译结果同步)
flowChain[]array回退链步骤(routingMode: flow)
flowNodes[]array流程图画布源数据;应用 JSON 后会 syncLogicFromFlowNodes
protocolFlowNodesobject按访问协议 id 分桶的 flowNodes(控制台「分开」视图)
embedBranchobject由 kind: embed 节点编译

分支条件 when

用于 branches[].when、deny 节点 when、嵌套 nested 分支。按顺序匹配,首个命中生效。

format

输入格式:text | chat_content | image | image_text | multimodal | file | audio | video | openapi_json | any

{ "type": "format", "format": "image_text" }

modelId

调用方请求中的上游 model(Header x-gateway-model 或 metadata.model)

{
  "when": { "type": "modelId", "op": "eq", "value": "gemini-2.5-flash" }
}

fileSize

inlineData 总体积阈值

{ "type": "fileSize", "op": "gt", "value": 1, "unit": "MB" }

metadata

Header / metadata / body 字段匹配

{ "type": "metadata", "source": "metadata", "key": "user_id", "op": "exists" }

messageType

消息角色或部分类型(text / image / audio / video / file)

{ "type": "messageType", "variant": "role", "role": "system", "scope": "any" }

messageContent

消息文本内容匹配(contents / messages 中的 text 部分)

{ "type": "messageContent", "scope": "last_user", "op": "contains", "value": "summarize" }

messageParts

多种内容类型组合:parts[] 可勾选 text/image/audio/video/file;match 支持跨消息全部包含、同条消息组合等

{ "type": "messageParts", "parts": ["text", "image"], "match": "same_message", "scope": "last_user" }

flowNodes.kind

  • single单上游 Endpoint
  • conditionalIF / ELSE 双分支
  • switch多路 CASE + DEFAULT
  • fallback顺序回退链 steps[]
  • deny命中 when 时拒绝请求
  • embed向量嵌入 embedContent

示例

单 Endpoint

{
  "version": 2,
  "operation": "generate",
  "routingMode": "single",
  "input": { "promptTemplate": "{{prompt}}" },
  "defaultBranch": {
    "providerId": "gemini",
    "model": "",
    "nodeKey": "your-endpoint-node-key",
    "generation": { "temperature": 0.7 }
  },
  "flowNodes": [
    {
      "id": "single-1",
      "kind": "single",
      "providerId": "gemini",
      "model": "",
      "nodeKey": "your-endpoint-node-key"
    }
  ]
}

条件分支(图文 / 文本)

{
  "version": 2,
  "operation": "generate",
  "routingMode": "byInputFormat",
  "input": { "promptTemplate": "{{prompt}}" },
  "defaultBranch": { "providerId": "gemini", "model": "", "nodeKey": "default-node" },
  "flowNodes": [
    {
      "id": "if-1",
      "kind": "conditional",
      "branches": [
        {
          "id": "image",
          "label": "图文",
          "when": { "type": "format", "format": "image_text" },
          "providerId": "gemini",
          "model": "",
          "nodeKey": "vision-node"
        }
      ],
      "elseBranch": {
        "providerId": "openai",
        "model": "",
        "nodeKey": "text-node"
      }
    }
  ]
}

Ctrl+Enter 应用 JSON;应用后流程图与运行时 registry 使用同一份 logic_json。

→ 控制台