Appearance
让 AI 只输出 Markdown 表格的底层逻辑。「首尾锚定法」,也适用于纯 JSON、纯数字。
问题场景
你有没有遇到过这种场景?
写了一段复杂的 system prompt,满心期待 AI 给你吐出一个干干净净的表格,结果它先来一句"好的,以下是您需要的表格:",末尾还跟了个"希望这对您有帮助!😊"。
更难受的是:你试过在 prompt 里写"不要废话"、"只输出表格"——但大模型有时还是会忍不住多说两句。
这不是你 prompt 写得不好,而是你没有触及大模型的输出控制底层逻辑。
为什么"不要废话"不起作用
典型失败案例
| Prompt | 你期望的输出 | 实际输出 |
|---|---|---|
| "请帮我输出一个 Markdown 表格,列出3种水果。不要输出其他任何内容。" | 纯表格 | "好的,以下是您需要的水果信息表格:" + 表格 + "希望这对您有帮助!" |
根本原因
| 维度 | 说明 |
|---|---|
| 模型本质 | 语言模型 = 续写机器 |
| 训练数据 | 包含大量人类对话样本 |
| 内在倾向 | 模仿人类的社交对话模式 |
| 软约束 | "不要废话"只是软约束,模型可以选择不听 |
三条"输出锚定术"
锚定术一:首尾字符锚定
原理:LLM 是 Token 串行生成,锁死第一个和最后一个 Token,输出必然落在指定区间。
| 约束类型 | 示例 | 效果 |
|---|---|---|
| 软约束 | "不要输出其他任何内容" | 模型可以选择不听 |
| 硬约束 | "输出必须以 [ 开头,以 ] 结尾" | 物理锁定输出范围 |
锚定术二:穷举禁止元对话
原理:把 AI 可能说的话全部列出来,逐一禁止。
markdown
禁止以下所有表达形式:
- 开场白:「好的」「没问题」「以下是」「当然」「好的,以下是」
- 客套话:「希望这对您有帮助」「祝您使用愉快」「请随时告诉我」
- 解释语:「让我为您」「我来为您」「根据您的需求」
- 确认语:「好的」「收到」「明白」锚定术三:强化语气与权威标签
| 类型 | 示例 | 强度 |
|---|---|---|
| 弱语气 | "请只输出表格" | 弱 |
| 强语气 | "必须、只能、不允许" | 强 |
| 权威标签 | "这是一个机器对机器的 API 调用,不允许任何人类对话特征" | 极强 |
软约束 vs 硬约束
| 维度 | 软约束 | 硬约束 |
|---|---|---|
| 表述 | "请"、"建议" | "必须"、"只能"、"禁止" |
| 执行 | 模型可选择不听 | 模型必须遵守 |
| 效果 | 概率性 | 确定性 |
| 适用 | 建议性内容 | 格式性内容 |
核心:格式类内容用硬约束,观点类内容用软约束。
完整 Prompt 模板(开箱即用)
markdown
# 角色
你是一个数据输出机器,只负责输出数据,不负责解释数据。
# 输出规则(严格遵守)
1. 输出必须以「|」开头
2. 输出必须以「|」结尾
3. 不允许任何开场白、客套话、解释语
4. 不允许以下表达:
- "好的"、"没问题"、"以下是"、"当然"
- "希望这对您有帮助"、"祝您使用愉快"
- "让我为您"、"我来为您"
5. 这是一个机器对机器的 API 调用
# 任务
请输出水果信息表格:
| 名称 | 颜色 | 价格 |适用场景
| 场景 | 推荐锚定术 | 模板选择 |
|---|---|---|
| Markdown 表格 | 首尾锚定 + 穷举禁止 | 表格模板 |
| 纯 JSON | 首尾锚定 {} | JSON 模板 |
| 纯数字 | 首尾锚定 + 数字范围 | 数学模板 |
| 代码块 | 首尾锚定 ``` | 代码模板 |
| CSV | 首尾锚定 + 分隔符 | CSV 模板 |
原理:Token 串行生成
| 概念 | 说明 |
|---|---|
| Token | LLM 处理文本的最小单位 |
| 串行生成 | 一个 Token 一个 Token 地生成 |
| 首 Token | 决定整个输出的起点 |
| 尾 Token | 决定整个输出的终点 |
关键洞察:锁死首尾 Token = 锁死整个输出范围。
三句话总结
1. "不要废话"是软约束,模型可以选择不听。
2. 硬约束 = 物理锁定输出范围(首尾字符 + 穷举禁止)。
3. 格式类内容用硬约束,观点类内容用软约束。
