为什么“窗口更长”不能解决问题
常有人以为,只要模型上下文窗口够大,就能把整局录像一口气读完。可以算一笔示意账:一局 40 分钟的比赛,按每秒抽取一帧,就是 2400 张画面;再叠加每个 tick 的 Telemetry、几十分钟的队伍语音转写,即使做了压缩,也是相当大的输入。就算能装下,模型在超长输入里也常常出现“中间丢失”一类的现象,对开头与结尾记得清,中间反而模糊。更长的窗口只是减轻了容量问题,并没有解决“该记什么”。
更关键的是,比赛里绝大多数内容并不重要。走位、换弹、空转,占了时间的大头,而真正影响结果的,可能只有几十个事件。所以长上下文的目标不是把一切都留下,而是把“重要的”以可查询的形式留下。这个判断与 关键事件检测 是同一类问题,也是长上下文处理的入口。
事件时间线:把录像变成可以翻页的账本
第一步是把原始信号转成结构化的事件时间线。每条事件包含时间戳、参与者、位置、事件类型,以及当时的关键状态,例如经济、人数、目标归属。“第 12 分 40 秒,A 组从中路转向侧翼,对方视野丢失”这样的一行,远比几百帧画面容易保存和比较。PA真人平台把事件时间线作为长上下文的骨架,画面和语音则退居为需要时调取的证据。
时间线的好处是天然按时间排序,可以做区间查询,比如“第 10 到 15 分钟里所有资源变化”;也能按类型、选手、地图区域过滤。它相当于给模型一本账本,而不是一堆散页。前提是事件抽取本身足够准确,否则账本上写错的每一条,都会成为后续推理的地基。
分层摘要:从一句话到一分钟,再到一整局
有了事件时间线,还需要不同粒度的摘要。一个常见的层次是:最底层是逐事件记录;往上是“回合摘要”或“一波团战摘要”,说明起因、过程、结果;再往上是阶段摘要,比如前期节奏、中期资源争夺;最顶层是整局概述。回答“这局输在哪”时,从顶层开始,遇到需要细节的地方再向下钻取,而不是一次读完全部,PA真人的复盘流程就是这样逐层下钻的。
分层摘要的坑在于层与层之间的误差会累积。假设某个回合摘要把“被抓单”写成了“团战失利”,阶段摘要就会顺着这条错误结论继续概括。因此摘要要保留指向下一层的引用(时间戳或事件编号),必要时能回溯核对。可以把摘要当作索引,而不是真相本身。
检索式记忆:需要什么,才取什么
当用户问“这名选手前三局在这个点位上死过几次”“这次转点和上一局有什么相似”,模型并不需要把所有历史放进窗口,而是用检索取回最相关的几条事件与摘要。检索可以基于时间、地图区域、事件类型这样的结构化条件,也可以基于向量相似度,找出“形状相似”的片段,例如同一种被抓单的模式。
| 检索方式 | 适合的问题 | 可能出错的地方 |
|---|---|---|
| 结构化过滤 | 某时间段、某位置、某类事件的统计 | 事件抽取有漏,统计就偏低 |
| 向量相似 | 找相似的局面或失误模式 | 相似度高不等于原因相同,不同补丁版本可能失效 |
| 时间邻近 | 还原某个事件的前因后果 | 窗口太窄看不到远因,太宽则引入噪声 |
检索也有覆盖问题:如果查得太窄,会漏掉真正的远因,比如死亡的原因在 30 秒前;查得太宽,又会把无关事件混进来。常见的处理方式是先取最近的事件,再沿着因果线索向前扩展,而不是简单取前后固定时长。相关做法在 死亡前 30 秒的复盘 里也有体现。
遗忘与压缩:忘什么,比记什么更重要
任何长期记忆都需要遗忘策略。一个直接的原则是:状态发生转折的事件优先保留,如目标被拿下、经济反超、阵型崩溃;重复且低信息的事件合并为统计量,比如“这一分钟内共 6 次小规模交火”;较老的细节降级为摘要。对个人长期数据也一样,近期的表现保留细节,早期的只保留趋势。
压缩的同时要标记不确定性。对没有把握的信息,摘要里应该写“可能”“未核实”,而不是直接抹平。PA真人在设计中把“摘要”和“证据”分开存放,回答问题时同时给出证据的时间戳,这样即使摘要有偏差,用户也能回头核对。
幻觉风险:长上下文里最容易出的错
长上下文场景里的幻觉,往往不是凭空编造,而是“合理但没有发生”:模型记得某位选手常在某点位防守,就推断这一局也守在那里;模型知道这类阵容通常压制对手,就宣称这一波是压制。这是把统计规律当作了当前事实。应对办法主要有三条:让每一条结论必须引用具体事件或时间戳;对没有证据的部分明确标为“推测”;在输出前做一次与事件时间线的一致性检查,发现矛盾就退回“无法确定”。