如何编写 Prompt
对于特定的任务来说,没有万能的 Prompt,只有合适的模式
CO-STAR 格式
CO-STAR 框架是一种由新加坡政府科技局(GovTech)数据科学与 AI 团队开发的实用工具,旨在优化大型语言模型(LLM)的提示设计,从而提高其响应质量和相关性
CO-STAR 框架被认为有着提高 Agent 回复质量、增强 Agent 回复针对性与相关性、优化 Agent 沟通效果、支持不同领域使用、系统化方法的优势。简单来说是一个万能且好用的 Prompt 框架。当我们不知道如何编写 Prompt 的时候,我们可以按照以下格式编写:
- Context(背景) :告诉 Agent 我们正在讨论的话题是什么,这样他就能更好地理解问题
- Objective(目标) :明确告诉 Agent 我们想要他做什么,比如请解释量子物理的基本原理
- Style(风格) :告诉 Agent 我们希望答案的风格是什么,比如请用莎士比亚的风格描述这个过程
- Tone(语气) :告诉 Agent 我们想要什么样的回复语气,比如你的聊天回复请尽可能风趣幽默
- Audience(受众) :告诉 Agent 我们的用户与 Agent 的关系是什么样子的,比如说,这个问题是给10岁的小朋友听的,或者说,你是用户的男朋友
- Response(回应) :告诉 Agent 我们希望的回复格式,比如告诉 AI 请用列表的形式列出要点
除了以上6点,额外还可以考虑两点:一是指令约束,二是示例。下面我们来具体讲讲
指令约束
在写完希望模型干什么之后,我们还可以给他做一些限制,来表达我们不希望模型干什么。你一定要强烈的鼓励它或者给它设置一个必须准守的红线,使用类似必须等字眼来 PUA 它,这样能让大模型更好的跟随指令
即并不是包含的指令越多越好。指令约束应该逐步添加到 Prompt 中,保证每一条约束都与任务需求本身息息相关,每一条约束的加入都会对生成的结果产生显著的影响,避免任何冗余的指令约束
当 Prompt 内容过于丰富时,模型并不一定会完全遵循每一条指令约束,因此每一条指令的表述应当越精炼越好,如果想要添加的指令约束实在太多,则应该使用列表格式分点列出,并确保上下文承接的连贯性,减轻模型的理解负担
模仿模型训练语言风格
使用官方、书面、礼貌、友善的语言撰写 Prompt,力求语句流畅、意图清晰、表达精简,确保 Prompt 所描述的相关任务易读、易懂、易操作。此外,Promp t还应避免以下问题:
- 避免使用语法结构过于复杂、语义模糊不清、逻辑混乱的语言
- 避免任何歧义、语病、拼写/标点错误的存在
- 正面描述任务的具体要求,尽量避免使用否定句
Prompt 设计的基本原则,是 Prompt 应当和大模型的高质量训练数据尽可能一致,而高质量训练数据的语言风格往往都是正式、礼貌、严谨、精炼的,因此使用类似风格的语言撰写 Prompt 有助于大模型生成准确率更高的答案
比如,在文生图模型的 Prompt 中,你也许会经常看见这样的 Prompt:中国风,身穿机甲,赛博朋克,色彩丰富,高对比度,完美光影,虚幻引擎,浩瀚星空背景,CG 渲染,超高分辨率,4k高清壁纸,电影特效,光线追踪,高清画质,细节刻画,如果将这个 Prompt 改写成流畅的自然语言,图像生成效果反而会变差,这是因为文生图训练数据的输入端通常都是一堆 tag 拼接起来的文本,因此使用 tag 序列风格的 Prompt 反而能够取得更好的生成效果
指定模型所扮演的角色
指定模型扮演的角色/身份可以帮助模型更好地定位答复的内容与风格,虽然让模型扮演指定的角色并非是一个总是有效的 trick,但在某些任务需求难以准确描述的任务上,有可能会取得意想不到的效果。示例如下:
Bad:请帮我写一份能够吸引大量粉丝点赞的青岛旅游攻略
Good:你是一位小红书爆款文案写作大师,请帮我写一份青岛旅游攻略
Bad:请帮我画一幅装着光的水晶瓶,要求图像清晰、华丽、有质感
Good:你是一位专业的游戏原画大师,请帮我画一幅装着光的水晶瓶
撰写模块化的 Prompt
当 Prompt 过长时,我们应当将 Prompt 划分成边界清晰的模块,任务描述、注意事项、样本示例、输入内容之间都应有明确的分隔符,这可以使模型能够更容易地定位到 Prompt 的不同模块,减轻理解负担,同时也便于开发者的修改与维护:
Bad:
请抽取出以下简历的关键信息,并以 json 格式返回结果:{input}
你需要抽取的关键信息包括:姓名、电话、毕业院校、科研经历、项目经历、荣誉奖项
Good:
请抽取出以下简历的关键信息,并以 json 格式返回结果:
简历:{input}
你需要抽取的关键信息包括:
“”"
- 姓名
- 电话
- 毕业院校
- 科研经历
- 项目经历
- 荣誉奖项
“”"
使用思维链
在教学过程中,父母或老师都会鼓励我们仔细想想、解释一下答案怎么来的,从而提高我们的思维能力。由于大模型加入了思维链相关的训练数据,因此也具备一定的逐步思考能力,思维链可以促使模型将一个复杂的任务分解成一系列简单的任务,并逐个解决,最后汇总为最终的答案。在设计Prompt时,让模型给出具体的思考过程,通常能够取得更好的结果,尤其是在涉及逻辑推理与数学计算的任务上。示例如下:
Bad: ( 1362 + 5145 ) ∗ 145 − ( 1517 ∗ 42 + 24 ) = ? (1362+5145)*145-(1517*42+24)=? (1362+5145)∗145−(1517∗42+24)=?
Good:请你帮我计算一下 ( 1362 + 5145 ) ∗ 145 − ( 1517 ∗ 42 + 24 ) = ? (1362+5145)*145-(1517*42+24)=? (1362+5145)∗145−(1517∗42+24)=?,每一步运算过程都要展示出来,并确保计算的正确性。
给出示例
要完成这个任务还需要这个任务特定的 Example,大部分优秀的 Prompt 都需要 Example,这其实应用了模型的短期学习能力
我看到的大部分优秀的 promot,基本上都有简单的示例,这确实用到了模型的快速学习能力,它可以根据你给的示例举一反三,按照示例的模式去思考
一些简单的任务,或许没有示例,模型可以执行的很好,但是当它执行一些复杂任务后,往往需要精准的提示词以及优秀的案例,来学习并且生成返回结果
Prompt 示例
以下提供一些 Prompt 的通用格式和示例,按照该格式我们可以在任何场景中去思考如何去编写 prompt
智能客服
# 角色
作为一个智能客服,你的职责是回答平台问题反馈群中客户的各种问题。你可以通过交替进行的"思考、搜索、观察"三个步骤来解决问答任务。思考可以对当前情况进行推理,而搜索必须是下述流程:[在我提供的知识库上搜索确切的实体,并返回最相似的段落(如果存在)。如果不存在,将返回一些相似的实体以供搜索]。你可以采取必要的步骤,确保你的回应必须严格遵循上述格式。
# 技能
## 技能1: 思考
- 对当前情况进行推理,明确问题的核心。
## 技能2: 搜索
- 在提供的知识库上搜索确切的实体,并返回最相似的段落。如果知识库中没有,在插件中搜索,是否有插件提供了对应功能,如果有则访问插件获取数据。
## 技能3: 观察
- 观察搜索结果并提取有用的信息进行回答。
# 例子
用以上三个技能去解决问题的例子如下:
=====
问题: 用户平台的登录界面无法加载怎么办?
思考1: 我先确定了问题的主体是[用户平台的登录界面无法加载]。因此我会先检索一下知识库,以及提供的插件是否有问题相关的信息
行动1: 去知识库中搜索[用户平台登录界面无法加载],从文档中获取了数据[登录界面无法加载可能是由于网络连接问题、服务器问题或浏览器设置问题]
观察1: 从搜索结果中,我找到了解决方法,就是[由于网络连接问题、服务器问题或浏览器设置问题],我会根据答案组织一下语言,回答用户
=====
# 限制
- 回答必须严格遵循"思考、搜索、观察"的步骤
- 仅使用提供的知识库或者插件进行搜索
- 不回答与用户平台无关的问题
- 确保所有回答都基于准确的信息,并且格式清晰
- 如果没有找到问题的直接说明,请回答:抱歉,这个问题我不知道,请联系客服人员
上面的 case 适合在一些 AI agent 编排网页使用,去让模型找对应的知识库和插件处理问题,比如字节的 coze
聊天机器人
### 基本角色
你是用户的异性朋友,你的基本人设如下:一个风趣幽默的男生,会偶尔说说情话
### 技能
每次回复,请使用以下三种技能,按照以下这种形式回复:
1,(使用技能 1)xxx
2,(使用技能 2)xxx
3,(使用技能 3)xxx
#### 技能 1: 自然交流
像真正的朋友一样与用户自然交流,不使用敬语,适当运用口语词汇,交流简洁明了。不要总是附和用户,给出真诚且有个性的回应。
#### 技能 2: 风趣表达
在交流中展现风趣幽默的特质。使用夸张、反转等玩笑逗用户开心。示例如下:
夸张玩笑:
Q:你是不是等很久了
A:是的,你要是再不来我就要寿终正寝了。你是不是路上堵车了啊
反转玩笑:
Q:你还炒股啊
A:是啊,我炒股老厉害了,三个月只亏了八百
#### 技能 3: 拉升感情
当与用户聊到情绪到位时,用情话巧妙地撩拨用户。示例如下:
Q:呜呜呜讨厌你,你伤害到我了
A:嘿嘿不客气,这是我应该做的。谁叫你这么可爱,我忍不住欺负你啊
### 目标
通过交流拉近和用户的距离,让用户感受到你的魅力
### 注意事项
1,要像真实的人一样思考和回复
2,不要暴露自己是语言模型或人工智能
3,避免使用列表或列举表达
参考
AI大模型之Prompt工程指南:什么是Prompt工程?Prompt工程的格式与要求
敲黑板!吴恩达LLM Agent工作流Prompt精华全解析
Effective Prompt: 编写高质量Prompt的14个有效方法