角色提示的意思是,在告诉模型做什么之前,先告诉它要扮演谁:“你是一位耐心的数学辅导老师”“请扮演初级开发岗位的招聘经理”。角色会改变回答写给谁看、用什么词、讲多深,以及关注什么。它不会给模型增加原本没有的知识:角色是引导回答的方法,而不是补充事实的方法。
角色能改变什么
角色是一种一次设定好几件事的简洁方式:
- 读者和用词。 面向初学者的辅导老师会解释术语、使用类比;写给同行看的资深工程师则两者都会省略。
- 标准。 一位严格的编辑会挑出友善的读者会放过的句子。角色决定了什么算问题。
- 侧重点。 安全审查者和性能审查者读同一个函数,注意到的东西完全不同。
- 行为。 面试官会提问并等待回答;辅导老师可以被要求给提示,而不是直接给答案。
在下面三个标签页之间切换。每个标签页的任务完全相同,只有角色不同。
API(应用程序编程接口)是一套让一个软件和另一个软件对话的规则。它规定了你可以发出哪些请求、怎么发出,以及会得到什么返回。例如,天气应用会通过天气服务的 API 获取天气预报。有了 API,开发者无需了解其他系统的内部原理,就能使用它们的功能和数据。
“你是一位专家”几乎没有改变回答:它保持了同样笼统的结构,只是多了些术语,因为“专家”这个词完全没有说明谁在读。具体的角色则改变了用词、例子和参照点,因为它点明了读者,以及这位读者已经知道的东西。
角色不能改变什么
角色无法增加知识。如果模型从没学过今年的税务规定,“你是世界一流的税务律师”并不能让它知道这些规定;一个自信的人设反而会让错误的答案听起来更权威。别指望专家标签能提高准确性。如果正确性很重要,就把模型需要的事实或文档给它,并要求它在不确定时说出来;AI 幻觉介绍了一些有帮助的提示词。
对真实的人物也是一样。“像某位著名程序员那样回答”只能得到对这个人公开风格的模仿。模型并不知道他的私人观点,所以它用他的口吻对一个新问题说的任何话,都是编出来的。
写出具体的角色
一个有用的角色通常会写明四件事:职业、读者、目标和标准。对比一下:
- “你是一位作家”变成“你是一个技术博客的编辑,会删掉任何无助于初学者跟上步骤的句子。”
- “你是一名程序员”变成“你是一位资深 Python 开发者,正在审查初级同事的合并请求。先指出 bug,再指出可读性问题,并解释每一点,让他能从中学到东西。”完整的审查提示词见代码审查提示词。
- “请扮演一位老师”变成“请扮演一位化学老师,正在帮一个 15 岁的学生备考。向我提问而不是直接给答案,我答错时给我一个提示。”
角色只是提示词的一部分,而不是全部。它需要与清晰的任务、模型猜不到的上下文以及你想要的回答形式配合使用;提示词写作指南讲了其他几个部分。如果角色和任务方向相反,比如让“一位严格的审查者”去“安慰作者”,回复会试图两者兼顾,结果往往哪个都做不好。
用“扮演”类提示词来练习
“扮演”这种写法是随着网上流传的提示词合集流行起来的,模型在其中扮演求职面试官、语言陪练,甚至一个 Linux 终端。角色扮演适合任何你想预演的场景:面试、一次艰难的谈话、一场演讲、一门新语言。
角色扮演是顺利进行还是乱成一团,区别在于规则。告诉这个角色每一轮该做什么、什么时候等你、什么时候停下。没有这些规则,模型可能会在一个回复里把整场练习都做完:一次抛出五个问题,或者提一个问题再附上参考答案。
好的,我们开始吧。先从一个基础问题问起。
问题 1: 在 JavaScript 中,let、const 和 var 有什么区别?
不用着急,就像在真实面试中那样回答。
把岗位和主题换成你自己的,就能预演你的面试。“等我回答”这一句让模型每一轮只问一个问题,“问完五个问题后停下”则让这场练习有了结尾和总结。
角色放在哪里
希望每个回复都遵循的角色,应该放在系统提示词里:API 中的 system 字段,或者聊天应用中的自定义指令和项目指令。放在那里,它会作用于整个对话,无需重复。如果只是一次性的请求,就把角色写在消息的第一句,放在任务之前。
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
message = client.messages.create(
model=MODEL,
max_tokens=500,
system="You are a patient programming tutor for adults in their first month of coding. Give hints before full solutions.",
messages=[{"role": "user", "content": "Why does my loop print the last item twice?"}],
)
print(message.content[0].text)
角色在对话中途也能用。模型写出初稿之后,让它“现在扮演一位持怀疑态度的审稿人,审读上面的初稿,列出它最薄弱的三点”,常常能发现第一遍没顾及的问题,因为新的角色改变了模型要找的东西。
常见问题
角色提示是什么?
角色提示就是在告诉模型做什么之前,先告诉它要扮演谁,例如“你是一位耐心的数学辅导老师,学生是 12 岁的孩子”或“请扮演初级开发岗位的面试官”。角色会影响回复面向的读者、用词、深度和侧重点;在对话中,它还能改变模型的行为,比如由回答问题变成提出问题。
告诉 AI 它是专家,会让它更准确吗?
别指望这一点。“你是世界一流的专家”这样的标签并不能给模型增加它没有的知识,反而可能让错误的答案听起来更自信。想提高准确性,就把模型需要的事实或资料给它,要求它在不确定时说出来,并检查结果。
角色应该放在哪里?
如果角色要贯穿整个对话,就放在系统提示词里:API 中的 system 字段,或者聊天应用中的自定义指令和项目指令。如果只是一次性的请求,就放在消息的第一句,写在任务之前。
“扮演”类提示词(act as)是什么?
就是以“请扮演”(Act as)开头、给模型分配一个角色的提示词:面试官、语言陪练、Linux 终端、导游。网上流传的提示词合集让这种写法流行起来。如果同时说明这个角色每一轮该做什么、什么时候停下,效果最好。
好的角色提示词有什么特点?
具体。写明职业、读者、目标和标准:“一位资深 Python 开发者,正在审查初级同事的合并请求,先看 bug,再看可读性”,比“一位专家”给模型的信息多得多。然后照常写好提示词的其余部分:任务、上下文和格式。