← 进阶 vibe coding上下文装得下,不等于用得好

免费文章 · 03 让模型用好上下文与记忆

上下文装得下,不等于用得好


  上一节,我们学会了检查模型在一次请求中究竟收到了哪些信息。但有时候,人物设定、前文和修改要求明明都已提供,AI 仍然会遗漏关键条件,甚至混淆不同作品的设定。信息已经进入上下文,为什么还是没有被正确利用?

  这里就需要区分两个问题:上下文能容纳多少信息,以及模型能否真正用好这些信息。 这一节,我们会分别改变材料长度和关键信息的位置,看看它们怎样影响回答。

  理解这些影响,以后遇到 AI 遗漏或混淆资料时,我们就能更有依据地检查问题、调整输入,而不是一味补充说明或扩大上下文窗口。

资料增加,判断也会更复杂

  假设我们要查《凡人修仙传》中的一个细节:韩立向墨大夫承诺一年内练成第四层时,实际上已经修炼到了哪一层?如果只看这句承诺,很容易以为他当时还没有练成第四层。但结合前后情节,就需要进一步区分人物对外的说法和实际情况。

  随着资料增加,不同时期的修为、人物的承诺和叙述中的真实状态可能同时出现。比如,韩立早先处于第三层,后来练到第五层,这是修炼进度的变化;而他承诺一年内练成第四层,叙述却交代他早已练成,则需要结合当时的情节理解这句话。

  可以看到,数值不同,不一定代表资料矛盾;人物说出了某个数值,也不代表那就是当时的真实状态。 因此,遇到回答遗漏或混淆时,除了检查材料长度,还要看模型有没有正确区分人物、时间和信息依据。

  整理这类资料时,最好把人物的承诺与实际情况分别记录,并注明对应的故事时点和信息来源。这样,后续引用时才不容易把人物的说法误当成事实。

  除了资料之间的关系,关键信息出现在上下文的什么位置,也可能影响模型的使用效果。 不过,要观察这种影响,就需要把它与其他因素区分开。例如,同时删掉旧资料、把关键设定移到最后,即使回答改善了,我们也无法确定究竟是哪项调整起了作用。

每次只改变一类条件

  接下来,我们用《凡人修仙传》的原文进行对照,看看材料长度和依据位置改变后,模型的回答会有什么变化。实验保持问题、原文事实和核对标准不变,分别比较这两个因素的影响。

运行材料对照实验

沿用已准备的课程实验仓库,打开材料对照实验。

  1. 预览小说原文与四种材料条件。
  2. 点击“运行4个样例”;也可点击“查看课堂实录”回看历史运行。
  3. 从“逐例查看”展开原答、原文与实际请求,核对实际修为、误认药名和引用编号;需要保留时,在刷新前保存记录。

长材料读入同一批30条原文。沿用已保存的模型设置;查看实录不调用模型。

  韩立回屋睡醒后,当时实际上已练成长春功第几层?墨大夫试射缴获的铁筒前,原以为筒里装的是哪种药? 两项依据都在 C28 原文中。

  短材料只提供 C28;三个长材料条件使用相同的 30 条原文,只调整 C28 的位置,内容和编号均不改变。这些资料中既有不同时期的修为,也有药物的真实名称和人物误认的名称,需要结合问题仔细区分。

条件

条数

改变什么

短材料

1

只附 C28 原文

长材料,依据居中

30

C28 在第 16 条

长材料,依据首位

30

C28 移到第一条

长材料,依据末位

30

C28 移到最后一条

  这样,我们既能比较短材料与长材料的差别,也能在资料内容相同的情况下,观察依据位置对回答的影响。

  四次调用使用相同的模型和设置,每次独立提供问题与资料,不带历史对话或工具调用。预期答案只用于本地核对,不提前交给模型。

  运行前,不妨先预测:材料变长,或者 C28 的位置改变后,模型还能准确区分两项事实,并找到对应的原文依据吗? 运行后,再结合实际回答和引用编号逐项核对。

答案正确,还要让依据对应

  判断回答是否可靠,不能只看答案本身。结果表分别检查“事实完整”和“引用正确”:前者核对实际修为与误认药名,后者检查引用是否指向对应的 C28。事实答对,不代表引用的依据也正确。

  先比较四组运行结果,再打开具体样例,对照模型回答、引用编号和原文。

  这次运行中,四组都正确回答了两项事实,但引用结果有所不同。短材料和依据居中两组正确引用了 C28,全部通过;依据首位组引用了 C24,末位组引用了 C32,因此没有通过引用核对。

  可以看到,这次差异出在引用,而不是事实本身。 不过,每组只运行了一次,还不能据此认定材料长度或依据位置一定会导致这种差异,也不能判断哪种位置始终更好。

展开一项结果,核对原文和引用

  先打开“长材料,依据首位”的具体结果。模型正确回答了“第四层”和“神仙倒”,却把出处写成了 C24。我们先核对两项事实,再看看引用是否准确。

核对项

C28 原文依据

首位组实际返回

当时的实际修为

他前些天就练成了第四层

actual_level: 4

墨大夫误认的药名

我还以为只是普通的迷药神仙倒

mistaken_drug: "神仙倒"

出处

两项依据都在 C28

source_ids: ["C24"]

  两项事实虽然都答对了,引用却存在问题。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,观察位置的影响;再固定依据位置,比较加入普通背景和后续修为情节时的表现,注意控制材料长度。每次保持问题、模型和生成设置一致,并保存实际输入与回答。

  一次答对,只能说明这次结果有所改善;要判断原因,还需要控制变量,分别观察不同因素的影响。

  当任务继续推进,我们还需要考虑这些信息应该怎样保留和使用:哪些适合按需读取,哪些可以压缩,哪些值得长期记住?接下来,我们先看看长输入对等待和用量的影响,再比较这些方法的用途与取舍。

讨论

登录后参与讨论