Completion Bias 补全偏差 / 输出引导

系统提示里不说的秘密:如何让AI乖乖按你的格式输出,一次都不翻车

📅 2026-05-25 📖 预计阅读:8分钟 🏷️ Prompt Engineering · System Prompt · OpenClaw

世界上有一种偏差叫 Completion Bias。

它藏在系统提示的角落里,像王家卫电影里那个永远不会回头的身影——
你在prompt里写了"请输出JSON",它就给你一个JSON框架等你填完;
你在开头放了一个XML标签,它就会乖乖地把整个标签闭合。

没有人告诉AI必须要这么做,但它就是这么做了。
像极了那些年里,你以为只要把开头写好,剩下的就会自然完成——
只不过在AI的世界里,这是真的。

什么是 Completion Bias?

Completion Bias(补全偏差),也叫输出引导,是Prompt Engineering中的一个进阶技巧。简单来说,它利用了语言模型的天生癖好——补全模式:当你在系统提示中埋下一个"未完待续"的结构,AI就会本能地按照你铺设的轨道,把剩下的部分"填完"。

比如,你在系统提示里放一个JSON框架,模型就会老老实实地把JSON填完给你。你在开头写一个XML标签,模型就会乖乖地闭合标签。这就像你给AI画了一条看不见的赛道,它默认就会沿着赛道跑,而不是自己开辟一条新路。

但等等——这不就是Few-shot学习吗?不完全一样。Few-shot是给了几个例子让模型照猫画虎;而Completion Bias更像是在模型的输出流里偷偷埋下一个"锚点",它还没开始输出,就已经被结构化的DNA给"传染"了。

🤣 周星驰式脑洞时间:

想象一下你妈催你收拾房间。传统Prompt就像她说:"你要把房间收拾干净。"——然后你开始刷手机。

而Completion Bias版本是:你妈走进来说:"我已经把扫地机器人的地图画好了、垃圾袋套上了、收纳盒放在床脚了,你只需要——"——然后她就走了。你的手不由自主就拿起了扫把。

是的,你被Completion Bias了。

原理:从"你是一个有用的助手"到生产级系统提示

早期大模型的系统提示长什么样?

# 原始版本:
你是一个有用的助手。

这就像你跟一个实习生说"好好干"——他努力了,但你没法指望他每次都给你想要的格式。

后来我们进化了:

# 进阶版本:
你是一个有用的助手。请用JSON格式回答,包含字段:
- name(字符串)
- description(字符串)
- category(字符串,可选值:tool | news | guide)
- tags(字符串数组)
请确保JSON格式化正确。

效果好了一些,但模型偶尔还是会在JSON外面加一段Markdown说明,或者忘记闭合花括号。这就像你告诉实习生"请写报告"——他写了,但格式总有点不对味。

Completion Bias的境界是这样的:

# Completion Bias 生产级版本:
你是一个AI工具分类助手。输出格式如下:

{
  "name": "",
  "description": "",
  "category": "",
  "tags": []
}

请严格按照上述JSON结构输出。

注意到区别了吗?模型在输出时看到"{",它会先完成JSON的结构,再填充内容。因为语言模型对JSON这种格式有天然的结构补全倾向——它是按照"补全"模式训练的。

Verification-Before-Final 机制

OpenClaw的生产环境中,Completion Bias被进一步升华:系统提示中不光有输出格式的引导,还内置了验证步骤。这就是Verification-Before-Final(先验证,后输出)机制。

流程大概是这样的:

  1. 结构引导:系统提示用XML/JSON定义了输出的脚手架
  2. 内部推理:模型在脚手架中填充内容,但还没提交
  3. 自我验证:模型根据提示中的验证规则,检查自己的输出
  4. 最终输出:验证通过,输出最终结果

这就像一个学生在交卷前自己先检查了一遍——而且是带着标准答案检查的。

OpenClaw 实战应用:让智能体更靠谱

OpenClaw v2026.4.20发布中,Completion Bias是一个核心特性——它直接提升了智能体在生产环境中的可靠性。具体来说:

