你让模型”讲一下 Postgres 连接池怎么工作”。回来 800 字,受众是……不知道是谁。它定义了什么是”连接”(对你想要的资深工程师太基础),说了”客户端/服务端架构”却始终不点 PgBouncer(对评审的 DBA 太泛),跳过了你真正需要的运维调优建议。模型在为一个虚构的”平均读者”写,而这个读者并不存在,所以谁也不喜欢。
受众是承重约束:它校准词汇、深度、示例和语气。一旦省掉,模型就选一个折中默认,既浪费基础又浪费深度。
最快修复: 在 prompt 顶部加一段 5 行的 ## 受众 块,写清读者的角色、已经知道什么、要跳过什么、读完去做什么。这一块就能把下面的一切校准好。Google 自家的技术写作指南也说,一个好 prompt 要点明三件事——角色(role)、目标受众(target audience)、文档类型(document type)(Google for Developers)。受众正是大家最常忘的那一个。
有一点值得先说清楚:像”You are a world-class expert”这种装饰性人设,在现代模型上几乎不起作用——在成千上万道事实题上做的对照测试发现,泛泛的角色标签并不能稳定提升准确率。真正起作用的,是会改变输出本身的受众细节:词汇、深度、跳过什么。指定受众是为了改变写法,不是为了奉承模型。
常见原因
1. Prompt 只关心主题,不关心读者
你写”解释 X”,但没说”给谁”。模型默认走”有教育背景但非专家”的虚构读者,那读者并不存在。
如何判断: prompt 点了主题,没点人。
2. 受众靠上下文暗示,而非明说
“我们的用户”或”团队”让模型只能猜是谁。你团队和模型训练集里的”团队”不是同一个。
如何判断: 受众被旁敲侧击(“给我们看的""内部用""老读者”)。
3. 多个受众塞进同一份
同一段同时服务初级和资深,每段都在妥协。输出变成”行话太多的教程”或”基础太多的参考”。
如何判断: 几个相关方各自对不同部分不满。
4. 没说”读者读完去做什么”
不说读完之后读者要干什么,模型就默认走”全面理解”,太宽。读者的目的,才是校准深度的东西。
如何判断: prompt 里没有读者的动词。
5. 没给该受众的语气示例
你写了受众,但没锚定语气。模型挑的默认语气,可能不符合你真实受众的口味。
如何判断: 受众对了,语气还是歪。
你属于哪一类
| 输出里的症状 | 最可能的原因 | 跳到 |
|---|---|---|
| 解释了读者早就懂的东西 | 没受众 / 受众太泛(1、2) | Step 1-2 |
| 事实对、用词错(该用的行话没用,或过度解释) | 词汇没校准(1) | Step 3 |
| 每个评审都圈出不同的一半 | 多受众塞同一份(3) | Step 5 |
| 全面但不可落地 | 没给读者”下一步动作”(4) | Step 1(Next action 行) |
| 受众对了但口吻不对 | 没有语气锚(5) | Step 4 |
动手前先确认
- 用 5 个词说清真实读者:角色 + 经验 + 当前任务。
- 找出他们已经知道什么(好让你告诉模型跳过)。
- 标出读完他们要做什么。
- 找一句他们认为”在自己语气里”的写作。
- 多受众时,先挑出主受众。
需要收集的信息
- 当前 prompt。
- 层级歪掉的那份输出(留作反例)。
- 真实受众:角色、级别、上下文。
- 读完应该能做什么。
- 他们喜欢或不喜欢的过往内容,用来当语气锚。
最短修复路径
Step 1:加一块受众块
## 受众
角色:fintech 资深后端工程师
已知:SQL 熟练,跑过生产 Postgres,调过连接池
不知道:PgBouncer 内部细节
下一步:在 PgBouncer transaction-mode 和 session-mode 之间选
语气:同行对话、不哄、术语默认懂
(后文按此写。)
一块就能校准词汇、深度、示例和语气。其中”下一步”这一行最吃重——它告诉模型目的,而目的正是界定深度的东西。把这块写成一个带标题的小节;2026 年大家都用带标题的结构化 prompt 是有原因的:模型会把 ## 受众 当成约束,而不是当成可以随意改写掉的散文。
Step 2:说明跳过什么
不要:
- 解释什么是数据库连接。
- 讲 SQL 是什么。
- 用"从基础开始"这种句式。
- 类比 MongoDB。
要:
- 直接用 Postgres 特定术语(WAL、MVCC、prepared statement),不定义。
- 直接点 PgBouncer 配置参数名(pool_mode、default_pool_size、max_client_conn)。
- 给行级配置建议,不要散文。
负向约束能防止基础悄悄溜回来。这里它比正向约束更可靠:因为”为专家写”仍给模型留了过度解释的空间,而”不要解释什么是连接”直接把这扇门关上。
Step 3:校准词汇
明确匹配读者的词汇:
- 专家: 用行话,不定义。定义反而暗示你觉得他们需要,等于轻视受众。
- 非专家: 每个术语首次出现就给定义。
- 混合: 放脚注或一个标注好的术语表小节,专家可以略读跳过。
如果你不确定受众认识哪些术语,就在 prompt 里列出 5-6 个候选术语,告诉模型哪些默认懂、哪些要解释。
Step 4:用语气样例锚定
语气锚(受众就是这样写、这样读的):
"高负载下连接池满了。切到 PgBouncer transaction 模式,
p99 降了 40%。注意 prepared statement 兼容性。"
按此语气写:直接、具体、无废话。
两句真实出自你受众之手的写作,胜过任何形容词(“专业""友好""技术”)。模型模仿样例,远比它遵循语气标签要稳。
Step 5:多受众就拆开
受众:主 = 资深工程师,副 = 初级工程师
第 1 节(给资深):运维调优、连接池大小的算法
第 2 节(给初级,明确标注):上文用到的术语词汇表
明确的标注让这份内容对两边都好用,又不逼任何一段去妥协。如果两个受众级别差得很远,干脆产两份——见下面”如果还是没修好”。
Step 6:找真实读者验证
在把这个 prompt 放量复用之前,先把一份输出发给真实受众里的人。他说”这是给我看的”,就算落地。如果他说”这明显是给别人看的”,说明你的受众块还是太虚——回到 Step 1,把缺的角色/级别/任务补上。
怎么确认已经修好
- 目标受众里的真实读者读完,说”这是给我的”。
- 词汇匹配他们实际在用的。
- 该跳过的基础跳过了,该默认的知识默认了。
- 读者能直接执行你声明的下一步(那个动词),不用追问。
- 输出语气和你的锚样本一致。
如果还是没修好
- 受众描述还是太虚。 在 角色 + 级别 + 任务 上更具体。“工程师”是虚的;“跑生产 Postgres、调过连接池的资深后端工程师”就不虚。
- 没有语气锚。 加一段他们喜欢的真实写作;模型模仿样例,比遵循形容词更准。
- 受众范围太宽。 收窄。受众越窄,输出校准得越准。“所有人”是最糟糕的受众。
- 是人设在硬撑,而不是细节在起作用。 如果你只加了”You are an expert”却毫无变化,这很正常——光一个角色标签很难撼动现代模型的输出。把具体性放进”跳过什么""默认哪些词汇""下一步动作”里。
- 确实是两个受众。 产两份,让每份都锋利。合并通常比用不同受众块跑两遍更差。
FAQ
对模型说”You are an expert”真的有用吗? 单独用,几乎没用。在成千上万道事实题上的对照测试发现,泛泛的角色标签并不能稳定提升准确率,到了 2026 年这批能力更强的模型上,效果接近于零。真正有用的,是会改变写法的具体受众细节:跳过什么、默认哪些术语、读者读完去做什么。把人设当成铺垫这些细节的引子,而不是它们的替代品。
受众应该写在 prompt 的哪个位置?
在顶部或靠前,作为任务之前的一个带标题 ## 受众 小节。模型会把它当成贯穿后文的常驻约束,而不是埋在 prompt 中段、和其余指令抢注意力的一句话。
受众要具体到什么程度? 具体到这段描述本身会改变输出。“跑过 Postgres 连接池调优的资深后端工程师”会让模型跳过基础、点名 PgBouncer 参数。如果换掉这行受众,一句话都不会变,那它就太虚了。
我确实有两个受众怎么办? 挑一个主受众把它服务好,再给另一个加一个明确标注的副小节(比如术语表)。如果两者级别差很远,就产两份独立输出。同一段文字无法在不亏待任何一方的前提下同时服务初级和资深。
受众对了,语气还是歪,怎么办? 加语气锚(Step 4):两句受众自己写的、或他们欣赏的真实写作。具体样例对模型的引导,远比”专业""友好”这类语气形容词稳。
“受众”和”人设(persona)prompting”是一回事吗? 不是。人设 prompting 是给模型分配一个角色(“act as a lawyer”)。受众指定是告诉模型读者是谁。是读者在校准词汇和深度,而且它是两者中更可靠的那个杠杆。
预防建议
- 默认:每个内容生成 prompt 都用一行写明受众。
- 给常见读者保留受众画像(资深工程师、创始人、设计师),用时直接粘进去。
- 审最近 5 个 prompt:有几个写了受众。少于 5 个,就是你的习惯空缺。
- 团队工作流里,把受众画像当成共享、可复用的资源来建。
- 把”通用受众”当成一种 smell。它通常意味着”我还没想清楚是给谁的”。
- 拿不准时,让模型先提 3 个受众候选,你挑一个。