输出听着精致但不可执行:4 个原因 + 对症修复

AI 给的 4 段建议读起来像顾问 deck——没文件路径、没命令、没要查的配置值。本文讲为什么 polish 没工件等于装饰,并用 schema 强制 AI 交出可执行交付物。

你让它帮你调试一次部署。模型回了 4 段精致 prose,讲”先考虑环境配置”、“调查部署流水线”、“复盘相关日志”。没文件路径、没具体命令、没要查的配置值。读起来像顾问 deck,不是修复。光精致没工件就是装饰——它满足了”有用回答”的形态,但没给任何人能动手的具体抓手。模型不是不帮忙,是太礼貌:训练让它在开放任务上走”顾问腔”,而顾问腔里工件本来就稀少。

本文讲为什么”精致输出”哪怕你追问”具体点”也还是精致,以及怎么用 schema 强制工件,而不靠加形容词。

常见原因

1. Prompt 要建议,不要工件

“我该怎么思考 X”得到思考框架。“产出 X”得到 X。动词决定你拿到的是讨论还是交付物。

如何判断:你的动词是”建议”、“解释怎么”、“讨论”、“考虑”。

2. 没要求工件

你没说”至少 1 个文件路径、1 个命令、1 个数字”,模型就略掉,因为 prose 更便宜且读着更像在思考。

如何判断:你的 prompt 没有工件清单。

3. 软动词在 prompt 里漏到输出里

你 prompt 说”考虑是否……”,模型回声”你也许可以考虑……”。软动词会传染。

如何判断:prompt 含”考虑”、“想想”、“探索”、“看一下”。

4. 没给可执行输出示例

你描述了”可执行”但没展示。模型走训练分布的”可执行”平均态,大多还是 prose。

如何判断:prompt 描述了形态但没展示一个。

5. RLHF 让模型在开放问题上 hedge

现代 chat 模型在开放问题上打太极避免出错。打太极把工件藏在”可能”、“也许”、“取决于”后面。

如何判断:基本每隔一句就有 hedge 词。

动手前先确认

  • 想清楚有用答案该含哪些工件:文件路径、命令、数字、版本号、代码片段、schema 片段、命名工具。
  • 保存精致输出做 diff 用。
  • 想清楚谁来执行、需要什么。
  • 规划一个把工件作为字段强制的 schema 或模板。
  • 标出 prompt 里要替换的软动词。

需要收集的信息

  • 当前 prompt。
  • 不可执行的精致输出。
  • 可执行版本该含的工件清单。
  • 输出的下游消费者。
  • 模型 + system prompt。

最短修复路径

Step 1:把”建议”换成”产出”

差:  "对发布修复给点建议。"
好:  "产出 5 步修复,编号列表。每步必须含:
       - 一条要运行的命令(代码块)、
       - 一个要查或改的文件路径、
       - 预期结果(1 行)。"

“产出”动词 + 工件清单逼出具体性。

Step 2:用 schema 强制工件

输出 schema:
[
  {
    "step": <int>,
    "command": "<准确 shell 命令>",
    "file": "<绝对或相对路径>",
    "expected_output": "<一行字符串>"
  },
  ...
]

Schema 字段不能填 prose。模型没有具体的就只能写 UNKNOWN。

Step 3:禁软动词

禁用:"考虑"、"也许可以"、"你或许"、"可能"、"探索"。
不许出现。给不出具体下一步时写 "INSUFFICIENT_INFO"
并询问需要什么具体数据。

禁 hedge 逼模型要么提交要么升级。

Step 4:给具体示例

像这样:
1. 运行 `vercel logs --since=10m` 查看最近报错。
   文件:vercel.json(看 buildCommand)
   预期:日志里有 "Error: env STRIPE_KEY missing"

不要这样:
1. 可以考虑复盘部署日志,看看有没有
   和问题相关的异常。

对比让形态毫不含糊。

Step 5:让模型自审

末尾加:

写完后数每步的工件:
- 每步是否恰好 1 命令、1 文件、1 预期? 是/否
- 全文工件总数:<数>
- 5 步输出全文工件 < 15 个时重写以加具体性。

工件计数机械化,模型擅长。

Step 6:用真实输入数据

prompt 泛(“帮我调 bug”),输出就泛。粘真实报错、真实配置、真实日志。具体输入拉具体输出。

怎么确认已经修好

  • 输出每个逻辑单元(每步、每条 bullet、每节)有 3+ 工件。
  • 同事读完能直接动手,不需要追问。
  • 软动词(考虑、也许、可能)出现 0 次。
  • 同 prompt + 同输入,多次输出工件密度相近。
  • 输出读起来像 runbook,不像 memo。

如果还是没修好

  1. 任务可能在你的输入下真的没有具体抓手——多粘输入数据。
  2. 换更强的模型——有些 hedge 少。
  3. 切到多步工作流:第一 prompt 抽事实、第二 prompt 从事实产行动方案。
  4. 重复任务在 API 层做 JSON schema 强制的行动方案模板。

预防建议

  • 默认:每个”建议型” prompt 写明要产出的工件。
  • 每个任务类型维护”可执行输出”清单(发布修复、code review、PRD)。
  • 没工件的输出当草稿,不当交付。
  • 审已接受输出:数工件密度;低就收紧 prompt。
  • 默认动词从”建议/讨论/考虑”换成”产出/列出/写”。
  • 团队工作流商定最低工件密度(如”每步必须含一条命令”)。

相关阅读

标签: #排查 #Prompt #Prompt 质量 #回答太泛