1. 当AI回一句“它已经处理好了”,我们到底在听什么
先还原一个几乎人人都遇到过的场景。你让对话助手帮忙整理一份会议记录,它回了一句:“我已经把要点提取出来了,它主要涉及三个方向。”你盯着屏幕愣了两秒——**“它”是谁?**是那份会议记录?是提取出来的要点?还是它刚才顺手生成的某个中间产物?你往下翻,发现它后面又用了两次“它”,每次指代的东西好像还不太一样。
这不是个别现象。我在做对话系统评测和提示词调优的那段时间,收集过一批真实交互日志,粗略统计下来,含模糊代词的回复在长对话中的占比能到三成以上,而且越是多轮、越是涉及文件或结构化数据,代词歧义就越密集。标题里说的“AI说‘它’时在说什么”,问的其实是一个很硬核的问题:大模型在生成代词的那一刻,内部到底绑定到了哪个实体,这个绑定和我们人类读者的理解是否一致。
这件事的价值不在于吐槽AI说话含糊。往浅了说,它直接影响你读回复的效率,你得反复回翻上下文去猜;往深了说,代词消解(pronoun resolution)是衡量一段对话是否具备“深度交互”能力的试金石——一个系统能不能在第五轮、第十轮依然准确知道“它”指谁,背后是上下文建模、实体追踪、指代一致性维护这一整套机制在起作用。
这篇内容适合三类人看:一是天天和对话助手打交道、想搞明白怎么问才能少踩歧义坑的普通用户;二是在做提示词工程、想让模型输出更精确的从业者;三是对人机对话机制本身好奇、想理解“深度交互”到底深在哪的技术爱好者。我会从代词歧义的成因拆起,讲到实体追踪的机制、实测中发现的规律、可落地的规避手法,最后聊聊为什么“说清楚它”这件事,恰恰是深度交互的门槛。
需要先说明一点:下面涉及模型内部机制的描述,是基于公开的对话系统常见架构和我在实际评测中的观察做的合理归纳,不是某一家产品的内部文档;具体产品的实现细节会有差异,但歧义产生的逻辑和应对思路是通用的。
2. 代词歧义不是语病,是上下文绑定的信息丢失
很多人第一反应是“AI语文没学好”。这个判断偏了。人类说话也大量用代词,日常对话里“把它放那儿”照样能沟通,因为我们共享物理场景和即时意图。AI的问题不在于会不会用代词,而在于它用一个代词时,绑定的实体和我们脑补的实体可能不是同一个,而且它不会主动告诉你绑的是哪个。
2.1 一句话里三个“它”,绑定目标可能各不相同
拆一个我实测记录里的典型例子。用户上传了一份产品需求文档,提问:“帮我看看这份文档的逻辑有没有问题,顺便把风险点列出来。”模型回复:
我读完了这份文档,它的整体结构是清晰的。不过它在第三部分对并发场景的描述比较薄弱,建议补充。另外它提到的两个外部依赖,最好确认一下可用性。
三个“它”,第一个指整份文档,第二个指文档的第三部分,第三个指文档里提到的外部依赖。人类读者靠语义能勉强还原,但如果这段回复被截断、被转发、被二次引用,歧义立刻爆炸。更麻烦的是,当用户追问“你刚才说它薄弱,具体是哪段”时,模型有可能重新绑定到一个不同的实体上,于是对话开始漂移。
我把这类现象归为“代词绑定漂移”:代词在生成时绑定了一个实体,但在后续轮次中被重新解释。它不是语法错误,是上下文状态管理的问题。
2.2 为什么模型偏爱代词:概率与简洁的双重驱动
从生成机制看,模型输出代词有两个推力。一是语言模型的概率偏好:训练语料里,连续句子之间用代词衔接是高频模式,模型学到“提到过的实体,下一句用代词指代”是自然写法,于是它倾向于这么生成。二是简洁性激励:重复完整名词显得啰嗦,模型在“说清楚”和“说得顺”之间,默认偏向后者。
问题在于,人类用代词时有共享的注意力焦点——我们都知道刚才在聊什么,焦点是唯一的。而模型面对的上下文是一个扁平的 token 序列,多个实体同时“在场”,它没有一个天然的、唯一的焦点排序。当上下文里实体数量超过两三个,代词绑定的不确定性就显著上升。这解释了为什么短对话里代词很少出问题,长对话、多文件、多任务并行时歧义集中爆发。
2.3 歧义的代价:从阅读摩擦到任务失败
别小看这个摩擦。轻度影响是阅读效率——你得回翻、猜测、验证,一次交互多花十几秒。中度影响是误解导致的错误操作:模型说“把它删掉”,你以为是删临时文件,结果它指的是原始数据。重度影响出现在自动化流程里:如果一段含歧义代词的回复被下游程序解析,绑定错了实体,整条链路的结果都是错的。
我在做提示词模板评测时踩过一次实打实的坑。当时设计了一个多步骤任务:先让模型总结三份材料,再让它们交叉比对。模型在比对环节写“它和它的结论冲突”,我按字面理解成第一份和第三份冲突,实际它指的是第二份和第三份。因为这一步判断错了,后面整段分析我都读歪了,白折腾半小时。从那以后,我在所有多实体任务里都强制要求模型用实体名称替代代词,这个习惯后面会详细讲。
3. 实体追踪:深度交互真正的技术分水岭
如果说代词歧义是症状,那实体追踪能力就是病灶所在。一个对话系统能不能在长上下文里稳定记住“有哪些实体、每个实体当前是什么状态、代词该绑谁”,决定了它是“能聊”还是“聊得准”。
3.1 上下文窗口不等于实体记忆
这里有个常见误解需要澄清:很多人以为上下文窗口够大,模型就能记住所有实体。窗口大只代表信息“在场”,不代表信息被“结构化地组织”。打个比方,上下文窗口像一个摊满文件的桌面,文件都在,但你问“刚才那份合同的甲方是谁”,得有人真的去翻、去认。模型的注意力机制会做某种程度的关联,但这种关联是概率性的、非显式的,实体一多就会互相干扰。
我做过一个对照测试:同样一段包含六个实体的材料,分别用“直接提问”和“先让模型列出实体清单再提问”两种方式。后者在代词指代的准确率上明显更稳。原因不复杂——显式列出实体清单,相当于帮模型把桌面上的文件贴了标签,后续代词绑定有了锚点。这个发现后来成了我设计多轮提示词的固定动作。
3.2 指代一致性的三个观察维度
在实际评测里,我用三个维度来判断一个系统的实体追踪水平,这套框架你也可以拿来自己测:
| 维度 | 观察什么 | 典型失分表现 |
|---|---|---|
| 跨轮稳定性 | 同一实体在第五轮、第十轮是否还被正确指代 | 前面叫“方案A”,后面“它”绑到了方案B |
| 多实体区分度 | 同时存在多个同类实体时能否区分 | 三个文件都叫“它”,无法还原 |
| 状态同步性 | 实体被修改后,代词是否指向更新后的状态 | 文件已删,回复仍说“它里面提到” |
这三个维度里,跨轮稳定性是最容易暴露问题的。短对话测不出来,必须拉到足够长的交互里。我的做法是设计一个“埋点测试”:在第三轮引入一个实体,在第八轮用一个代词回指它,看模型绑得准不准。十次里错三次以上,这个系统在多实体长对话里就得小心用。
3.3 为什么“深度交互”卡在这里
回到标题里的“深度交互”。什么叫深度?不是回复长、不是语气像人,而是系统能在多轮、多任务、多实体的复杂状态里保持语义一致。代词指代恰恰是这个能力最敏感的探针——它要求系统不仅记住实体,还要维护实体之间的关系、状态变化、以及“当前对话焦点在哪”。
人类在这方面很强,因为我们有工作记忆和注意力焦点机制,聊着聊着焦点会自然收敛。模型没有这套生物机制,它靠的是注意力权重和上下文位置编码,实体一多、轮次一长,焦点就散了。所以你会看到:越是复杂的任务,模型越倾向于用模糊代词,因为它自己也没把握绑得准,用代词反而“安全”——说错了不容易被抓包。这个观察有点反直觉,但在我收集的日志里反复出现。
4. 实测出来的歧义高发区与规避手法
光讲机制不够,得给能直接抄作业的东西。下面这几类场景是我实测中歧义最密集的,每一类配一个具体的规避手法,都是我在实际交互里验证过有效的。
4.1 多文件、多材料并行时的“它”
这是重灾区。你一次给模型三份材料,让它对比,回复里全是“它”“前者”“后者”。规避的核心是在提问时就锁定指代规则。我的固定句式是:
下面有三份材料,分别标记为【材料A】【材料B】【材料C】。回复中请始终使用标记名称指代,不要使用“它”“前者”等代词。
实测下来,加了这句约束,代词出现率能压到很低,而且模型会主动用标记名。代价是回复稍微啰嗦一点,但可读性和准确性提升明显。如果模型偶尔还是漏了,追问一句“你刚才说的‘它’指哪份材料”,通常能纠正回来,但别指望它每次都自我纠正,所以前置约束比事后追问划算。
4.2 多步骤任务里的“它”指上一步还是上上步
做流程类任务时,模型经常说“基于它的结果继续处理”。问题是“它”是上一步的中间产物,还是更早的原始输入?这类歧义在自动化场景里最危险。我的处理办法是给每一步编号并要求回指编号:
任务分三步:步骤1提取要点,步骤2基于步骤1的结果做归类,步骤3基于步骤2的结果生成报告。回复中请明确写“基于步骤X的结果”。
这样模型被迫显式声明依赖关系,歧义基本消失。这个技巧的本质是把隐式的上下文依赖变成显式的结构化引用,对模型和对你都更友好。
4.3 对话被截断或转发后的代词悬空
还有一种隐蔽的坑:一段回复单独看没问题,但被复制到别处、或者对话被截断后,代词就悬空了。比如“它已经处理好了”这句话脱离上下文完全没法用。这不是模型生成时的错,是代词天然不可移植。我的建议是,凡是可能被二次引用的回复,都要求模型在关键结论处重复实体名称。可以在提示词里加一句:
在给出结论或建议时,请重复相关对象的完整名称,确保回复可以脱离上下文独立阅读。
这条对写文档、写报告类任务特别有用。我现在的习惯是,只要输出会被存档或转发,就一定加这个约束。
4.4 一个反直觉的发现:追问“它指什么”有时会让情况更糟
这条是我踩坑踩出来的。早期遇到歧义,我的本能是追问“你刚才说的‘它’具体指什么”。结果发现,部分情况下模型会重新生成一个解释,但这个解释和它原本的绑定未必一致——它可能为了回答你的追问,临时构造一个合理的指代,而不是还原真实的内部绑定。也就是说,追问得到的答案可能是“事后合理化”,不一定是真相。
所以现在的做法是:与其追问它指什么,不如直接要求它重写那句话,用实体名称替换所有代词。重写是生成任务,模型在生成时会重新做绑定决策,结果通常比“解释”更可靠。这个区别很微妙,但实测有效。
5. 从“说清楚它”反推:什么样的提问能让AI少打哑谜
前面讲的是怎么应对已经出现的歧义。更高一层的思路是从提问端就压缩歧义空间。我总结了一套“防歧义提问三原则”,不是什么高深理论,就是实打实能减少来回折腾的习惯。
5.1 原则一:实体先命名,再使用
任何涉及多个对象的提问,第一步永远是给对象起名字。不要用“这个”“那个”“上面那个”,用【方案一】【方案二】或者干脆用它们的核心特征命名。这看起来是小事,但它改变了模型处理上下文的起点——有了名字,实体就有了稳定的锚点,后续所有指代都有据可依。
我对比过两种问法。问法一:“帮我对比这两份方案,看看哪个更好。”问法二:“帮我对比【方案A:低成本版】和【方案B:高性能版】,分别从成本和性能两个维度评估。”后者的回复质量明显更高,而且几乎不出现模糊代词。差别不在模型能力,在输入的结构化程度。
5.2 原则二:把“它”换成“哪个它”的预判
提问时预判模型可能在哪里用代词,提前堵住。比如你问“这份文档有什么问题”,模型很可能回“它在某处有逻辑漏洞”。你可以在提问时就写:“请指出文档中具体章节的问题,用章节标题指代,不要用‘它’。”这是把事后纠错变成事前约束,省掉一轮来回。
这个原则的底层逻辑是:模型的输出风格很大程度上被输入措辞塑造。你输入里全是精确的名词,它输出也倾向精确;你输入里全是“这个那个”,它输出也跟着含糊。所谓“垃圾进垃圾出”,在代词问题上体现得特别明显。
5.3 原则三:长对话定期“重新锚定”
多轮对话超过一定长度后,实体记忆会衰减,这是机制决定的,不是模型“不用心”。我的做法是每隔几轮主动重新锚定一次:把当前涉及的关键实体和状态简短复述一遍,比如“当前我们讨论的是【材料A】和【材料B】,已完成要点提取,接下来做比对”。这一句话相当于给模型刷新了一次焦点,后续代词的准确率会回升。
实测下来,这个“重新锚定”动作在超过八轮的对话里效果最明显。它有点像开会时主持人中途小结一下“我们现在到哪了”,成本很低,收益很高。
6. 代词这件小事,照见的是人机协作的信任边界
聊到这儿,我想把话题往上提一层。代词歧义看起来是个语言细节,但它触及的是人机协作里一个更根本的问题:我们凭什么相信AI说的“它”就是我们想的那个“它”?
人类之间用代词,靠的是共享的注意力和可随时澄清的对话机制——你说“它”,我理解错了,你立刻能看出来并纠正。而AI不会主动说“我这里的‘它’指的是第三段那个依赖项”,它默认你懂。这种单向的、不透明的指代,在简单任务里无伤大雅,在复杂任务里就是信任的裂缝。你不知道它绑对了没有,只能靠结果反推,而结果错了往往已经晚了。
所以“深度交互”的深,不在于模型能聊多少轮,而在于它愿不愿意、能不能够把内部的指代关系摊开给你看。一个真正可靠的对话系统,应该在关键节点主动消歧——“这里的‘它’我指的是材料B的第三部分”——而不是把消歧的成本全丢给用户。目前多数系统还做不到这一点,这也是为什么我在实际工作里,宁可让模型啰嗦一点、多重复几次实体名,也不让它图省事用代词。
我个人的体会是,把AI当成一个记性不错但表达偏懒的协作对象来对待,是最省心的姿势。你不能指望它每次都把话说全,但你可以通过提问方式、约束条件、定期锚定这些手段,把它的表达逼到足够精确。这套方法不依赖某个特定产品,换哪个对话系统都适用,因为它针对的是代词歧义的产生机制,而不是某个实现细节。
最后分享一个我一直在用的小检查动作:任何一段准备存档或转发的AI回复,我都会扫一眼里面有几个“它”“这个”“那个”。超过两个,就让它重写一遍,要求全部替换成实体名称。多花的这十几秒,省下的是后面可能几十分钟的误解排查。这个习惯坚持下来,我和对话助手之间的来回次数明显少了,回复的可用率也上去了。代词虽小,但它确实是衡量一段人机对话够不够“深”的一把很实在的尺子。