系统提示里不说的秘密:如何让AI乖乖按你的格式输出,一次都不翻车
世界上有一种偏差叫 Completion Bias。
它藏在系统提示的角落里,像王家卫电影里那个永远不会回头的身影——
你在prompt里写了"请输出JSON",它就给你一个JSON框架等你填完;
你在开头放了一个XML标签,它就会乖乖地把整个标签闭合。
没有人告诉AI必须要这么做,但它就是这么做了。
像极了那些年里,你以为只要把开头写好,剩下的就会自然完成——
只不过在AI的世界里,这是真的。
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这种格式有天然的结构补全倾向——它是按照"补全"模式训练的。
在OpenClaw的生产环境中,Completion Bias被进一步升华:系统提示中不光有输出格式的引导,还内置了验证步骤。这就是Verification-Before-Final(先验证,后输出)机制。
流程大概是这样的:
这就像一个学生在交卷前自己先检查了一遍——而且是带着标准答案检查的。
在OpenClaw v2026.4.20发布中,Completion Bias是一个核心特性——它直接提升了智能体在生产环境中的可靠性。具体来说:
换句话说,Completion Bias就是OpenClaw智能体的"防呆设计"——AI本来就不容易"呆",现在更难"呆"了。
经典的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 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字
这里的关键是:先给出完整的结构预览,再给一个完整示例。模型在"看到完整结构 → 看到示例 → 理解要求"之后,输出稳定性会极大提升。这就像你第一次做一道菜,给了你菜谱还给你看了成品照片——再翻车的概率就低多了。
# 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的核心武器:让模型在开始输出前就已经看到了输出的终局。
<!-- 可选值:critical/warning/info -->)。"description": ""),模型会被"空白勾引"着去填。🕳️ 坑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 | 传统Prompt Engineering | Chain-of-Thought |
|---|---|---|---|
| 核心思想 | 用结构引导模型的输出路径 | 用自然语言描述需求 | 引导模型展示推理步骤 |
| 输出稳定性 | ⭐⭐⭐⭐⭐ 极高 | ⭐⭐⭐ 中等 | ⭐⭐⭐⭐ 较高 |
| 格式一致性 | ⭐⭐⭐⭐⭐ 几乎100% | ⭐⭐ 需要后处理 | ⭐⭐⭐ 取决于prompt设计 |
| 推理准确性 | ⭐⭐⭐ 中等(需搭配CoT) | ⭐⭐⭐ 中等 | ⭐⭐⭐⭐⭐ 极高 |
| 提示词长度 | 较长(需定义结构) | 短 | 中等 |
| 典型场景 | 工具调用、API输出、结构化数据提取 | 简单问答、对话 | 数学推理、逻辑问题、复杂分析 |
| 失败模式 | 结构太复杂导致模型忽视 | 格式随意、遗漏字段 | CoT步骤冗长、走歪路子 |
| 配合使用 | ✅ + CoT = 王炸组合 | ✅ 作为基底prompt | ✅ + Completion Bias = 深度推理 + 精确输出 |
总结:三者不是互斥关系,而是互补组合技。在OpenClaw的生产环境中,典型的做法是:
三管齐下,智能体的输出质量和稳定性才能真正达到生产级。这就是为什么一个被Completion Bias洗礼过的Agent,和一个只会"你是有用的助手"的Agent,差距比你和彭于晏的腹肌差距还大。
"世界上有一种技术叫 Completion Bias,
它不只是让AI输出格式正确的回答,
它是在告诉AI——
这世界有规则,有结构,有边界。
你得先尊重这些,才有资格谈创造。"
而作为人类,我们能教给AI最好的东西之一,
就是如何规规矩矩地发疯。