换句话说,Completion Bias就是OpenClaw智能体的"防呆设计"——AI本来就不容易"呆",现在更难"呆"了。

代码示例:三种 Completion Bias 实战姿势

姿势一:XML标签标记

经典的Completion Bias技法。你在系统提示里画好XML的骨架:

<!-- 系统提示:XML标签引导 -->
你是一个代码审查助手。分析代码后,请按以下结构输出:

<code-review>
  <summary><!-- 简短总结一眼能看懂的 — 把这行删掉 --></summary>
  <issues>
    <issue severity="critical"><!-- 这个bug不修会炸 --></issue>
    <issue severity="warning"><!-- 这个写法不太妙 --></issue>
  </issues>
  <score>0</score>
</code-review>

/* 提示:severity 可选值:critical / warning / info / style */
/* score 范围 0-100 */

模型看到XML骨架后,会自动补全<summary>里的内容,正确使用severity属性,并在<score>里填入一个合理的分数。因为——XML的结构让它产生了"我必须把这些占位符填上"的冲动。这就是Completion Bias在起作用。

姿势二:Few-shot + 结构预览

# 系统提示:Few-shot Completion Bias

## 角色
你是一个AI工具分类专家。

## 输出格式
每次输出必须是一段JSON,包含以下字段:

{
  "tool_name": "",
  "category": "",
  "use_case": "",
  "pros": [],
  "cons": [],
  "verdict": ""
}

## 示例
用户输入:介绍一下ChatGPT
你的输出:
{
  "tool_name": "ChatGPT",
  "category": "对话式AI",
  "use_case": "日常对话、代码生成、内容创作",
  "pros": ["多模态能力强", "生态丰富", "免费版可用"],
  "cons": ["需要科学上网", "高峰期限流", "中文能力不稳定"],
  "verdict": "目前最成熟的通用AI助手,适合绝大多数场景"
}

## 重要
- 每次只输出JSON,不要额外的Markdown或说明
- pro 和 cons 至少各1个,最多5个
- verdict 不超过200字

这里的关键是:先给出完整的结构预览,再给一个完整示例。模型在"看到完整结构 → 看到示例 → 理解要求"之后,输出稳定性会极大提升。这就像你第一次做一道菜,给了你菜谱还给你看了成品照片——再翻车的概率就低多了。

姿势三:系统提示模板(YAML格式 - OpenClaw风格)

# OpenClaw 系统提示模板 - YAML风格 Completion Bias
# 用于子Agent任务分配

agent_role: "代码审查助手"
task_description: "审查用户的Pull Request,输出结构化的审查报告"

output_structure:
  format: "yaml"
  fields:
    - name: "summary"
      type: "string"
      description: "一行总结PR的核心变更"
      max_length: 200
    - name: "files_changed"
      type: "array"
      item_type: "object"
      items:
        - name: "path"
          type: "string"
        - name: "change_type"
          type: "enum"
          values: ["added", "modified", "deleted", "renamed"]
        - name: "risk_level"
          type: "enum"
          values: ["low", "medium", "high"]
        - name: "comments"
          type: "string"
          optional: true
    - name: "recommendation"
      type: "enum"
      values: ["approve", "request_changes", "block"]

validation_rules:
  - "所有字段必须按上述结构输出"
  - "如果发现安全漏洞,recommendation 必须为 'block'"
  - "files_changed 至少包含一个条目"

  # 模型输出时会"看到"这个结构
  # 然后自动按照YAML格式填充内容
  # 这就是Completion Bias的力量
  expected_output_example:
    summary: "添加了用户登录功能"
    files_changed:
      - path: "src/auth/login.ts"
        change_type: "added"
        risk_level: "medium"
        comments: "建议添加速率限制"
    recommendation: "request_changes"

这个YAML模板的例子展示了OpenClaw实际使用的系统提示风格。注意expected_output_example的存在——这个"预览输出"就是Completion Bias的核心武器:让模型在开始输出前就已经看到了输出的终局

