我的项目怎么让其能读懂整合包所有mod的同时还能读懂ftb任务?
回复 群友 6814: 先说结论:别想着让模型"读完整个整合包",那是几万条配方加大量文本,塞不进上下文,塞进去也不准。你要做的是一个离线导出 + 结构化索引 + 按需查询的知识层,模型只负责在这些工具上做判断。 一、分清两类数据 静态知识:所有 mod 的物品、配方、标签、指南书、任务树。这些东西在游戏里不会变,建议开局前一次性导出。 动态状态:你现在有什么、在哪、任务推进到哪。这个必须运行时读。 上轮聊的"可信世界摘要"解决的是后者,你现在问的是前者。 二、读 mod 要走运行时导出,不要静态解 jar 理论上能解 jar 里的 data/<modid>/recipes/*.json 和 assets/<modid>/lang/*.json,但现代整合包大量用 KubeJS、CraftTweaker 在加载阶段改配方、加物品。静态解 jar 拿到的是"这个 mod 原本的配方",不是"这个整合包实际跑的配方",一定会漏。 正确做法是在游戏里写个导出(或者用现成的:有个 KubeJS Export 类模组就是干这事的,会把配方、标签、物品导到 kubejs/exported/ 目录;JEI 也有调试导出,我没逐条验过最新版本,你先试一下哪个能出你要的字段)。要拿到的东西: 物品和方块:registry name、本地化显示名、所属 modid、物品标签。 配方:从 RecipeManager 遍历所有 RecipeType,记输入槽、输出、数量,以及额外条件字段。 JEI/EMI 的 API 再导一遍,它们能补上"用途"和催化、工作台这类信息,比原版配方接口全。 语言文件:把 zh_cn 和 en_us 并进索引,中文名和英文名都能查到同一个物品 id。 三、FTB Quests 单独处理 任务数据在 ftbquests/quests/ 下面(不同版本位置不一样,有的在存档目录、有的在 config 目录,chapters 里是按章节分的.snbt 文件,是 SNBT 不是 JSON),每个任务有个十六进制 id。要导出的是: 任务 id、标题、描述、tasks(要什么物品、多少个)、rewards(给什么)、dependencies(前置)、所属章节。 有的版本标题和描述是内联在 snbt 里的,有的走 quests/lang/xx_xx.snbt 的翻译键。无论哪种,最后都要取到真实文本,别把 quest.1A2B.title 这种键丢给模型。 dependencies 本身就是一个有向图,这就是任务树的逻辑骨架。有了它就能算:当前进度下哪些任务已解锁可做、哪些卡在缺哪个前置。这个对上轮说的目标验收特别值钱——玩家说"我想推进任务",你能直接告诉他卡在哪一步。 四、索引怎么建 物品层:id、显示名(中英)、别名、所属 mod、标签、从哪来(产出它的配方)、能做什么(消耗它的配方)、关联哪些任务。 配方层:一张图,从输出反查输入。任何物品问"怎么得到",沿图 BFS 就能展开成材料树。注意叠加标签展开,比如"任意木板"要展开成所有候选,不然算材料数量会算错。 任务层:DAG 加文本。 存 SQLite 或者直接读 JSON 都行,本地查询,别让模型自己遍历。 五、模型怎么用 关键是把这些做成只读工具让 Agent 调,而不是序列化进 prompt。大概这几个接口就够: get_recipe(物品) get_uses(物品) search_items(名字 mod?) get_item(物品id) get_quest(任务id) list_available_quests get_mod_info(modid) 中间还需要一层"玩家怎么说 → item id"的解析。玩家说"钢锭"或者"steel ingot",你得能对上。中文整合包有的有官方汉化有的没有,所以做双语索引加模糊匹配是必须的,匹配不上就让模型在候选列表里挑,挑对了固化成别名。 六、几个会踩的坑 有配方不等于能做。Create 的机械加工、GregTech 的电压等级、需要哪种工作台,这些条件都藏在配方字段里,导出时别只留输入输出。 有些东西根本没配方——战利品箱、魔法 mod 的仪式、多方块结构。这类只能从 Patchouli 指南书和任务描述里抠文本,然后走语义检索,结构化配方图覆盖不到。 配方随版本变,索引要带整合包版本号,换版本就重建。 任务描述里常有作者写的攻略提示,这是最有价值的文本,别只导标题。 大型整合包几万条配方是常态,别设计成每问一次就全量扫一遍。 七、落地顺序 先写导出,拿到 items / recipes / tags / quests 四份数据。 再建索引,重点是反向配方索引和任务 DAG。 然后给 Agent 挂上那几个只读工具。 最后把任务进度接进世界摘要,目标和验收条件就能同时对照任务要求,而不只是"背包里有没有这个东西"。 你先把导出这步做出来,后面基本都是查表的事。