本文介绍如何在模型路由 CMR 实例中,配置参数转换文件。参数转换用于在网关入口处改写客户端请求参数,将进入标准协议链路的参数整理为统一形态,使您能够通过统一的网关调用不同协议的大模型,简化多模型接入的开发工作。
前提条件
已创建模型路由实例,详情请参见 操作指导。
已在实例中关联待调用的模型,并确认客户端使用的端点及请求中的 model 值。
配置前已了解上游模型支持的参数及类型。策略通过校验不代表上游模型一定接受改写后的参数。
配置说明
一个模型路由 CMR 实例共用一份参数转换策略文件。
参数转换策略以 JSON 格式为基础。策略文件必须是合法的 JSON 对象,不支持 JSON 注释或未登记的字段,请参见 JSON POINTER 标准协议。
参数转换支持的策略类型有:放通、丢弃、设置默认值、强制覆盖、字段改写。
产品提供内置默认放通规则。用户不能通过此配置文件编辑或删除内置规则本身,但可以通过用户规则改变字段的处理结果,例如使用 deny 丢弃一个默认放通字段,详见 全局默认放通规则列表。
策略定义
顶层结构
推荐显式填写以下四个字段:
{"version": "1.0","default_effect": "passthrough","statement": [],"enabled": true}
字段 | 类型 | 是否必填 | 定义 |
version | string | 是 | 策略 schema 版本,当前固定为 "1.0" |
default_effect | string | 否,建议显式填写 | 默认 "passthrough";可选 "passthrough"、"deny",决定请求体中未被放通规则覆盖的字段如何处理。其中: passthrough:未被放通规则覆盖的顶层字段进入 custom 旁路,随后合回请求体 deny:未被放通规则覆盖的字段不进入输出请求体;不表示拒绝整个请求 |
statement | array | 否,建议显式填写 | 策略语句数组,省略时为 [] |
enabled | boolean | 否,建议显式填写 | 提交策略时默认 true,控制文本协议转换是否启用;不等同于删除配置 |
注意:
顶层 enabled 仅作用于 chat_completions、responses、anthropic_messages 三个文本端点;不控制 embeddings、videos_* 和 rerank 的参数改写。
如需停用某条 embeddings 规则时,则设置该语句的 enabled: false 或在全量配置中移除。
不建议使用顶层 enabled: false 推断全部端点均已停止转换。
该设置是实例级的,只作用于请求体,不对请求头执行默认丢弃。它也不是“保留原始请求”的保证:显式 deny、set、rewrite 等规则仍会执行。
注意:
旁路兜底以放通规则占用的顶层字段为边界。如果仅放通 /extra/a,不能依靠 passthrough 自动保留 /extra/b。需要保留整个对象时,可放通 /extra,或为需要保留的子字段分别配置规则。
单条语句字段
字段 | 类型 | 是否 必填 | 说明 |
effect | string | 是 | 对目标字段执行的操作。取值范围:allow、deny、set_if_absent、set 和 rewrite,其中: allow:放通,将现存目标字段送入指定链路,不会自动补字段或设置默认值。 deny:丢弃,从转换结果中删除指定字段,字段不存在时不操作。 set_if_absent:设置默认值,仅目标字段不存在时写入设置的值。 set:强制覆盖,目标存在时覆盖,目标不存在时写入设置的值。 rewrite:字段改写,读取 source,命中 map 后将映射值写入 target。 说明: “不存在”不等于空值: null、false、0、空字符串、空对象、空数组都表示字段已存在,不触发 set_if_absent。嵌套对象父级缺失时可以创建对象分支,但父级类型不兼容或现有数组索引越界时不写入。 rewrite 不自动删除源字段: 成功改写时默认保留 source。若不希望源字段送往上游,可另配 deny,或通过 default_effect: "deny" 和放通清单控制输出。源不存在、类型不适合映射或没有命中 map 时,目标保持原样。 设值与放通是两个阶段: 向一个非标准字段 set 或 rewrite,并不自动为它增加放通规则。如果使用 default_effect: "deny",新写入的非标准字段也需要显式 allow 才能保留到输出。 |
action | string 或 string[] | 建议显式填写 | 端点标识符或端点列表。"*" 表示全部支持的端点。实现兼容省略该字段,含义同 "*"。当前支持的取值如下: chat_completions:表示客户的请求路径为 POST /v1/chat/completions。responses:表示客户的请求路径为 POST /v1/responses。anthropic_messages:表示客户的请求路径为 POST /v1/messages。embeddings:表示客户的请求路径为 POST /v1/embeddings。videos_create:表示客户的请求路径为 POST /v1/videos。videos_list:表示客户的请求路径为 GET /v1/videos。videos_retrieve:表示客户的请求路径为 GET /v1/videos/{video_id}。videos_delete:表示客户的请求路径为 DELETE /v1/videos/{video_id}。rerank:表示客户的请求路径为 POST /v1/rerank,也支持 /v2/rerank、/rerank。说明: 这里填写的是端点标识符,不填写路径或页面展示名。例如,应填写 chat_completions,不能填写 /v1/chat/completions、chat_completion 或 OpenAI/chat。 |
target | string 或 string[] | 是 | 操作的目标位置。body 空间使用 JSON Pointer;header 空间使用 HTTP 头名 |
resource | string 或 string[] | 否 | 客户端原始 model 名或模型名列表;省略或单独设置为 "*" 表示全部模型 说明: resource 匹配客户端实际发送的原始模型名,不是路由解析后的上游模型名。 模型名按精确值匹配,不支持 qwen* 这样的部分通配; 不校验模型是否已存在。 全部模型请直接写 "resource": "*",不要写成列表中的 "*"。 |
space | string | 否 | 默认 "body",也可设置为 "header" |
source | string | rewrite 必填 | 从原始请求体读取值的 JSON Pointer |
value | 任意 JSON 值 | 按 effect 要求 | 要写入的字面量,不作为内核表达式解析 |
value_from | object | 按 effect 要求 | 从原始请求体或请求头取值;只用于 set、set_if_absent,与 value 必须二选一 |
map | array | rewrite 必填 | 非空映射表,每项为 {"key": 标量, "value": 任意 JSON 值} |
condition | object | 否 | 单条语句的生效条件,见“条件定义” |
JSON Pointer 与值类型
写法 | 指向 |
/max_tokens | 顶层字段 max_tokens |
/chat_template_kwargs/enable_thinking | 嵌套字段 enable_thinking |
/messages/0/role | 已存在数组的第 0 个元素的 role |
说明:
JSON 字面量决定类型:2048 是数字,"2048" 是字符串,true 是布尔值,"true" 是字符串。map.key 只能是字符串、数字、布尔值或 null,按“类型 + 值”匹配;true、"true"、1 是不同的键,数值 1 与 1.0 视为同一键。
条件定义
条件读取原始请求体,不读取其他语句改写后的中间结果。
操作符 | 形态 | 含义 |
exists | {"exists": "/thinking"} | 字段存在即成立,值为 null、false 也成立 |
string_equal | {"string_equal": {"/mode": ["fast"]}} | 字符串相等 |
number_equal | {"number_equal": {"/n": [1]}} | 数字相等,不将布尔值当数字 |
bool_equal | {"bool_equal": {"/stream": [true]}} | 布尔值相等 |
null_equal | {"null_equal": {"/metadata": [null]}} | 字段存在且值为 null |
说明:
每条语句最多配置一个条件操作符;比较类只能包含一个路径和一个值。不支持 and、or、大于、小于或不存在判断。不能用 /model 作为条件路径,按模型区分请使用 resource。
策略示例
以下示例均为独立的完整策略,不是让您依次提交的增量片段。
替换示例模型名并合并到现有配置后再提交。
请求和结果仅展示参数转换阶段,省略其他参数时不表示它们可从真实模型调用中省略;
预览通过不表示上游调用验证通过。
示例 1:放通私有参数并丢弃未声明参数
仅放通 qwen3-demo 的私有参数 chat_template_kwargs,保留内置标准字段,丢弃其他未放通字段。
{"version": "1.0","enabled": true,"default_effect": "deny","statement": [{"effect": "allow","action": "chat_completions","resource": "qwen3-demo","target": "/chat_template_kwargs","destination": "custom"}]}
转换结果:
model、messages 由内置规则放通。debug_mode 不在放通范围内,因此被丢弃。
{"model": "qwen3-demo","messages": [{"role": "user", "content": "Hello"}],"chat_template_kwargs": {"enable_thinking": true}}
示例 2:丢弃不支持的字段
同时对 Chat Completions 和 Responses 丢弃两个参数,一条语句展开为 4 条规则。
{"version": "1.0","enabled": true,"default_effect": "passthrough","statement": [{"effect": "deny","action": ["chat_completions", "responses"],"target": ["/frequency_penalty", "/presence_penalty"]}]}
请求字段片段 | 结果字段片段 |
{"temperature": 0.7, "frequency_penalty": 0.5, "presence_penalty": 0.2} | {"temperature": 0.7} |
即使 frequency_penalty 位于 Chat Completions 的默认放通清单中,也会被显式 deny 删除
示例 3:为缺失参数设置默认值
{"version": "1.0","enabled": true,"default_effect": "passthrough","statement": [{"effect": "set_if_absent","action": "chat_completions","target": "/max_tokens","value": 2048}]}
请求字段片段 | 结果字段片段 | 原因 |
{} | {"max_tokens": 2048} | 字段缺失,补默认值 |
{"max_tokens": 512} | {"max_tokens": 512} | 已存在,保持原值 |
{"max_tokens": null} | {"max_tokens": null} | null 仍表示字段存在;上游是否接受需另行验证 |
示例 4:Header 改写,将会话标识归一到请求头
目标头不存在时,优先读取请求体的 /session_id,否则读取 x-conversation-id。
{"version": "1.0","enabled": true,"default_effect": "passthrough","statement": [{"effect": "set_if_absent","action": "chat_completions","space": "header","target": "X-CMR-Session-Id","value_from": {"first_available": [{"from": "body", "path": "/session_id"},{"from": "header", "name": "x-conversation-id"}]}}]}
原始请求 | 网关内部可见的会话头 |
body 含 "session_id": "session-001",无目标头 | X-CMR-Session-Id: session-001 |
body 无 session_id,含 x-conversation-id: session-002 | X-CMR-Session-Id: session-002 |
已有 x-cmr-session-id: session-original | 保留原目标头,大小写不影响“已存在”判断 |
两个来源均不存在,且无目标头 | 不写入目标头 |
注意:
改写的会话头用于网关内部会话处理。
first_available 选择第一个读取成功的来源,不是“第一个通过会话 ID 校验的来源”。body 中存在 session_id: null 或空字符串时,不会继续尝试备用头,而会在会话值校验时导致请求失败。
会话 ID 必须是 1~128 个可见 ASCII 字符,不含空格或中文。使用真实业务 ID 预览验证。
本例不会删除 body 中的 session_id;需要删除时可另配 body 空间的 deny。
操作步骤
1. 登录 模型路由控制台。
2. 在左侧导航栏选择实例管理,单击目标实例 ID 进入实例详情页。
3. 切换至模型调度管理页签。
4. 单击页面顶部参数转换提示横幅中的去配置,打开参数转换配置面板。

