无规矩不成方圆
在正式开始之前,大家是否还记得小学时,老师经常让我们给“李明”写信?
开头往往要写“你好”,末尾有时还会加上“此致、敬礼”等格式。特别是考试的时候,少一项就要扣分。
那时总在想,为什么要这么繁琐?像写小纸条一样,把想说的话写出来不好吗?
工作以后,我经常需要写邮件。一开始没有按照固定格式去写,后来发现,一着急就容易遗漏。
不是漏了自己的名字,就是漏了日期,要么忘记告诉对方下一步要做什么。
久而久之,我又开始像小时候那样,按照一个固定顺序检查邮件。哪怕很忙,也不容易漏掉关键内容。
同样的事情也出现在很多行业。护士、空乘和设备操作员会按照清单反复确认,看起来像是在做一件很简单的事,为什么还要这样?
因为人总会有疏漏。一套固定流程不能保证永远不出错,但可以减少遗漏。
写 Prompt 也是如此。
那我们能不能准备一个参考模板,在任务复杂时顺着检查一遍?
可以。
但它只是减少遗漏的工具,不是适合所有模型、所有任务的“最佳公式”。
一个好的 Prompt 应该包含什么?
是不是把所有信息都塞进去,越详细越好?
当然不是。
记得《武林外传》中,燕小六经常问:“姓嘛?叫嘛?从哪来?到哪去?家里几口人?人均几亩地?地里几头牛?”
听起来问得非常具体,但其中很多信息和眼前的事情没有关系。信息太多,有时反而会形成干扰。
信息太少,模型只能猜。没有关系的信息太多,也会形成干扰。
我们先看一个现实场景:让张三帮忙买两个牛肉饼。
买两个牛肉饼
假设完整的要求是:
请张三现在去楼下的罗森便利店,买两个每个 7 元的牛肉饼。
牛肉饼需要加热,分别装进两个纸袋,并在 20 分钟内送回来。
这里面有哪些关键信息?
首先,让谁去买?得有一个明确的人。站在人群里只说“帮我买两个牛肉饼”,张三不知道说的是不是他。这里是 角色或对象。
去哪里,什么时候去?不然张三可能明天再买,或者去了另一家店。这里是 行动的时间和地点。
买什么、买几个、多少钱?这里是 任务和限制。
要不要加热?这里是 具体操作。
怎么装?这里是 交付格式。
多久送回来?这里还是 限制条件。
假如我们只告诉张三:“去帮我买点东西。”
他能正好买回我们心里想的两个牛肉饼吗?
不排除这种可能。如果真的一项不差,那张三确实很了解我们。
但大多数时候,他只能继续问,或者自己猜。
人尚且如此,那 AI 呢?
如果想让模型写一篇小说,却只说“帮我写一篇小说”,得到的内容大概率也不会刚好符合脑子里的设想。
一个可以参考的结构
复杂 Prompt 可以从下面几个部分里选择需要的内容:
Role(角色)
说明希望模型从什么视角工作,或者结果面向谁。
角色不会让模型真的获得某种职业资格,也不会“屏蔽”其他领域知识。真正有用的是角色背后的具体标准,例如“按代码审查者的方式找风险”,而不是“你是全世界最厉害的工程师”。
Skills(需要用到的能力)
列出任务需要哪些能力,例如总结、分类、翻译或代码解释。
这不会给模型安装新的技能,只是帮助它把注意力放在任务需要的处理方式上。很多简单任务可以省略这一项。
Action(行动)
直接告诉模型需要完成什么。
例如:根据会议记录提取待办;检查代码中的错误;根据主题写一个故事大纲。
Constraints(限制)
说明不能做什么、信息不足时怎样处理,以及长度、语言、安全和事实边界。
例如:原文没有的信息不要补充;不确定时写“未提供”;使用中文回复。
Format(格式)
说明希望得到 Markdown、表格、JSON,还是固定字段。
Example(示例)
当规则很抽象时,给一个输入和输出示例,帮助模型理解对应关系。
把结构放进一个 Prompt
# Role
科幻故事编辑
## Action
根据用户给出的主题,提供角色设定、故事冲突和三段式大纲。
## Constraints
- 不使用已有作品中的知名角色或情节。
- 信息不足时先列出需要确认的问题,不自行补全。
- 世界观可以虚构,但内部规则要前后一致。
## Format
使用 Markdown,按“角色、冲突、大纲、待确认问题”四部分输出。
## Example
角色:一名负责修复星际航线的工程师。
冲突:一次维修任务暴露了两个文明之间被隐藏的历史。
这个模板不是必须照抄的标准答案。
如果只是让模型把一句话改通顺,不需要把六个部分都写一遍。如果任务涉及长材料、多人协作或程序继续处理,结构才会越来越有价值。
简单任务,简单写。
复杂任务,再用模板检查有没有遗漏。
上一章: 获得优质输出的六大技巧
下一章: 让模型输出 JSON 数据