第四个赛季的续约会谈上,球队总经理施启年没有先提玩家上个月场均拿了多少分。他翻出的是两年前季后赛第七场的最后八秒:落后一分,玩家突破到罚球线,没有强行出手,把球分给了底角的老将贺南洲。那一球进了,球队晋级,贺南洲赛后说“这孩子愿意把球交给别人”。施启年记得这件事,却不记得玩家某天训练后抱怨过的空调温度。一个体育剧情模型到底该记住什么,从这张谈判桌上已经能看出轮廓。

续约桌上被翻出来的那一次传球

施启年这句台词看起来只是一句回忆,背后至少要调用四类信息。第一,玩家现在的合同还剩几个月、球队薪资空间是多少,这决定这场谈话为什么发生。第二,季后赛第七场那一攻的记录:比分、时间、谁在场、谁得分、比赛之后球队走到了哪一轮。第三,施启年怎么看玩家,贺南洲又怎么看玩家,这两种评价并不一样。第四,在四个赛季几百场比赛里,为什么偏偏是这一次传球被想起来。

如果系统只会“把所有对话都放进上下文”,合同条款会淹没在上千句更衣室闲聊里,季后赛那一球和某次普通助攻占同样的位置。所以在乐鱼体育的设计思路里,体育剧情模型的记忆被拆成四个部分:世界状态(World State)、事件日志、关系图和记忆权重。它们各管一件事,最后在生成台词时才被组合起来。

World State:先把“现在是什么样”写成可查询的数据

世界状态记录的是此刻为真的事实,它不需要模型去“回忆”,而需要被准确查询。贺南洲是否已被交易、主教练是否换人、玩家的膝伤是否痊愈,都不该由语言模型凭印象生成,说错一个阵容,整段剧情就失去可信度。

状态类别记录内容 谁会用到
阵容与角色谁在队中、首发还是替补、场上位置 教练排兵、队友对位置的不满
合同剩余年限、薪资档位、选项条款续约谈判、经纪人、转会传闻
伤病当前伤情、预计复出时间、复发风险 队医、教练、记者追问
赛季进程 排名、剩余赛程、季后赛形势 比赛重要程度、球迷情绪
球队目标 管理层本赛季要求、预算总经理、教练压力

这张表随每场比赛、每个转会窗更新,只保存结果。续约争执了三轮,世界状态只记最终签了几年;争执本身属于事件日志。

事件日志:每条记录都要写清谁在场、比分多少、后果是什么

事件日志保存的是“发生过什么”。一条合格的记录不应该是一整段对话原文,而是一个结构化条目:时间与赛季轮次、事件类型、参与者、比赛上下文、事件来源,以及它造成的后果。以那次传球为例,日志里写的是:第二赛季季后赛首轮第七场,终场前八秒,比分落后一分;玩家放弃出手传给贺南洲,贺南洲底角三分命中;球队晋级次轮;赛后贺南洲接受采访公开称赞玩家。

比赛上下文这一栏尤其关键,它包括比分、球员个人表现、比赛中的关键事件、赛事级别和赛季背景。常规赛垃圾时间的一次助攻,和淘汰赛第七场最后一攻的助攻,分量完全不同,没有这一栏,模型无法区分。

后果一栏则把事件和关系连起来:贺南洲对玩家的信任提高,媒体给玩家贴上“关键时刻不自私”的标签,一部分球迷却在论坛上质疑他不敢投最后一球。一个事件同时改变了三组关系,日志要把这些改变都挂上去,以后任何一方提起此事,都能追溯到同一个源头。

关系图:谁怎么看谁,要拆成方向不同的两条边

关系图里的节点是人和群体:玩家、贺南洲、施启年、主教练滕嘉、跟队记者、主场看台上的球迷组织。节点之间的连线带方向,每条线上有信任、尊重、竞争、依赖等数值,还挂着形成这些数值的事件编号。

