Anthropic 和 OpenAI 的 Messages API 在 system prompt 处理上有何不同?这个差异反映了什么设计哲学?
考察点:面试官判断你是否理解 API 参数不只是字段差异,而是反映了不同的 prompt 工程理念。Anthropic 把 system 作为顶层参数,OpenAI 放在 messages 数组中 role=system。
7+ 分回答骨架:Anthropic 将 system 提升为独立顶层参数,与 messages 平级,语义上区分了"行为指令"和"对话历史"。OpenAI 把 system 当作 messages 中的一条消息,system/user/assistant/tool 四种 role 在同一数组中。这影响 prompt caching 策略:Anthropic 的 system 天然是稳定前缀,更容易缓存命中;OpenAI 的 system 如果在 messages[0] 也可以缓存,但一旦 messages 数组变化(如插入新消息),前缀稳定性下降。
继续追问会衍生:衍生知识点:instruction hierarchy、prompt structure、cache boundary、multi-system prompt。
知识展开
| 概念 | 是什么 | 工程落点 | 面试表达 / 常见坑 |
|---|---|---|---|
| instruction hierarchy | 指令层级是 system > user > tool 的优先级顺序,当不同来源的指令冲突时,高优先级覆盖低优先级。 | Anthropic 通过顶层 system 参数 + messages 中的角色区分实现;OpenAI 通过 developer message 或 messages[0] role=system 实现。 | 面试中要说清"为什么系统指令不能被用户消息覆盖",这是安全设计的基础。 |
| prompt structure | prompt 结构决定 system、context、history、user input 的排列顺序,直接影响缓存命中率和 token 效率。 | 稳定内容(system prompt、用户画像)放最前作为缓存前缀;变化内容(对话历史、当前输入)放最后。 | 强回答要能解释 prompt 结构如何同时优化缓存命中和指令遵循。 |
| cache boundary | 缓存边界是 prompt 中稳定部分和变化部分的分界线,缓存只能命中到最后一个稳定的 token。 | Anthropic cache_control 标记可以显式指定缓存断点;OpenAI 自动按前缀匹配缓存。 | 常见坑是把 system prompt 和动态 context 混排,导致缓存频繁 miss。 |