5. 在 JSON 编辑框输入参数。
6. 选择协议,并单击预览,查看预览效果。
7. 确认无误后,单击提交配置,完成参数转换策略文件的配置。
说明:
初次配置可使用“顶层结构”中的骨架,将所需规则加入 statement。
编辑时,不要直接用单个示例覆盖全部内容,以免删除原有规则。建议先复制当前配置,再确认修改。
全局默认放通规则列表
以下列表与网关默认规则文件一致,所有字段的默认配置均为 primary。列表中的名称是顶层 JSON 字段,对应 target 为 /<字段名>。这些是系统内置规则,无需复制进 statement。
Chat Completions:chat_completions
共 37 个字段:
messages, model, audio, frequency_penalty, function_call, functions,logit_bias, logprobs, max_completion_tokens, max_tokens, metadata,modalities, moderation, n, parallel_tool_calls, prediction,presence_penalty, prompt_cache_key, prompt_cache_options,prompt_cache_retention, reasoning_effort, response_format,safety_identifier, seed, service_tier, stop, store, stream,stream_options, temperature, tool_choice, tools, top_logprobs,top_p, user, verbosity, web_search_options
Anthropic Messages:anthropic_messages
共 18 个字段:
max_tokens, messages, model, cache_control, container, inference_geo,metadata, output_config, service_tier, stop_sequences, stream, system,temperature, thinking, tool_choice, tools, top_k, top_p
Responses:responses
共 31 个字段:
background, context_management, conversation, include, input,instructions, max_output_tokens, max_tool_calls, metadata, model,moderation, parallel_tool_calls, previous_response_id, prompt,prompt_cache_key, prompt_cache_options, prompt_cache_retention,reasoning, safety_identifier, service_tier, store, stream,stream_options, temperature, text, tool_choice, tools, top_logprobs,top_p, truncation, user
Embeddings:embeddings
共 5 个字段:
model, input, dimensions, encoding_format, user
创建视频:videos_create
共 10 个字段:
model, contents, task_type, duration, resolution, aspect_ratio,audio, seed, watermark, negative_prompt
查询视频列表:videos_list
共 4 个字段:
status, model, offset, limit
查询视频任务:videos_retrieve
共 1 个字段:
video_id
删除视频任务:videos_delete
共 1 个字段:
video_id
重排序:rerank
共 6 个字段:
model, query, documents, top_n, return_documents, instruct