贺南洲指向玩家的那条线,信任度很高,依据就是那次传球;玩家指向贺南洲的线,更多是对前辈的尊重。施启年指向玩家的线要复杂一些:他欣赏玩家的判断,但作为总经理,他同时在评估这份合同值多少钱。关系是双向的,NPC对玩家有自己的评价,这些评价不需要和玩家的自我认知一致。

关系图也不只围绕玩家。上赛季滕嘉削减了贺南洲的出场时间,两人在一次训练后有过争执,这条线和玩家毫无关系,却会在续约期间产生影响:如果施启年决定留下年轻的玩家、放走老将,滕嘉会支持,贺南洲则可能对玩家的态度变得微妙。玩家不在场的时候,这张图也在变化。

记忆权重:训练场闲聊会淡掉,季后赛第七场不会

即便有了结构,四个赛季的事件日志仍然会很长。决定哪些事件被想起的是记忆权重。它大致按四个层级划分:短期记忆(Short-term Memory)是日常训练、普通对话,几周后就会淡化;关系记忆(Relationship Memory)记录的是改变两人关系的具体互动;职业事件(Career Event)包括续约、交易、首发变动;重大事件(Important Event)是冠军、淘汰赛关键球、重伤、公开冲突,这一层几乎不衰减。

模拟场景以下数值仅用于说明机制,并非任何已上线产品的参数。那次传球在贺南洲的视角下被记为重大事件,初始权重设为0.9,衰减极慢;在当晚没有登场的替补新秀视角下,只记为一次职业事件,权重0.4;玩家抱怨空调的那句话,所有人视角下都是0.05,两周后低于检索阈值。

注意两点:权重按观察者分别计算;另外,事件被再次提起会强化权重:如果跟队记者每年季后赛前都拿那一球做专题,它在球迷和媒体节点上的权重就会一直维持高位。“被反复讲述的事变成历史”,在模型里就是这样一条规则。

生成一句台词之前,模型先做的是检索

回到续约会谈。当场景被触发时,语言模型并不是直接开口,系统会先完成一轮检索,把结果压缩成一小段上下文,再交给模型生成台词。

续约场景触发查询合同与阵容按参与者检索高权重事件读取双向关系按性格生成台词结果写回事件日志

检索的范围由场景决定:参与者是玩家和施启年,所以优先拉取两人共同涉及的事件,以及施启年作为总经理关心的合同、成绩、球队目标。施启年的性格偏谨慎、不轻易表态,模型在措辞上就会克制,他会提那次传球,但不会当场许诺年限。这场谈判本身的结果随后又被写回日志,成为下一次谈判的素材。

这套流程也限制了模型能做的事。世界状态说贺南洲已经三十六岁、合同只剩一年,模型就不能让施启年说“我们会围绕你和贺南洲再打五年”。AI可以组织语言,但事实由世界状态说了算。

为什么不能把四个赛季的对话全部塞进上下文

最直接的原因是数量。数百场比赛、上千段对话和几十次转会全部放进上下文,既昂贵,也稀释了真正重要的信息。更麻烦的是矛盾:第一赛季的对话里贺南洲还是队友,第三赛季的对话里他已经被交易,模型在一大段混杂文本中很容易引用过期的事实。

其次是视角。每个NPC看到的世界不同,施启年不知道玩家和贺南洲在客场酒店里聊过什么,跟队记者也不知道续约谈判的细节。共用一份对话记录,等于让所有人知道所有事,信息差和剧情张力一起消失。结构化的日志可以给每条记录标注“谁知道”,模型检索时只取该角色有权知道的部分。关于记忆分层与遗忘的细节,可以参考NPC长期记忆一文。

最后是长期历史。十个赛季以后,贺南洲已经退役,施启年可能早已离开球队,但那条季后赛记录还在日志里,权重依旧很高。新来的年轻后卫在更衣室听老队员讲起那一球,解说员在玩家的退役比赛上再次提到它。乐鱼体育希望存档变成一段可以被查询、被引用的体育剧情大模型历史,要做到这一点,靠的是清楚地知道哪些事应该留下、由谁记住、以什么分量被想起,把每句话都存下来反而做不到。