先看一张路由表:任务归谁
爱游戏官网讨论多模型协作,从一张最朴素的对照表开始:不是问“哪个模型最强”,而是问“这个任务需要什么能力”。下表里的内容是设计思路,用来说明职责划分,并不是性能对比。
| 任务 | 主要负责的模型 | 需要的核心能力 | 不适合交给它的事 |
|---|---|---|---|
| 理解“钟楼那个Boss怎么打” | 大语言模型(LLM) | 自然语言理解、意图与实体抽取 | 凭记忆回答具体版本的数值 |
| 找“拿到护腕前要做哪些任务” | 知识图谱与图搜索 | 关系、依赖、路径 | 理解含糊的口语表达 |
| 从候选游戏里排出先后 | 推荐模型 | 大量行为数据上的排序 | 解释自己为什么这么排 |
| 判断玩家卡在导航还是战斗 | 玩家模型 | 状态预测、不确定性估计 | 决定改哪个游戏参数 |
| 在允许范围内调整补给或提示 | 强化学习或规则策略 | 受约束的序列决策 | 理解玩家的自然语言 |
| 开发端寻找异常与复现路径 | 测试Agent | 探索状态空间、记录轨迹 | 判断“这一关好不好玩” |
可以看到,每个模型的“不适合”一栏,恰好是别的模型的强项。多模型协作的意思就在这里:用各自擅长的部分,避开各自不擅长的部分,而不是让一个模型去硬撑所有位置。
场景一:同一个玩家一句话,触发三个模型
回到导语里的那句话:“我卡在钟楼了,有没有更轻松的类似游戏。”假设这是一个虚构游戏里的真实场景,看看它怎么被路由。
- LLM 拆解问题。它把这句话分成两个子任务:一个是当前游戏里的卡关求助,一个是新游戏推荐;同时抽取实体“钟楼”,并注意到“更轻松”是一个偏好信号,不是硬性条件。这一步的输出是结构化的任务单,而不是最终回答。
- 知识图谱回答卡关问题。图谱依据玩家的存档阶段,找到钟楼区域的依赖:需要什么装备,Boss在哪个阶段,哪些前置任务未完成。输出的是带版本与来源的步骤,答案里每一步都能追到节点。
- 玩家模型给出状态判断。它根据近期行为估计:这位玩家是不清楚路线,还是打不过Boss。这决定了回答里是给路线提示,还是给战斗建议。
- 推荐模型排序替代游戏。候选先按类型、机制、难度筛出,再排序;“更轻松”是权重信号,同时保留少量探索。
- LLM 最后组织回答。它把三份结果整理成通顺的文字,但不改动其中的事实,也不新增没有来源的内容。
整个过程里,语言模型出现了两次,一头一尾,中间的判断分别由有据可查的模块给出。这个结构在大模型理解问题、图数据库查找关系的Graph Agent设计里有更细的拆解。
场景二:难度调整,为什么不能让聊天模型直接改
假设玩家模型判断:某位玩家在钟楼第二阶段反复失败,主要原因是资源配置不当。谁来决定“怎么办”?如果让聊天模型直接下结论,它很可能给出一个听起来合理的建议,比如“降低Boss攻击力”。但这个建议既不受游戏规则约束,也无法回滚。
更稳妥的路径是:玩家模型只输出“资源不足”的判断和置信度;策略模块(强化学习或规则)在预先划定的旋钮范围内,比如补给点刷新、提示出现时机,选择一个调整,并附上上下限;调整生效前经过规则检查,对关卡结构的改动还需要可玩性验证,这部分思路可以参考动态难度改变关卡结构时的生成加验证。LLM在这条链路里只负责把结果翻译成玩家能读懂的提示语,不参与决策。
场景三:开发端,测试Agent与规则库联手
再看开发侧。更新之后,测试Agent沿着图谱给出的依赖链去探索钟楼,主动尝试读档、重复操作、切换装备等异常路径,发现“退潮护腕重复发放”。此时需要的不同模型是:Agent负责探索并保存轨迹,规则库或断言负责判断“装备唯一来源”是否被破坏,LLM可以负责把复现步骤整理成一份可读的报告,但报告里的每一步必须对应真实轨迹,而不是“合理推测”。测试结果再回流到图谱与内容团队。这三个场景说明,同一批模型在不同任务里的角色不一样,路由必须由任务的性质决定。
接口契约与失败降级
多模型最容易出问题的地方是缝隙。爱游戏官网对模型之间的接口,设想了这样几条要求。第一,模块之间传的是结构化对象,不是自由文本:意图、实体、玩家阶段、置信度、来源、版本。第二,每个模块必须声明自己的输出格式和不确定性,下游可以拒绝不合格的输入。第三,每个环节都有明确的降级路径。
- LLM不可用或超时:退回到关键词加图谱的基础检索,回答变朴素,但不出错。
- 图谱查不到:明确告知“暂无核对过的内容”,不让LLM凭记忆补全。
- 玩家模型置信度低:回答里同时给出路线与战斗两类提示,而不是押一个。
- 推荐模型冷启动:退回到内容特征与热度的混合,并提高探索比例。
- 策略模块越界:规则检查直接驳回,回到不调整。
为什么这些模型不能合并成一个
不同模型的运行特性差别很大,这本身就是拆开的理由。
| 维度 | LLM | 图谱 | 推荐模型 | 测试Agent |
|---|---|---|---|---|
| 延迟要求 | 对话中,秒级可接受 | 查询要快 | 展示前完成 | 离线,可以很慢 |
| 成本 | 单次调用较贵 | 查询便宜、构建贵 | 批量算,摊薄 | 算力密集 |
| 可解释性 | 较弱,需要外部约束 | 强,路径可追溯 | 中等,需要额外生成理由 | 强,有轨迹 |
| 更新频率 | 低,重训成本高 | 随版本频繁更新 | 随行为持续更新 | 随每个开发版本运行 |
更新频率的差别尤其关键。爱游戏官网上讨论的游戏内容按周甚至按天变化,把版本数据“训练”进一个大模型,意味着每次更新都要重训,或者接受它记着过期的东西。把易变的知识放进图谱,稳定的语言能力放在模型里,两边各按自己的节奏更新。这与游戏大模型不能只靠记忆的原因是同一个道理。
单一大模型的三种具体失败
- 编造版本数据。问“退潮护腕的属性是多少”,它可能给出一个像样的数字,却是旧版本的,或者根本不存在。没有来源和版本字段,玩家无从判断。
- 排序结果不稳定。让它“推荐五款适合我的游戏”,同一个问题问两次,可能得到不同的名单,理由也不一致。排序需要可复现、可对照的指标,这不是生成模型的强项。
- 不可控的探索。让聊天模型充当测试员,它倾向于做“合理”的事,而不是主动去试奇怪的操作;即便去试,也没有系统的状态覆盖记录,发现问题后难以稳定复现。
各模型用不同的尺子评估
既然职责不同,评估指标也不能混用。LLM看意图与实体识别的正确率、回答与来源的一致性;图谱看边的覆盖、错边率、版本时效;推荐模型看排序质量、多样性与探索比例;玩家模型看状态预测的校准程度,即它说“七成把握”时,是否真的大约七成成立;策略模块看调整是否在约束内、是否可回滚;测试Agent看发现异常的类型与可复现率。把它们用一个“满意度”混在一起,只会掩盖真正出问题的那一环。
回到起点:爱游戏官网选择多模型协作,并不是因为模型多了显得复杂,而是因为每个任务的失败代价不同。语言模型适合做入口和组织者,而事实、排序、状态和探索,各有更合适的承担者。