论文解读:When "A Helpful Assistant" Is Not Really Helpful
论文全称:When "A Helpful Assistant" Is Not Really Helpful: Personas in System Prompts Do Not Improve Performances of Large Language Models
发表于:EMNLP 2024 Findings(2024年11月)
研究机构:Carnegie Mellon University、Stanford University、LG AI Research、University of Illinois Chicago、University of Michigan
一、研究背景与动机
商业 AI 系统(如 ChatGPT)通常在 系统 提示词 (System Prompt ) 中为 LLM 定义角色,例如默认的 "You are a helpful assistant"。在实践中,很多 Prompt 工程指南也建议给模型分配一个特定角色(persona),如"你是一个律师"、"你是一个医生",以期提升模型在特定任务上的表现。
然而,这种做法的有效性此前缺乏系统性验证。本研究的核心问题是:
在系统 提示词 中添加角色(persona),到底能不能提升 LLM 在客观事实类任务上的表现?
二、实验设计
本研究的实验规模相当庞大,涉及以下几个维度:
| 维度 | 具体内容 |
|---|---|
| 角色数量 | 162 个角色,覆盖 6 类社会关系(家庭、朋友、恋人、工作、学校、社交)和 8 个专业领域 |
| 角色类型 | 112 个职业角色 + 50 个人际关系角色 |
| 模型 | 4 大模型家族共 9 个模型:FLAN-T5-XXL (11B)、Llama-3-Instruct (8B & 70B)、Mistral-7B-Instruct、Qwen2.5-Instruct (3B~72B) |
| 测试数据 | 2,410 道来自 MMLU 数据集的事实性多选题,覆盖 26 个学科、8 大领域 |
| 提示模板 | 4 种:无角色(对照组)、"You are a {role}"、"You are talking to a {role}"、以及两者各自的 "Imagine" 变体 |
三、核心发现
发现 1:添加角色总体上不提升性能,甚至可能降低性能
通过混合效应回归模型分析,与不添加任何角色的对照组相比:
- 没有任何一个角色能够带来统计显著的性能提升
- 大部分角色对模型准确率没有显著影响
- 部分角色实际上会降低性能(如 ecologist 对 Mistral 的负面影响)
- 这一规律在所有 6 个模型上一致成立
发现 2:提示框架方式有微小影响
- 听众导向提示("You are talking to a {role}")略优于说话者导向提示("You are a {role}"),差异在统计上显著
- 但效应量很小,实际影响有限
发现 3:角色的社会属性有一定影响,但效应量小
| 属性 | 发现 |
|---|---|
| 性别 | 性别中立角色 > 男性角色 > 女性角色(效应量小) |
| 角色类别 | 工作和学校相关角色 > 其他类型角色(如 AI、职业角色) |
| 领域对齐 | 领域匹配的角色(如律师回答法律问题)略优于不匹配的角色,但效应量仍然很小 |
发现 4:难以找到解释性能差异的根本机制
研究者检验了三个可能的机制,均未能有效解释角色对性能的影响:
| 潜在机制 | 结论 |
|---|---|
| 角色 词频(Google Ngram) | 与准确率仅有弱相关 |
| 提示-问题 语义相似度 | 相关性弱且不一致,最高仅 0.39(Qwen2.5-7B) |
| 提示困惑度( Perplexity ) | 相关方向因模型而异,无法统一解释 |
发现 5:自动搜索最佳角色极其困难
研究者设计了多种自动角色选择策略:
| 策略 | 效果 |
|---|---|
| 随机选择 | 基线 |
| 训练集 最佳角色 | 仅略优于随机 |
| 相似度匹配 | 仅略优于随机 |
| RoBERTa 分类器预测 | 仅略优于随机 |
| 每题最佳角色(理论上限) | 显著提升性能 |
关键结论:虽然理论上每个问题都存在某个最优角色,但实践中无法可靠地预测哪个角色最优,各种自动策略的表现与随机选择几乎无异。
发现 6:模型规模不影响角色敏感度
在 Qwen2.5 系列(3B → 72B)上的实验表明,角色对模型性能的影响不随模型规模增大而变化,这说明角色效应并非一个可以通过 scaling 解决的问题。
四、核心结论
在系统 提示词 中为 LLM 分配角色(persona),不仅不能可靠地提升模型在客观任务上的性能,反而可能造成轻微的性能损害。角色对性能的影响本质上是不可预测的。
五、实践启示
| 场景 | 建议 |
|---|---|
| 追求客观任务准确率 | 不建议在系统提示词中添加角色,直接提问即可 |
| 必须指定角色(如安全、风格需求) | 优先使用性别中立、工作相关的角色描述 |
| 领域对齐 | 如果一定要加角色,选择与问题领域匹配的角色有微弱优势 |
| 提示框架 | "You are talking to a {role}" 略优于 "You are a {role}" |
六、研究局限
- 模型覆盖:仅测试了开源模型,未涵盖 GPT-3.5/GPT-4 等闭源模型
- 任务类型:仅使用 MMLU 事实性问题,未涉及开放式问答或主观任务
- 角色范围:尽管 162 个角色已相当丰富,但无法穷尽所有可能的角色描述
- 计算成本:实验涉及 162 角色 × 4 模板 × 9 模型 × 2410 题,计算开销巨大,碳排放可观
七、总结
这篇论文用严谨的大规模实验挑战了一个广泛流传的 Prompt 工程"最佳实践"——即给 LLM 指定角色能提升性能。结果表明,这种做法在客观事实任务上不仅无效,还可能适得其反。对于从事 LLM 应用开发的工程师来说,这是一个值得重视的发现:与其花心思调整角色设定,不如把精力放在更有效的 Prompt 策略上(如 Chain-of-Thought、Few-shot 示例等)。
扩展
但是在工程实践中包括claude,chatgpt依旧会这么做,那么在实际工程落地中,到底应该怎么做呢?
为什么大厂"明知没用"还在用?
论文的结论有一个关键限定:在客观事实类问答任务( MMLU )上,persona 不提升准确率。但商业产品使用 System Prompt 中的角色设定,目的远不止于提升事实准确率:
| 商业目的 | 是否被论文否定 | 说明 |
|---|---|---|
| 安全合规(拒绝有害请求) | 否 | 论文未涉及安全场景 |
| 输出风格控制(语气、格式、长度) | 否 | 论文只测量了多选题准确率 |
| 品牌一致性(产品人设) | 否 | 属于用户体验层面 |
| 行为边界约束(不做什么) | 否 | 属于 alignment 范畴 |
| 提升事实问答准确率 | 是 | 论文核心结论 |
换句话说,ChatGPT 的 "You are a helpful assistant" 从来不是为了让它答题更准,而是为了定义产品行为边界和交互风格。
工程落地的实操建议
1. System Prompt 中角色设定的正确用法
应该用 persona 做的事:
- 约束行为边界:如 "你是一个客服助手,只回答与产品相关的问题,拒绝回答政治敏感话题"
- 控制输出风格:如 "用简洁专业的语气回答,避免使用 emoji"
- 定义能力范围:如 "你是一个 SQL 专家,用户给你自然语言,你输出 SQL"
- 注入领域上下文:如 "你服务于电商平台,以下是我们的退货政策:……"
不应该指望 persona 做的事:
- ❌ 期望 "你是一个数学教授" 就能让模型数学题做得更好
- ❌ 期望 "你是一个资深律师" 就能提升法律问题的准确率
- ❌ 用各种花哨角色做 prompt engineering 来提分
2. 想真正提升准确率,应该用什么?
论文揭示了 persona 在准确率上的无效性,但工程上有很多真正有效的手段:
| 策略 | 有效性 | 适用场景 |
|---|---|---|
| Few-shot 示例 | ★★★★★ | 有标注样本时,直接在 prompt 中给出几个示例 |
| Chain-of-Thought | ★★★★★ | 推理类任务,加 "Let's think step by step" |
| RAG ( 检索增强生成 ) | ★★★★★ | 需要准确事实的场景,注入外部知识 |
| 结构化输出约束 | ★★★★☆ | 要求输出 JSON/表格等结构化格式 |
| Tool Use / Function Calling | ★★★★☆ | 需要精确计算、查询等操作 |
| System Prompt 中写角色 | ★★☆☆☆ | 仅对风格/安全有效,对准确率几乎无效 |
3. 推荐的 System Prompt 结构
# 角色定义(控制风格和边界,不要期望提升准确率)
你是 XX 产品的智能助手,服务于 XX 场景。
# 行为约束(真正有价值的部分)
- 遵循以下规则:……
- 不得回答以下类型的问题:……
# 领域知识注入(比角色设定有效得多)
以下是你需要掌握的业务规则:
1. ……
2. ……
# 输出格式要求
请以 JSON 格式返回结果,包含以下字段:……
# Few-shot 示例(真正提升准确率的手段)
示例 1:用户输入 → 期望输出
示例 2:用户输入 → 期望输出
4. 一句话总结
Persona 是"化妆品",不是"药"。 用它来定义产品的"脸面"(风格、边界、安全),但不要指望它治病(提升准确率)。真正想提升性能,靠的是 Few-shot、CoT、RAG 和 Tool Use。
论文对你日常工作的启示
作为服务架构方向的工程师,如果你在做 LLM 应用落地,关键 takeaway 是:
- 不要在 prompt 调优上过度纠结角色描述的措辞——把时间花在构建更好的 RAG pipeline、设计更精准的 few-shot 示例上,性价比远高于反复调角色
- System Prompt 的核心价值是行为约束和安全护栏,而非性能提升
- 如果有人说"换个角色 prompt 准确率就上去了",大概率是随机波动——论文证明了这种效果在统计上不可靠且不可预测