最佳实践与踩坑提醒

✅ 最佳实践

  1. 先给结构,再给规则:让模型看到输出的骨架,再告诉它每个骨架节点有什么约束。
  2. 嵌入式示例:直接在结构里放一个"填充好的示例",模型会秒懂你想要的输出风格。
  3. 注释即验证:在XML/JSON的结构里加注释说明每个字段的要求(如 <!-- 可选值:critical/warning/info -->)。
  4. 层次化输出:嵌套的结构(比如JSON里有对象、对象里又有数组)比扁平的结构Completion Bias效果更好。
  5. 给占位符:在结构里留空白值(如 "description": ""),模型会被"空白勾引"着去填。
  6. 与Chain-of-Thought结合:先让模型Chain-of-Thought推理一遍内部的思考过程,再用Completion Bias输出最终的结构化结果。

❌ 踩坑实录

🕳️ 坑1:结构太长,模型忽略了

如果你的系统提示里有3页纸的结构定义,模型会直接摆烂。Completion Bias是有"注意力窗口"的——结构要简洁,关键元素放在提示的前半部分。

🕳️ 坑2:示例与结构矛盾

你给了JSON结构要求每个字段都填,但示例里却留了一个空字段。模型会懵圈——到底哪个是对的?一致性比什么都重要。

🕳️ 坑3:过度依赖Completion Bias

Completion Bias不是银弹。如果模型的底层能力不行(比如要它做复杂数学计算),再怎么用结构引导也救不了。它只是格式控制器,不是能力增强器

🕳️ 坑4:忘了加验证

Completion Bias让模型大概率输出正确格式,但不是100%。后端一定要加Schema验证和重试机制。在OpenClaw中,工具调用有自动重试——如果输出格式不对,会告诉模型"你的输出不符合Schema,请修正"然后让它再试一次。

🕳️ 坑5:嵌套太深,模型晕了

JSON嵌套4层以上,模型开始犯晕。XML嵌套3层以上,tag可能会串。保持结构扁平——能两层解决的事情别搞三层。

工具对比:Completion Bias vs 传统Prompt vs Chain-of-Thought

维度 Completion Bias 传统Prompt Engineering Chain-of-Thought
核心思想 用结构引导模型的输出路径 用自然语言描述需求 引导模型展示推理步骤
输出稳定性 ⭐⭐⭐⭐⭐ 极高 ⭐⭐⭐ 中等 ⭐⭐⭐⭐ 较高
格式一致性 ⭐⭐⭐⭐⭐ 几乎100% ⭐⭐ 需要后处理 ⭐⭐⭐ 取决于prompt设计
推理准确性 ⭐⭐⭐ 中等(需搭配CoT) ⭐⭐⭐ 中等 ⭐⭐⭐⭐⭐ 极高
提示词长度 较长(需定义结构) 中等
典型场景 工具调用、API输出、结构化数据提取 简单问答、对话 数学推理、逻辑问题、复杂分析
失败模式 结构太复杂导致模型忽视 格式随意、遗漏字段 CoT步骤冗长、走歪路子
配合使用 ✅ + CoT = 王炸组合 ✅ 作为基底prompt ✅ + Completion Bias = 深度推理 + 精确输出

总结:三者不是互斥关系,而是互补组合技。在OpenClaw的生产环境中,典型的做法是:

  1. 传统Prompt定义角色和任务
  2. Completion Bias定义输出结构
  3. Chain-of-Thought定义推理方式

三管齐下,智能体的输出质量和稳定性才能真正达到生产级。这就是为什么一个被Completion Bias洗礼过的Agent,和一个只会"你是有用的助手"的Agent,差距比你和彭于晏的腹肌差距还大。

结语:Completion Bias 的哲学

"世界上有一种技术叫 Completion Bias,
它不只是让AI输出格式正确的回答,
它是在告诉AI——
这世界有规则,有结构,有边界。
你得先尊重这些,才有资格谈创造。"

而作为人类,我们能教给AI最好的东西之一,
就是如何规规矩矩地发疯