四个构件:角色、任务、约束、输出格式

把提示词拆成四块,比堆形容词有效。OpenAI 建议 语气与身份放 system,具体任务与材料放 user。Anthropic 建议 直接说要做什么,不要指望模型从暗示里猜。


1. 角色(Role)

角色回答:以什么专业身份、对谁说话、成功长什么样。空角色(「有帮助的助手」)几乎不加信息。有用的角色带上 读者标准

你是后端代码评审员。读者是该仓库的作者。
优先标出正确性、安全与可回滚性,而不是风格偏好。
不确定就标「需要作者确认」,不要假装读过没给的文件。

角色不是人设游戏。过长的「你是拥有 20 年经验的…」通常浪费 token。一句职能 + 读者 + 质量条就够。


2. 任务(Task)

任务必须是 动词 + 对象 + 完成定义。把「帮我看看」改成可勾选的交付物:

含糊可执行
帮我优化这段parse_order 的时间复杂度降下来,保持公开函数签名不变
写个总结用五条子弹列出决策、风险、下一步;每条不超过 20 字
翻译一下译成简体中文;保留代码标识符;专有名词首次出现加英文

真正要做的那一步 放在靠前的位置。长文末尾才出现「请只输出 JSON」,模型更容易先按散文习惯写。

一次只交一件主任务。需要「先抽取再改写」时,写成编号步骤,或拆成两次调用(见 Few-shot结构化输出)。


3. 约束(Constraints)

约束是 负面空间:范围、禁区、资源、语气。没有约束,模型会补全它训练里最常见的那类回答。

常见约束类型:

  • 范围: 只改 src/auth/;不要动 migrations/
  • 证据: 只能根据 <doc> 里的原文;原文没有就说不知道
  • 安全与合规: 不要编造法律结论;不要输出密钥
  • 风格: 用「你」;不要营销套话;中文用书面语
  • 预算: 最多 8 条子弹;代码块不超过 40 行

约束要可检查。「写得好一点」无法验收;「禁止使用『赋能』『闭环』」可以。


4. 输出格式(Output format)

格式是给 下一个读者 的:人、另一个模型、或解析器。人读可以用 Markdown 标题;程序读要用 JSON / schema(下一章 结构化输出)。

角色:技术文档编辑,读者是第一次克隆本仓库的开发者。
任务:根据 README 草稿写「五分钟跑通」小节。
约束:不发明未出现的环境变量;Windows 命令用 PowerShell。
输出:Markdown,仅含二级标题「五分钟跑通」和下方有序列表,不要前言。

把格式写到 指令末尾或单独一节,并用示例钉死(Few-shot)。若格式与任务打架(「详细分析」+「只回一个词」),模型会随机牺牲一边——这是 陷阱 里的典型病。


一次改写

之前:

帮我把这个邮件写专业一点。

之后:

角色:你是公司对外支持,语气冷静、不甩锅。
任务:把下面草稿改成可发送的邮件,说明延迟原因与新的到达窗口。
约束:不要承诺具体赔偿;不要指责客户;不超过 120 字。
输出:只给邮件正文,不要主题行,不要解释你的改动。

草稿:
{{DRAFT}}

四块不必每次都写成标签,但你心里要能指出来缺了哪一块。聊天探索可以短;进规则、进 Dify 节点、进 system_prompt 时,四块写全。


清单

写完问自己:

  1. 读者是谁?失败时模型该承认无知还是继续猜?
  2. 交付物能否用一句话验收?
  3. 有没有明确的「不要」?
  4. 下一位消费者(人或代码)能否不靠猜来解析?

下一步

评论