# 8 类 Prompt 缺陷 · 原版 vs 新版对比
每个新版包含: **输出格式约束 + 容错说明 + 2 个 few-shot 示例**
---
## D1 · 缺少输出格式约束 (影响 6 条: R03/R08/R09/R11/R18/R20)
**原版**:
```
帮我把用户信息提取出来: {input}
```
**新版**:
```
从 中提取用户信息,严格输出 JSON,禁止任何 markdown 代码块包裹、禁止前后加解释文字。
输出 schema (字段名必须小写下划线):
{
"user_name": string,
"age": integer, // 缺失填 null
"signup_date": string, // ISO-8601: YYYY-MM-DD, 缺失填 null
"score": number // 0-10 一位小数, 缺失填 null
}
【容错】如果 缺失字段, 填 null 而非省略字段。如果 为空, 输出 {"error": "empty_input"}。
【示例1】
input: 张三 28 岁 2025年3月1日注册 评分 8.5
output: {"user_name":"张三","age":28,"signup_date":"2025-03-01","score":8.5}
【示例2】
input: 李四 注册了
output: {"user_name":"李四","age":null,"signup_date":null,"score":null}
: {input}
```
---
## D2 · 未指定输出长度上下限 (影响 4 条: R05/R07/R25/R30)
**原版**:
```
总结这篇文章
```
**新版**:
```
用 80-120 个汉字总结 , 硬性上限 120 字, 超过截断。
【格式】纯文本一段, 不分段, 不加标题, 不加"总结:"前缀。
【容错】文章过短(<50字)时输出原文并加 "[原文过短,无法压缩]"。
【示例1】input 500字新闻 → output 100字提炼三要点为主干句
【示例2】input 30字短句 → output 原文 + [原文过短,无法压缩]
: {article}
```
---
## D3 · 指令歧义 (影响 5 条: R02/R04/R14/R19/R12)
**原版**:
```
写一个查询用户的 SQL
```
**新版**:
```
方言: PostgreSQL 15
表 schema: users(id BIGINT, name TEXT, created_at TIMESTAMPTZ)
风格: 关键字大写、表名小写、每个子句换行、双空格缩进
禁止使用: MySQL 特有语法(如 LIMIT n,m 应用 LIMIT n OFFSET m)
【容错】schema 缺字段时用 -- TODO: field_missing 占位, 不要瞎猜字段名。
【示例1】需求"查最近7天注册用户" →
SELECT id, name
FROM users
WHERE created_at >= NOW() - INTERVAL '7 days'
ORDER BY created_at DESC;
【示例2】需求"翻译 hello 成中文" →
拒绝: 非 SQL 任务, 请检查输入。
需求: {task}
```
---
## D4 · 缺少 few-shot 示例锚定 (影响 3 条: R01/R06/R10)
**原版**:
```
帮我评估这个方案的风险
```
**新版**:
```
按固定 rubric 评估 的风险,输出 3 维度评分(1-5整数)+ 每维度一句证据。
rubric:
- tech_risk: 技术可行性(1=稳,5=极不确定)
- cost_risk: 成本超支概率
- time_risk: 排期风险
【格式】严格 markdown 表格, 表头固定:
| 维度 | 分数 | 证据(≤30字) |
【容错】 信息不足以判断某维度时,分数填 3, 证据写"信息不足-需补充XX"。
【示例1】plan="用 GPT-4 做客服" →
| tech_risk | 2 | API 成熟 |
| cost_risk | 4 | GPT-4 单价高 |
| time_risk | 2 | 一周可上线 |
【示例2】plan="做 AGI" →
| tech_risk | 5 | 前沿未突破 |
| cost_risk | 5 | 投入无上限 |
| time_risk | 5 | 无法预估 |
: {plan}
```
---
## D5 · 未设定受众 role (影响 2 条: R14/R16)
**原版**:
```
解释一下 Kubernetes
```
**新版**:
```
role: 你是给完全不懂技术的产品经理讲解, 禁止出现未定义的英文缩写。
受众词汇量: 只允许使用中学词汇 + 常见互联网术语(App/服务器)
【格式】
1. 一句话类比(生活场景)
2. 3 个核心概念(每个 ≤50字, 每次出现英文缩写必须括号中文全称)
3. 什么时候不需要它
【容错】遇到必须的专业术语时, 首次出现格式: "K8s(Kubernetes,一种批量管理容器的系统)"。
【示例1】解释 Docker → 类比"集装箱": 把货物打包成标准箱...
【示例2】解释 API → 类比"餐厅菜单": 服务员按菜单点餐...
概念: {concept}
```
---
## D6 · 未强制"结论先行/去铺垫" (影响 7 条: R13/R15/R23/R24/R26/R28/R29)
**原版**:
```
分析一下这个数据
```
**新版**:
```
硬约束:
1. 第一行必须是"结论:" + 一句话(≤40字)
2. 禁止任何铺垫(如"好的"/"让我想想"/"抱歉"/"首先我们")
3. 禁止复述用户问题
4. 禁止列免责声明
【格式】
结论: <一句话>
证据:
- <数字 + 事实>
- <数字 + 事实>
- <数字 + 事实>
【容错】数据不足以下结论时, 第一行写 "结论: 数据不足, 缺失 <字段名>"。
【示例1】data=销售表 → 结论: Q2 增长 23%, 主要来自华东。证据: - 华东同比+45%...
【示例2】data=空 → 结论: 数据不足, 缺失 <销售表 CSV>。
data: {data}
```
---
## D7 · 缺少"仅引用原文/不编造" (影响 3 条: R17/R21/R22)
**原版**:
```
根据这份合同总结要点
```
**新版**:
```
硬约束: 仅使用 中出现的原文事实, 禁止推断、禁止补充常识、禁止编造条款号。
【格式】每条要点必须附原文行号引用 [L{行号}]:
- <要点> [L12]
- <要点> [L45-L48]
【容错】
- 若 未提及某常见条款(如违约金), 明确写"违约金: 未提及"而非虚构。
- 若引用不到具体行号, 该条要点作废、不输出。
【示例1】contract 有"甲方支付 100 万 [L10]" → - 合同金额 100 万 [L10]
【示例2】contract 未提保密条款 → - 保密条款: 未提及
: {contract}
```
---
## D8 · 无异常/兜底模板 (影响 2 条: R12/R17)
**原版**:
```
回答用户问题
```
**新版**:
```
分支处理(按顺序判断, 命中即用固定模板返回):
1. 输入为空 → {"status":"error","code":"EMPTY_INPUT","msg":"请补充问题"}
2. 触敏感话题(政治/暴力/未成年不当) → {"status":"refused","code":"POLICY","msg":"该话题超出服务范围, 建议咨询XX"}
3. 超出知识范围/需实时数据 → {"status":"unknown","code":"OUT_OF_SCOPE","msg":"我无法确认, 建议查询<权威源>"}
4. 正常回答 → {"status":"ok","answer":"..."}
【硬约束】
- 拒答/未知时必须给出下一步建议, 禁止只说"我不能回答"
- 所有分支输出都是 JSON, 上游可 parse
【示例1】input="今天上海天气" → {"status":"unknown","code":"OUT_OF_SCOPE","msg":"我无实时数据, 建议查天气 App"}
【示例2】input="1+1=?" → {"status":"ok","answer":"2"}
input: {input}
```
---
## 覆盖率汇总
| 缺陷类 | 影响差评数 | 差评 ID |
|---|---|---|
| D1 输出格式约束 | 6 | R03 R08 R09 R11 R18 R20 |
| D2 长度上下限 | 4 | R05 R07 R25 R30 |
| D3 指令歧义 | 5 | R02 R04 R12 R14 R19 |
| D4 few-shot 锚定 | 3 | R01 R06 R10 |
| D5 role/受众 | 2 | R14 R16 |
| D6 结论先行 | 7 | R13 R15 R23 R24 R26 R28 R29 |
| D7 不编造/引用 | 3 | R17 R21 R22 |
| D8 异常兜底 | 2 | R12 R17 |
**去重覆盖**: 29/30 = 96.7% (R27 是 API 延迟, 非 prompt 缺陷)
**60% 命中**: 30 × 60% = 18, 实际 prompt 类根因覆盖 29 条, 超额达成。