omate 中文文档 下载 App

预设冲突优先级 —— 多处设置同一配置项时谁说了算

完整优先级链

同一个 scalar 配置项被多处设置时,从低到高的优先级:

代码默认值
→ 全局设置手动填写
→ 对话配置手动填写
→ 全局预设栈(自上而下)
→ 角色 / 功能预设栈(自上而下)
→ 对话预设栈(自上而下)

例子

假设对话模型被以下地方设置了:

设置层值
代码默认deepseek-chat
全局手动deepseek-chat
角色栈(预设 B)qwen-max
对话栈(预设 A)deepseek-v3

最终生效的是 deepseek-v3——对话栈的预设 A 排最右,优先级最高。

两个例外

listUnion 键(并集)

提示词分组、世界书挂载、知识书挂载——这些是并集语义,只加不减,不会互相覆盖。所有层挂的都会生效。

预设不修改原始值

预设只在发送时临时覆写,移除挂载即恢复原样。你的全局手动设置、角色设置等原始值不会被预设修改。

冲突排查

想知道某个配置项最终用了哪个值,看「上下文与思考日志」——日志里会显示预设解析后的实际生效值。

设计理念

这个优先级链的核心设计是:离当前这次请求越近的设置,优先级越高。对话栈离得最近(就是当前对话的设置),所以优先级最高。全局设置离得最远,所以作为兜底。

这样做的好处是:你可以用全局栈设好默认行为,给每个角色加专属调整,在个别对话里再灵活覆盖——三层叠加但互不打架。

下一分组:长期记忆 →