角色设定 Role Setting:给模型定身份有用吗
角色设定(Role Setting,也叫 role prompting)是在提示词里告诉大模型“你是谁、面向谁、用什么口气说话”,让它顺着这个身份回答。可以把它想成新员工入职第一天拿到的岗位说明:同一个人,被告知“你是客服”和“你是法务”,开口的方式和关心的重点都不一样。
它是怎么回事
大模型的底层动作是读完前面所有文字,预测下一个词。Shanahan 等人在论文里把它形容成一个在海量人类文本上训练、目标就是预测下一个 token 的网络。角色描述写进上下文以后,后面的续写会向“这种身份的人会说的话”靠拢。聊天产品里,这段描述通常藏在用户看不到的位置:Nature 那篇论文提到,对话开始前会有一段对话提示被悄悄放在上下文最前面,模型会尽力扮演这段提示描绘的助手。你在 API 里写的系统提示词,和产品背后那段隐藏的开场白是同一类东西。
从哪来的
把“角色扮演”当作理解对话模型的框架,比较系统的出处是 Murray Shanahan、Kyle McDonell 和 Laria Reynolds 的《Role-Play with Large Language Models》。这篇论文 2023 年 5 月上了 arXiv,同年 11 月发表在《Nature》第 623 卷,作者来自 DeepMind、帝国理工学院和 EleutherAI。他们的考虑是:说模型“知道”“明白”很顺口,说多了却容易把它当成人;换成“它在扮演某个角色”,既能沿用日常说法,又不会误以为它真有人的特质。论文还给了更细的看法:模型可以看成许多可能角色的叠加,随着对话推进,角色被逐步收窄。
落到提示词技巧上,有两项常被引用的研究,结论不太一样。Kong 等人的工作发表于 NAACL 2024,用设计过的角色提示在十二个推理基准上做零样本测试,ChatGPT 的 AQuA 准确率从 53.5% 升到 63.8%,Last Letter 从 23.8% 升到 84.2%。Zheng 等人发表在 EMNLP 2024 Findings 的论文测了 162 个角色、4 个开源模型家族、2410 道事实题,结论是系统提示词里加角色总体上没有提升表现,哪个角色有效,很大程度上像随机。
现在在哪用
Anthropic 的文档把角色看作系统提示词最有力的用法,建议用 system 参数放角色,把具体任务写进用户消息。Claude 的 Messages API 里,系统提示词是单独的 system 参数,不是消息列表里的一条 system 消息。文档的例子就是一句“你是一位财富 500 强公司的资深数据科学家”,还提醒角色要写具体,背景给得越多,模型越容易进入状态。长对话里要让角色不跑偏,Anthropic 另有一篇保持角色的指南。
OpenAI 的做法是按角色分权限。开发者写的 developer 消息优先于用户消息,官方拿函数来比喻:developer 消息像函数定义,管规则和业务逻辑,用户消息像参数,管输入。官方建议的提示词结构里有一块叫 Identity,用来描述助手的目的、沟通风格和高层目标。Zheng 等人的论文还提到,ChatGPT 的默认系统提示词里就有“You are a helpful assistant”这一句。
容易混的地方
先分清几个说法。角色设定不等于系统提示词,它只是其中一块,规则、输出格式、工具说明是别的部分。它也不等于“让模型演个角色玩”:Shanahan 他们用 role-play 这个词,是为了解释对话模型的行为,不是在推荐提示词技巧。
最常见的误解是“给个专家头衔,模型就变聪明了”。上面两项研究并不矛盾,模型、任务和角色的写法都不同,不能拿一个去否定另一个。Anthropic 文档讲得更克制,说角色可以按目标读者调整沟通风格。我们 AI主线 的看法是,把角色当成调语气、范围和关注点的旋钮,对准确率有没有帮助,要拿自己的任务测。
对使用者来说有三件事。角色要写具体,“你是某产品的客服,面对第一次使用的新手,语气耐心直接”,比一句“你是专家”给的信息多得多。角色放系统提示词,任务细节放用户消息,这是 Anthropic 文档的建议。成本上,角色描述会占 token,Anthropic 文档的说法是除非 token 数卡得很紧,一般没有不试的理由。拿自己最常问的十来个问题,加角色和不加角色各跑一遍,对比输出,再决定留不留。