CCA-F 练习题库· Prompt Engineering & Structured Output
某团队目前通过在 assistant 轮次预填一个起始的 “{” 字符来强制输出 JSON。他们把集成迁移到了 Claude Opus 4.8。什么说法是正确的,以及 Anthropic 推荐改用什么?
- A在 Claude Opus 4.8 上,预填仍和以前完全一样有效;API 依旧接受末尾的那个 assistant 轮次,并从起始花括号继续往下生成文本,因此这套集成代码不需要做任何改动。
- B预填被“把 temperature 设为 0”所取代,这会让解码过程变得完全确定,仅此一项就足以保证该模型返回的每一个响应都能被解析为合法的 JSON,不再需要任何 schema 了。
- C在 Claude Opus 4.8 上,预填仍然是受支持的,但现在每一个请求都需要带上一个特殊的 beta header;只要带上了该 header,行为就与更早的那些模型完全保持一致。
- D最后一轮的 assistant 预填内容已不再受支持,会返回 400 错误;他们应改用 Structured Outputs 特性(output_config.format)把响应约束到某个 JSON schema。
- E现在只有把这段待续内容挪进 system prompt 才能用 prefill,在 system 文本最末尾放一个左花括号仍能引导模型输出 JSON,所以迁移不过是把这一个字符换个位置。
正确答案:D
解析
- D正确。在 Claude Opus 4.8(以及 4.6/4.7/4.8 系列的其余成员,再加上 Fable 5)上,在最后一轮提供部分 assistant 消息让 Claude 接着续写已不再受支持,会返回 400 错误。针对预填最常见的“强制 JSON/schema 格式”用途,Anthropic 文档给出的替代方案是 Structured Outputs 特性——带 json_schema 的 output_config.format——它会把响应约束到所提供的 schema(system prompt 指令、XML 输出标签,或配合 enum 的工具调用属于次要的替代方案)。其他选项都不对:
- A错,因为预填是被移除了,而不是保持不变;
- C错,因为没有任何 beta header 能重新启用它们;
- B错,因为 temperature/top_p/top_k 本身在 Opus 4.8 上就会被以 400 拒绝,而且 temperature=0 在任何模型上都从未保证过输出合法的 JSON;
- E错,因为根本不存在 system prompt 预填机制。
延伸阅读
本题为本站自有原创练习题,非任何官方考试内容;解析对照 Anthropic 公开文档撰写, 如与最新文档不符请以官方为准。想在限时环境下检验水平,可参加 模拟考(题目与本页题库不重叠)。