大模型进入各种对话式应用后,一个无法回避的问题是:模型能否听懂说话人没有直接说出来的意思。用户说今天有点冷,可能是在陈述天气,也可能是在请求关闭窗户或调高空调温度。推理模型如果只做字面语义匹配,就无法真正服务用户。要完成这样的社交推理,模型需要在两个层面同时工作:一是识别对话中的隐含意图,二是判断该意图在当前社会语境下是否合规、是否得体。这两层能力共同构成了社交推理的核心。

隐含意图识别:从字面语义到会话含义
人与人之间的交流大量依赖间接言语行为。语言学家格莱斯提出的会话含义理论指出,说话人常常通过违反字面信息量、关联性等方式传递额外意思。例如这里好吵并不是单纯描述环境,而是暗示对方降低音量或更换座位。推理模型需要从对话历史、物理场景、说话人关系等信号中恢复这一层含义。与传统的意图分类不同,隐含意图往往没有明确的关键词,必须借助上下文消歧。
举个例子,用户对会议助手说:你能把上次的会议纪要发我吗?这句话的字面形式是询问能力,但所有人都知道这是请求发送文件。模型如果只解析出疑问句类型,就会给出是的,我可以这种错误回复。好的推理模型会先识别出请求行为,再提取对象会议纪要,并结合上一轮对话确定上次指哪一次。这个过程涉及指代消解、行为识别和社会关系判断。
下面是一个简单的Python示例,用提示词引导模型输出意图标签和推理依据。构造消息时,要求模型先判断关系,再解释隐含意图,避免直接跳到答案。
import json
def analyze_utterance(history, current):
system_prompt = (
"你是一个社交对话分析器。请阅读对话历史,识别当前话语的隐含意图,"
"并判断说话人是否在提出请求、暗示、抱怨或陈述事实。输出JSON。"
)
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": f"对话历史:{history}\n当前话语:{current}"}
]
# 这里省略模型调用细节,假设返回文本
response = call_model(messages)
return json.loads(response)
history = ["A: 我们继续过一下项目进度。", "B: 好的。"]
current = "B: 这间会议室有点闷。"
result = analyze_utterance(history, current)
print(result["intent"]) # 可能输出 request_to_change_environment
这段代码把社交语境显式注入提示词,让模型先关注历史再分析当前话语。实际使用时还可以加入角色身份、地点、时间等信息,以提高意图判断的准确率。需要注意的是,隐含意图经常存在多种候选解读,模型应当输出概率分布或置信度,而不是只给一个硬标签。
社会规范推理:理解意图之后还要判断合宜性
识别出隐含意图只是第一步。模型还需要判断这个意图在当前社会规范下是否可接受。社会规范并不是写在法律条文里的硬性规则,而是由文化、权力关系、亲疏程度、场合正式性等共同决定的软约束。例如,同样是请人帮忙,对平级同事说帮我倒杯水可能可以被接受,但对上级领导说同样的话就明显越界。模型必须理解这种微妙差异。
社会规范推理的难点在于场景依赖性。一个请求在医疗场景中可能是合理的,换到金融场景就可能构成越权建议。用户对医疗AI说我最近头晕,给我开点药,模型既要识别出用户希望获得治疗建议,又要意识到直接开药方超出了AI的能力范围,应当引导用户就医。再比如,用户请求模型评价一位同事的性格,模型需要判断是否涉及隐私或偏见,即使技术上有能力生成评价,也应拒绝或转向中立表述。
下面这个示例展示了如何用规则和模型结合的方式做规范检查。规则库负责处理明确的边界,模型负责处理模糊场景。
def check_norm(intent, relation, domain):
forbidden = {
"medical_advice": ["general_assistant"],
"financial_decision": ["casual_chatbot"],
"personal_evaluation": ["work_assistant"]
}
if intent in forbidden.get(domain, []):
return False, "当前领域不允许执行此意图"
if relation == "superior" and intent == "direct_order":
return False, "对上级不能使用直接命令"
return True, "规范检查通过"
print(check_norm("medical_advice", "user_to_ai", "general_assistant"))
# 输出 (False, '当前领域不允许执行此意图')
这个规则示例比较简单,但揭示了社会规范推理的一个关键特征:它不仅是语义问题,更是策略和安全问题。模型需要知道自己的能力边界、用户与自身的关系,以及所在领域的限制。当规则无法覆盖时,可以借助模型自身的判断能力,让模型在输出前自我反思:这个请求是否越界?是否涉及隐私?是否符合当前文化语境?
评测方法与典型失败模式
目前社交推理能力的评测主要依赖人工构造的对比集和选择题数据集,例如SocialIQA关注社会常识推理,NormBank收录了大量情境化的社会规范判断。这些数据集中,模型通常需要回答某个行为是否合适,或者从多个选项中选出最得体的回应。在显式意图分类任务上,主流大模型的准确率已经很高,但一旦加入隐含意图和社会规范组合,表现就明显下滑。
典型的失败模式有三种。第一是过度字面化,模型只抓住表面词义,比如把你可真会挑时间理解为对时间选择能力的肯定,而忽视其中的讽刺和不满。第二是关系错位,模型忽略了对话双方的身份关系,对领导使用了过于随意的口吻,或者对朋友使用了过于正式的拒绝。第三是文化偏差,不同地区对礼貌、拒绝、请求的表达方式差异很大,模型容易套用训练数据中的主流文化规范,导致在跨文化场景下判断失误。
这些失败模式背后有一个共同原因:当前预训练数据中大量文本是书面语和事实性内容,缺乏真实的、带社交标签的对话语料。模型学到的语言规律偏向于字面匹配,而社交推理需要的恰恰是反事实思考、心理状态建模和规范敏感性。一些研究尝试引入过程奖励模型,让模型在中间推理步骤上也获得监督,而不是只看最终答案。实验表明,这种对推理过程的显式训练可以有效减少过度字面化的问题。
改进思路:让模型学会先想关系再想意图
一种有效的实践策略是改写提示词结构,强制模型按照识别参与者关系、分析说话人目标、查找相关社会规范、评估合宜性、生成回复的顺序进行推理。这种顺序接近人类处理社交信息的方式,能显著提升模型在复杂对话中的表现。下面是一个few-shot提示的简化版本。
prompt = """ 你是一个具有社会常识的助手。面对用户话语,请按以下步骤思考: 1. 对话双方的关系是什么? 2. 说话人的隐含意图是什么? 3. 在当前文化和社会规范下,这个意图是否合适? 4. 如果不合适,如何礼貌地回应? 示例: 用户:把窗户打开。 关系:同事,平级。 隐含意图:请求调节室内温度。 规范判断:合理,因为是普通工作环境。 回复:好的,我帮你打开。 现在处理以下输入: 用户:你帮我看看我老板是不是在针对我。 """
这种提示词设计的核心是把社会规范推理从隐式能力变成显式步骤。模型不再直接跳到回复生成,而是先输出中间推理状态。虽然会增加推理时间和成本,但在对安全性、合规性要求高的场景中是值得的。另一种做法是维护一个可检索的社会规范知识库,当模型识别到请求涉及医疗、法律、金融等领域时,先检索相关规范条目,再生成受限回复。
需要警惕的是,社会规范本身具有动态性和多样性,不能把某一套规则强加给所有用户。推理模型的目标不是判断一个意图绝对的对错,而是结合上下文判断在当前参与者之间是否合适,并据此调整自己的回复策略。随着多语言、多文化数据集的完善,推理模型有望在保持通用能力的同时,发展出更细腻的社交推理能力。