免费文章 · 03 让模型用好上下文与记忆
上下文装得下,不等于用得好
上一节,我们学会了检查模型在一次请求中究竟收到了哪些信息。但有时候,人物设定、前文和修改要求明明都已提供,AI 仍然会遗漏关键条件,甚至混淆不同作品的设定。信息已经进入上下文,为什么还是没有被正确利用?
这里就需要区分两个问题:上下文能容纳多少信息,以及模型能否真正用好这些信息。 这一节,我们会分别改变材料长度和关键信息的位置,看看它们怎样影响回答。
理解这些影响,以后遇到 AI 遗漏或混淆资料时,我们就能更有依据地检查问题、调整输入,而不是一味补充说明或扩大上下文窗口。
资料增加,判断也会更复杂
假设我们要查《凡人修仙传》中的一个细节:韩立向墨大夫承诺一年内练成第四层时,实际上已经修炼到了哪一层?如果只看这句承诺,很容易以为他当时还没有练成第四层。但结合前后情节,就需要进一步区分人物对外的说法和实际情况。
随着资料增加,不同时期的修为、人物的承诺和叙述中的真实状态可能同时出现。比如,韩立早先处于第三层,后来练到第五层,这是修炼进度的变化;而他承诺一年内练成第四层,叙述却交代他早已练成,则需要结合当时的情节理解这句话。
可以看到,数值不同,不一定代表资料矛盾;人物说出了某个数值,也不代表那就是当时的真实状态。 因此,遇到回答遗漏或混淆时,除了检查材料长度,还要看模型有没有正确区分人物、时间和信息依据。
整理这类资料时,最好把人物的承诺与实际情况分别记录,并注明对应的故事时点和信息来源。这样,后续引用时才不容易把人物的说法误当成事实。
除了资料之间的关系,关键信息出现在上下文的什么位置,也可能影响模型的使用效果。 不过,要观察这种影响,就需要把它与其他因素区分开。例如,同时删掉旧资料、把关键设定移到最后,即使回答改善了,我们也无法确定究竟是哪项调整起了作用。
每次只改变一类条件
接下来,我们用《凡人修仙传》的原文进行对照,看看材料长度和依据位置改变后,模型的回答会有什么变化。实验保持问题、原文事实和核对标准不变,分别比较这两个因素的影响。
韩立回屋睡醒后,当时实际上已练成长春功第几层?墨大夫试射缴获的铁筒前,原以为筒里装的是哪种药? 两项依据都在 C28 原文中。
短材料只提供 C28;三个长材料条件使用相同的 30 条原文,只调整 C28 的位置,内容和编号均不改变。这些资料中既有不同时期的修为,也有药物的真实名称和人物误认的名称,需要结合问题仔细区分。
条件 | 条数 | 改变什么 |
|---|---|---|
短材料 | 1 | 只附 C28 原文 |
长材料,依据居中 | 30 | C28 在第 16 条 |
长材料,依据首位 | 30 | C28 移到第一条 |
长材料,依据末位 | 30 | C28 移到最后一条 |
这样,我们既能比较短材料与长材料的差别,也能在资料内容相同的情况下,观察依据位置对回答的影响。
四次调用使用相同的模型和设置,每次独立提供问题与资料,不带历史对话或工具调用。预期答案只用于本地核对,不提前交给模型。
运行前,不妨先预测:材料变长,或者 C28 的位置改变后,模型还能准确区分两项事实,并找到对应的原文依据吗? 运行后,再结合实际回答和引用编号逐项核对。
答案正确,还要让依据对应
判断回答是否可靠,不能只看答案本身。结果表分别检查“事实完整”和“引用正确”:前者核对实际修为与误认药名,后者检查引用是否指向对应的 C28。事实答对,不代表引用的依据也正确。
先比较四组运行结果,再打开具体样例,对照模型回答、引用编号和原文。
这次运行中,四组都正确回答了两项事实,但引用结果有所不同。短材料和依据居中两组正确引用了 C28,全部通过;依据首位组引用了 C24,末位组引用了 C32,因此没有通过引用核对。
可以看到,这次差异出在引用,而不是事实本身。 不过,每组只运行了一次,还不能据此认定材料长度或依据位置一定会导致这种差异,也不能判断哪种位置始终更好。
展开一项结果,核对原文和引用
先打开“长材料,依据首位”的具体结果。模型正确回答了“第四层”和“神仙倒”,却把出处写成了 C24。我们先核对两项事实,再看看引用是否准确。
核对项 | C28 原文依据 | 首位组实际返回 |
|---|---|---|
当时的实际修为 | 他前些天就练成了第四层 |
|
墨大夫误认的药名 | 我还以为只是普通的迷药神仙倒 |
|
出处 | 两项依据都在 C28 |
|
两项事实虽然都答对了,引用却存在问题。C24 记述了韩立服药后突破第四层,能够佐证修为进展,却没有墨大夫误认神仙倒的情节。因此,C24 无法支持完整回答,直接包含两项依据的是 C28。
末位组则出现了另一种问题:模型引用了 C32,但本次提供的资料只有 C01 至 C30。引用不仅要看起来像资料编号,还必须真实存在,并能支持对应的回答。
自己运行时,可以在“逐例查看”中打开“模型返回原文”“全部资料”和“真正发送的请求体”。先确认资料是否进入上下文、回答是否完整,再根据引用编号找到原文,逐项核对人物、时点和具体事实。
这样,我们不仅能发现答案中的错误,也能进一步检查:模型是否找到了正确的依据,又是否用这些依据支持了自己的回答。
请求提示超限,应该检查什么?
调用模型时,有时会遇到“超出限制”的错误,但原因不一定是上下文太长。例如,百炼会区分输入长度超限和 Token 速率限制:前者是单次输入超过模型允许的长度,后者则是一定时间内的请求或 token 用量超过服务限制。账户额度等条件也可能导致请求失败,因此需要结合具体错误码判断。
如果请求本身没有成功,就应该先解决对应的限制,而不是认为模型没有理解资料。本节主要观察正常完成的回答中,模型是否正确利用了上下文。
为什么不能划出通用的“智能区”
刚才的四组实验都答对了事实,但其中两组的引用存在问题。这说明,模型对上下文的利用不能只看答案是否正确,也不能凭这几次结果,就划定一个通用的有效长度。在实际的 AI 任务中,随着对话和工作记录积累,助手也可能遗漏要求、重复已经纠正的错误。但这些问题何时出现、受哪些因素影响,还需要结合具体任务和实际表现来判断。
于是,一些人用“智能区”(smart zone)和“愚蠢区”(dumb zone)来形容这种变化:前者指助手还能较好地把握任务,后者则指信息积累后,工作表现开始下降的状态。
不过,上下文能容纳多少信息,与模型能否用好这些信息,并不存在一条固定的分界线。 查找一条记录和同时遵守十条相互关联的要求,难度显然不同;增加必要的资料,也可能让结果变得更好。因此,不能仅凭 token 数量,或者“窗口用到一半”,就判断模型进入了哪个区域。
长上下文中信息利用效果下降的现象,有时被称为上下文衰减(context rot)。2023 年的 Lost in the Middle 研究发现,在当时测试的多文档问答等任务中,关键信息放在中间时,模型的表现往往不如放在开头或末尾。这让信息的位置成为一个值得关注的因素。
但位置的影响并不总是一样。Chroma 在 2025 年的长上下文研究中,针对特定的信息查找任务比较了 11 个位置,却没有发现明显差异。不同模型、任务和材料可能产生不同结果,我们需要结合实际任务观察上下文的使用效果,而不是套用一个固定的有效长度。
上下文变长,注意力的计算量怎样变化?
在标准的稠密自注意力中,每个 token 位置都需要与其他可读取的位置计算匹配得分。假设序列长度为 n、表示维度为 d,这部分计算量约为 O(n²d)。也就是说,在其他条件不变时,长度翻倍,这部分计算量大约会增加到四倍。
不过,这只是注意力计算中的一部分,并不意味着整次请求的耗时也会增加四倍。实际模型还可能采用局部注意力、稀疏注意力等设计,具体开销与实现方式有关。
更重要的是,计算量增加和回答质量下降是两个不同的问题。前者可以通过计算复杂度分析,后者则需要结合具体任务观察。就像前面的对照实验,资料变长不一定导致错误,模型能否正确区分和利用其中的信息,才是我们需要进一步检查的。
针对当前错误整理材料
前面的原文实验提供了一种检查长度与位置的方法。实际任务还可能遇到相似对象混用或事实冲突,应该根据具体错误调整上下文。
我们可以先检查所需资料是否齐全,再根据具体错误,调整材料的筛选、排列和组织方式。关键是让模型获得正确、充分且关系清楚的信息。
当前观察 | 可以怎样调整 | 需要保留什么 |
|---|---|---|
混入相似对象或旧版本 | 按对象、版本和生效时间筛选,标明已被替代的决定 | 当前有效事实与出处 |
长材料中遗漏某条依据 | 保持其他条件不变,尝试移动依据或缩小相关材料范围 | 原文、记录编号与对照条件 |
要求分散,涉及多处依赖 | 集中整理约束及其关系,再逐步核对 | 各步骤都要遵守的共同条件 |
同一对象的资料存在冲突 | 保留双方记录,补充依据,必要时交给人判断 | 一致事实、分歧与未确定事项 |
后续任务依赖之前的决定 | 整理交接说明,提供给下一次任务 | 目标、已确认的决定及理由、未决事项与原文位置 |
新任务与当前讨论无关 | 可以新开会话,重新提供必要材料 | 新任务所需的事实与规则 |
比如,后面进行小说校对时,我们需要提供待检查的正文、当前有效的人物设定,以及此前确认的关键要求。如果交给新的助手,还要说明哪些设定已经更新、哪些问题尚未解决,避免它沿用旧资料,或把未确定的内容当成结论。
整理之后,还需要通过实际任务检查效果:人物行为是否符合设定?前后情节有没有冲突?此前确认的要求是否得到遵守?上下文整理得好不好,最终要看模型能否正确利用这些信息,完成当前任务。
假设我们让 AI 核对韩立与墨大夫交锋时的实际修为。资料中既有 C28 关于第四层的记载,也有 C30 中后来达到第五层的情节。
第一次,AI 错把后来的第五层当成了当时的修为。于是,我们删掉 C30,并将 C28 移到材料末尾。重新运行后,AI 正确回答了第四层。
这能证明之前是材料太长造成的吗?怎样才能判断究竟是哪项调整起了作用?
查看答案与解析
不能。因为这次同时改变了材料长度、资料内容和依据位置,即使结果改善,也无法确定具体原因。
要分清这些因素,可以先保持资料不变,只移动 C28,观察位置的影响;再固定依据位置,比较加入普通背景和后续修为情节时的表现,注意控制材料长度。每次保持问题、模型和生成设置一致,并保存实际输入与回答。
一次答对,只能说明这次结果有所改善;要判断原因,还需要控制变量,分别观察不同因素的影响。
当任务继续推进,我们还需要考虑这些信息应该怎样保留和使用:哪些适合按需读取,哪些可以压缩,哪些值得长期记住?接下来,我们先看看长输入对等待和用量的影响,再比较这些方法的用途与取舍。
讨论
登录后参与讨论