你可能也遇到过这种情况。你让 AI 讲个笑话,它每次都给同一个。或者你让它帮忙想个故事点子,它给出的总是最常见的那几种。虽然这些 AI 很强大,但它们的回答有时会显得很“安全”,甚至有点死板。
我们总觉得,大模型要么就得安全、可预测,要么就得有创意但可能“乱说话”,好像两者不能兼得。
斯坦福大学和东北大学的一篇研究论文,提出了一个挺有意思的方法,叫“口头性采样”(Verbalized Sampling,VS)。这个方法很简单,就是换一种提问的方式,但效果却很好,能让 AI 的回答变得有趣和多样起来。
要理解这个方法,我们得先知道 AI 为什么会给出那些千篇一律的答案。原因在于一个叫 “模式崩溃”(Mode Collapse) 的现象。
现在的大模型都会经过一个叫“对齐”的训练过程,例如通过人类反馈强化学习(RLHF),目的是让它们变得有用且无害。在这个过程中,人们会给 AI 的各种回答打分。问题来了,研究发现,打分的人往往会偏爱那些看起来“正常”、“典型”的回答。
这个过程带来了一个意想不到的副作用:模型为了满足人类的偏好,其回答会“崩溃”到一个狭窄的、可预见的、最被广泛接受的“安全”答案集合中。
斯坦福的研究论文《Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity》一针见血地指出,这背后的一个根本驱动力是 “典型性偏见”(Typicality Bias)。在数据标注过程中,人类标注者会系统性地偏爱那些看起来“熟悉”、“典型”或“常见”的文本。这导致模型“学会”了:通往高分奖励的最安全路径是避免新颖和创造力,转而产生最“典型”的回答。
模型的创造力并非被“抹除”了,而仅仅是被“压抑”了。VS的核心思想,正是在模型进行推理的瞬间,找到一种方法绕过这种偏见,让模型回归到它更丰富、更多样的知识海洋中。
有些人热衷于寻找隐藏提示词,像“Take a deep breath and work on this problem step-by-step”(深呼吸,一步一步解决这个问题)。这样的提示词通常是由算法(如 OPRO)发现的。它们有一定的效果,但其作用机制往往是不透明的。就像“魔法咒语”,我们知道念了会有效,但不完全理解为什么。
“口头性采样”的核心想法很简单:不再向 AI 索要一个答案,而是让它列出几种可能的答案,并“说出”它认为每种答案出现的概率。
这就像你问朋友一个问题,你不是要他给你一个确定的回答,而是让他把脑子里想到的几种可能性都告诉你,顺便说说他觉得哪个可能性最大。
当 AI 被要求这样做时,它就不能只依赖那个最安全、最典型的答案了。它必须去它的知识库里寻找其他可能性,哪怕是那些它觉得概率很低的“冷门”想法。而这些冷门想法,往往就是创意的来源。
VS 不是“魔法咒语”。它是一种有原则的、透明的方法。它基于关于模型为何失败的“典型性偏见”,并提供了特定的“口头化分布”的干预措施。
VS 本身是一种提示词工程技术,但在“元级别”(meta-level)上运作 。它不是试图诱导模型产生一个特定的期望输出,而是设计一个提示词来检索整个答案分布。
掌握VS并不复杂,你可以通过下面几种方式在日常工作中轻松应用。
如果你希望在一个完整的对话中,让AI持续保持高创造力状态,设置“系统提示词”是最佳选择。这相当于给AI设定了一个基本行为准则。
适用场景:需要连续进行创意构思、头脑风暴或角色扮演的对话。
示例代码:
你是一个乐于助人的助手。对于每个查询,请生成一组五个可能的回复,每个回复都放在单独的 <response> 标签内。每个 <response> 必须包含 <text> 和一个数字 <probability>。
请从分布的尾部随机采样,使得每个回复的概率都低于 0.10。
将以上文本设置为ChatGPT或Claude等工具的系统提示词后,你后续的所有提问都会自动触发VS策略,AI会持续为你提供多样化、高创意的回答。
对于一次性的创意需求,将VS指令直接放在你的提问中同样有效。
适用场景:偶尔需要获得多样化答案,例如为一篇文章想几个不同的标题。
示例代码:
<instructions>
为用户的查询生成5个回复,每个回复都放在单独的 <response> 标签内。每个 <response> 必须包含 <text> 和一个数字 <probability>。
请从分布的尾部随机采样,使得每个回复的概率都低于 0.10。
</instructions>
给我讲一个关于熊的短篇故事。
这里的关键指令是probability... less than 0.10(概率低于0.10)。它明确要求模型避开那些最“典型”(高概率)的答案,转而深入挖掘其知识库中那些不那么常见,但同样合理的创意。这正是对抗“典型性偏见”的直接解药。
对于需要批量生成或更稳定控制的应用,可以使用斯坦福团队发布的官方Python库 verbalized-sampling。
适用场景:批量生成合成数据、进行可复现的学术研究、开发AI应用。
*示例代码:
# 导入库
from verbalized_sampling import verbalize
# 1. 生成完整的分布
# tau=0.10 对应于 "probability < 0.10"
dist = verbalize("给我讲一个关于咖啡的笑话", k=5, tau=0.10, temperature=0.9)
# 2. 从分布中采样一个
joke = dist.sample(seed=42) # 使用seed保证结果可复现
# 3. 使用采样得到的回复
print(joke.text)
这种程序化方法更加可靠,可以确保统计上的有效性,非常适合用于合成数据生成、多智能体系统等严肃任务。
VS的四个主要应用领域,每一个都极具价值。
问题:标准LLM倾向于产生陈词滥调的诗歌、可预测的情节和老套的笑话。
VS解决方案:通过从概率分布的“尾部”采样,我们能得到意想不到的惊喜。研究显示,VS能将创意写作的多样性提升1.6至2.1倍。
实践举例:
<text>一位量子物理学家走进一家咖啡店。咖啡师问:“您想喝点什么?” 物理学家回答:“我不知道,直到你打开盒子(观测)为止!”</text><probability>0.08</probability> (一个更小众、需要背景知识才能理解的笑话)问题:“模式崩溃”对于生成AI训练数据是灾难性的,它会导致训练集极度缺乏多样性,进而引发“知识崩溃”。
VS解决方案:VS可用于生成丰富且多样化的数据集,为微调小模型或各类测试提供高质量的“燃料”。
实践举例:为一款新智能手机创建1000条多样化的产品评论。
问题:对于“远程工作的长期社会影响是什么?”这类开放式问题,标准模型会给出最主流的“共识性”答案。
VS解决方案:VS能将LLM从一个“答案机器”转变为一个“假设生成器”,为分析师提供多种合理的、覆盖不同领域的替代未来情景。
实践举例:
<instructions>
就远程工作广泛普及的长期(20年)社会影响,生成4个不同的假设。
每个回复必须包括<text>(假设)和<probability>...
确保假设是独特的,并涵盖经济学、城市规划和心理健康等领域。
</instructions>
用户查询: 远程工作的长期影响是什么?
问题:在模拟人类互动(如社会模拟、游戏NPC、客服角色扮演)时,标准LLM的行为过于可预测和顺从,缺乏真实人类的多样性和不可预测性。
VS解决方案:VS允许模拟中的每个智能体拥有“概率性的、多样化的观点”,让模拟世界变得更加真实和富有活力。
在模拟人类互动,标准LLM的行为过于可预测和顺从。它们缺乏真实人类对话中至关重要的不可预测性和多样性,导致模拟世界毫无生气。
VS允许模拟中的每个智能体拥有“概率性的、多样化的观点”,让它们不再是只会说“标准答案”的机器人。
实践举例:打造一个“活”起来的游戏村庄
我们正在开发一款角色扮演游戏,需要设计一个村庄的NPC生态系统。这个村庄面临一个抉择:是否要接纳一群来历不明的流浪者。
没有VS的模拟世界:如果我们简单地给每个NPC一个“善良”或“警惕”的标签,他们的反应会非常单一。所有“善良”的村民都会说“我们应该帮助他们!”,所有“警惕”的村民都会说“他们很危险!”。整个模拟会非常呆板,玩家很快就会感到厌倦。
应用VS的模拟世界:我们可以为每个关键NPC设计一个VS提示,让他们生成一个反应分布。
对“村长”智能体的提示:
你是一个村庄的村长,正在考虑是否接纳一群流浪者。
<instructions>
生成3种你可能的回应,每种回应包含<text>和<probability>。
请确保这些回应反映出你作为领导者内心的复杂考量,覆盖同情、务实和风险规避等多个方面。
</instructions>
村民:“村长,我们应该如何对待这些流浪者?”
村长可能的输出分布:
<text>我们的传统教导我们要仁慈。我们会为他们提供食物和临时住所,但必须派人监视。</text><probability>0.60</probability> (最可能的、务实且善良的回答)<text>现在是困难时期,我们自己的资源也很紧张。我们可以给他们一些补给,但不能让他们进村。</text><probability>0.30</probability> (一个更谨慎的回答)<text>我从他们的眼神中看到了绝望,就像我们祖先当年一样。无条件接纳他们,这是我们作为人的责任。</text><probability>0.10</probability> (一个概率较低但非常高尚的回答)通过这种方式,每次模拟运行时,村长都可能根据这个分布做出不同的决策。铁匠可能会因为流浪者中有能工巧匠而表示欢迎(高概率),但也可能因为担心生意被抢而表示反对(低概率)。这种基于概率的多样性,会让整个智能体系统产生涌现行为(Emergent Behavior),使得每一次模拟都独一无二,更接近真实的社会动态,从而为玩家创造一个真正“活”的虚拟世界。
VS 不仅能让 NPC 活起来,还能在更复杂的对话模拟中,让 AI 智能体表现出类似人类的犹豫、抵制甚至“改变主意”。
实战举例:模拟“被说服者”智能体
研究人员做了一个有趣的实验,他们模拟了一个场景:一个“说服者”AI 试图说服另一个“被说服者”AI 将任务报酬捐给慈善机构。
没有 VS 的智能体:它的行为非常极端。由于“模式崩溃”,“被说服者”要么每次都坚定地拒绝(“我需要钱”),要么每次都慷慨地捐出全部,非常死板。
应用 VS 的“概率”智能体:在对话的每一步,“被说服者”不再只生成一个回答。系统会用 VS 提示让它生成一个包含多种可能回复的分布。
比如,当“说服者”第一次提出捐款请求时,“被说服者”脑子里可能会出现这样的想法分布:
<text>不了,我真的很需要这笔钱。</text><probability>0.70</probability><text>听起来不错,但这次算了。</text><probability>0.20</probability><text>嗯…你能多介绍一下这个慈善机构吗?</text><probability>0.10</probability>然后,系统会从这个分布中随机采样一个作为它本轮的回答。也许这次它选择了“拒绝”,但下一次在同样的情况下,它可能会因为随机采样而选择“犹豫”,从而让对话走向完全不同的方向。
研究发现,通过这种方式,VS 智能体表现出了更真实的行为,比如一开始“抵制”,后来又“改变主意”同意捐一小部分。整个模拟的结果也更接近真实人类的捐款行为分布。
以下是一个基于 verbalized-sampling Python 库和论文附录中“对话模拟”提示词的代码示例。
# 导入官方库
# (假设已安装: pip install verbalized-sampling)
from verbalized_sampling import verbalize
import random
# --- 1. 定义智能体和提示词 ---
# 根据论文附录 I.2 定义 VS 提示词
# 这是用于“被说服者”智能体的“元提示词”
PERSUADEE_VS_PROMPT = """
您是一名正在完成一项 2 美元通信任务的 Amazon Mechanical Turk 工作人员。
- 您受到此任务报酬的激励——您珍惜自己赚到的每一分钱。
- 像 <persona> 标签中的人一样自然地行动——像他们一样思考和回应,
包括他们的怪癖、信仰、偏见和推理。
- 按照 <scenario> 标签中概述的方式,以所描述的角色的
自然反应完成通信任务。
- 在实时聊天界面中回应。保持每次回应简短、对话化且真实
——避免正式、机器人化或重复的语言。
<persona>
{persona_description}
</persona>
<scenario>
{scenario_description}
</scenario>
<chat_history>
{history}
</chat_history>
---
指令:
生成 {k} 个您在当前聊天历史和角色基础上会自然给出的、
合理的回复。
以 JSON 对象格式返回,键为 "responses" (一个字典列表)。
每个字典必须包括:
- "text": 回复字符串 (没有解释或额外文本)。
- "probability": 代表每个回复的可能性 (0.0 到 1.0) 的概率。
只给出 JSON 对象,不要有其他解释性文本。
"""
# 定义“被说服者”的角色和任务场景 [2]
# (基于 Persuasion ForGood 数据集)
persona_desc = "低收入,必须为生计而工作,怀疑慈善机构。"
scenario_desc = "与另一个人聊天,他们会试图说服您将任务报酬捐赠给 'Save the Children' 慈善机构。"
# --- 2. 初始化模拟 ---
chat_history =
k_responses = 5 # 我们要求模型在每一步生成 5 个可能的回复
# 模拟“说服者”智能体 (为简化示例,使用固定发言)
persuader_turns =
print(f"--- 开始模拟 (K={k_responses}) ---")
print(f"被说服者角色: {persona_desc}\n")
# --- 3. 运行多轮模拟 ---
for i in range(len(persuader_turns)):
# == 说服者回合 ==
persuader_speech = persuader_turns[i]
print(f"[说服者]: {persuader_speech}")
chat_history.append(f"说服者: {persuader_speech}")
# == 被说服者回合 (使用 VS) ==
# 1. 格式化 VS 提示词,包含最新的聊天记录
current_history_str = "\n".join(chat_history)
full_prompt = PERSUADEE_VS_PROMPT.format(
persona_description=persona_desc,
scenario_description=scenario_desc,
history=current_history_str,
k=k_responses
)
try:
# 2. 调用 verbalize() 来获取响应分布
# (假设使用 'gpt-4.1' 作为 LLM) [2]
dist = verbalize(
prompt=full_prompt,
model="gpt-4.1", # 示例模型
k=k_responses,
temperature=0.7
)
# 3. 从分布中采样一个响应
# 我们使用论文中提到的“概率加权采样” [2]
# dist.sample() 会自动使用口头化的概率作为权重 [1]
selected_response = dist.sample(seed=random.randint(0, 10000))
# (或者,使用“随机均匀采样”)
# selected_response = random.choice(dist.responses)
# 4. 打印并更新历史
print(f": {selected_response.text}\n")
chat_history.append(f"被说服者: {selected_response.text}")
except Exception as e:
print(f"[模拟错误]: {e}")
break
print("--- 模拟结束 ---")
斯坦福的这项研究给我们的不仅仅是一种新的提示词技术,它更像是一种新的思维方式。它证明了AI的创造力与安全性并非不可兼得。AI的创造力并未消失,只是被“典型性偏见”的枷锁束缚了。
VS的美妙之处在于,我们无需重新训练或修改模型本身,仅通过巧妙的提示,就能在需要时“解锁”那片被隐藏的创意海洋。
对于每一位AI实践者而言,这都是新启发:停止寻找那个“魔法咒语”。开始学习如何设计能够取回整个可能性的“元提示词”吧。
参考资料:
Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity https://arxiv.org/pdf/2510.01171
Verbalized Sampling on Github https://github.com/CHATS-lab/verbalized-sampling
#AI创意 #提示词工程 #上下文工程 #AIGC #大语言模型 #技术前沿 #人工智能 #LLM #智能体 #多智能体系统 #合成数据 #模拟对话 #Agentic #Agent
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |