山东大学创新实现12——总结
一、项目概述与完成情况
本项目是一个AI驱动的沉浸式文字冒险游戏平台。它不同于传统文字冒险游戏依赖预设剧本和分支选择,而让LLM理解玩家意图后结合游戏状态生成个性化叙事并更新游戏状态,每次游玩体验都不同,真正做到了千人千面,让大语言模型能够理解游戏状态、控制叙事节奏、管理角色成长,并实现动态剧情生成。
二、技术难度与亮点
1.多智能体协作
我们构建了基于LangGraph的多智能体协作框架,将游戏运行所需的不同认知能力拆解为七个各司其职的智能体,包括意图路由器、叙事导演、社交评估、记忆管理、内容守卫、好感计算以及一致性检查。每个智能体都拥有独立配置的LLM客户端,可根据其职责调用最适配的模型,在意图识别、剧情生成、社交评估、内容安全和记忆管理等维度上发挥最佳效能。
2.图像生成
包括角色形象与场景背景的自动生成。根据玩家所选的天赋、出身、性别、性格值以及可选的补充外貌描述,遵循世界观的要求,调用图像生成API完成绘制,同时生成头像和全身立绘。对于游戏中的各个场景节点,系统同样会基于节点的氛围描述、视觉要素和叙事基调,由LLM生成场景背景的绘图提示词并异步生成对应的背景图片,并被本地缓存。
3.战斗系统
战斗系统以跑团式骰子引擎为核心,结合力量、敏捷、智力和幸运等多重属性进行综合加成,使每次攻击都充满变数。命中率计算综合考虑了武器基础、法术协同、走位增益和幸运修正等多维因素。敌人会依据七档难度动态调整命中率与伤害输出,确保战斗既有挑战性又不失公平。每场战斗在前端挂载交互卡片,方便玩家查看敌我状态并操作。角色倒下时并非直接死亡,而是提供复活机会,可使用道具或消耗金币投掷D20骰子。战斗结束后自动结算战利品,形成从攻击判定到战后结算的完整闭环。
4.任务系统
围绕四条主线任务和六条支线任务搭建了完整的剧情推进链条。任务进度的检测不再局限于简单的关键词匹配,而是结合背包物品的实时数量、战斗胜利的判定以及玩家是否到达特定地点等多种条件进行自动化判断。更重要的是,大模型可以直接在生成叙事的同时标记任务目标的完成情况,让剧情推进与任务进度保持高度同步。任务奖励体系丰富多样,涵盖了经验值、金币、新物品、属性加成以及NPC好感度变化等多个维度,使得每次任务完成都能给玩家带来切实的成长反馈。
5.结局系统
共计包含十个不同的结局走向,其中三个为主线性结局,六个为支线专属结局,还有一个隐藏的真结局等待玩家发掘。结局条件的评估支持多条件组合检测,系统会综合判断任务的完成状态、节点的访问记录以及各项属性是否达到阈值等因素,只有当全部条件都得到满足时,对应的结局才会被触发。每个结局都配有完整的后日谈文本,为玩家的冒险旅程画上富有情感厚度的句号。当结局被解锁时,系统会自动更新NGP进度,为玩家的后续周目游戏积累成长资本。
6.多周目系统
将天赋和出身的解锁进度与玩家的周目数绑定在一起。每完成一个周目,玩家就能解锁更高阶的天赋和出身选项,让每一次重新开始都拥有与之前不同的构筑可能,从而激励玩家持续探索故事的不同分支与结局。
7.命运之网拓扑系统
为游戏构建了一张包含九个节点的故事地图,节点之间的解锁需要满足特定的条件,包括完成相应任务、持有关键物品或者与特定NPC建立足够的好感度。系统会持续记录玩家的探索路径以及每个节点上发现的重要物品与信息,形成一份完整的冒险履历。
8.存档系统
支持自动存档与手动存档两种方式,并且在存档恢复时能够完整还原游戏的所有状态,包括剧情进度、角色属性、背包物品、任务完成情况以及命运之网的拓扑快照,确保玩家可以随时从任意节点继续他们的冒险。
9.成就系统
对玩家在游戏过程中的各类重要行为进行追踪与记录,每当玩家达成特定条件时便会自动解锁相应成就,为探索过程增添了额外的收集乐趣与成就感。
10.社交与好感系统
为游戏中的八位NPC赋予了完整的性格设定,包括各自的喜好、厌恶之物以及好感度阈值。赠礼系统能够根据NPC的个人偏好动态调整好感度的变化幅度,当玩家赠送对方喜欢的物品时,好感度会显著提升,反之则会下降。帮助系统则能够解析玩家的行为意图,判断玩家是否在协助NPC完成任务,并据此产生相应的好感度变化。叙事语气评估功能进一步让LLM能够分析叙事文本中NPC对玩家态度的微妙变化,从而生成更加自然且富有情感层次的社交互动。
11.背包与物品系统
为三十多种物品建立了完整的目录结构和效果定义,当玩家使用某件物品时,系统会自动解析其效果并应用到角色的各项属性上。背包操作意图解析功能能够智能识别玩家输入中的赠予、使用或丢弃意图,并自动完成相应的背包变更。武器系统则提供了八种不同类型的武器供玩家选用,每种武器都拥有独特的属性加成和战斗表现。
12.RAG知识库系统
负责承载游戏世界的静态知识,包括世界观设定、NPC性格与背景、任务触发条件、物品获取方式、成就解锁要求等内容。系统启动时会自动遍历所有游戏数据,为每个实体生成结构化的文本描述,经Sentence-Transformer模型编码后写入ChromaDB向量库。每次玩家行动时,系统根据当前场景和玩家输入从知识库中检索最相关的文档片段,动态注入提示词作为参考。
13.长期记忆系统
负责承载玩家的动态剧情历史,每5个回合自动调用LLM将对话压缩为精炼摘要,连同场景节点和角色状态一并存入向量库。在检索时采用向量检索与最近上下文混合的策略,既从ChromaDB中查找相关历史摘要,也直接读取最近8条原始摘要作为补充,合并后按回合倒序排列,优先提供最新信息。两者共用ChromaDB作为主存储引擎,FAISS作为后备方案,同时通过PostgreSQL镜像实现双数据库备份。这种分层设计让大模型在数百回合后依然能准确引用世界设定并呼应玩家早期的关键选择。
三、技术栈总结
在技术选型方面,AI引擎采用LangGraph实现多智能体协作,LLM部分使用DeepSeek-V4-Pro、GLM-5.1、Kimi-K2.6和Qwen等多种模型,图像生成使用Sophnet API的Qwen-Image-Plus服务,向量数据库使用ChromaDB并配合FAISS作为后备,主数据库使用SQLite并镜像到PostgreSQL,前端采用React和TypeScript,后端采用FastAPI和Python。
四、我的工作
在本项目中,我主要做了以下工作:
1.命运之网
命运之网的本质是一张预设好的剧情节点拓扑图,它定义了从“森林入口”到“生命之树”所有合法路径与解锁规则,其核心难点在于如何将玩家自然语言中的移动意图精确映射到系统内部的节点ID,并确保每一次节点切换都符合剧情逻辑。
为了解决这个问题,我建立了一套别名映射机制,通过四层递进的设计,确保玩家的自然语言输入能被准确转换为预设的剧情节点。
a.通过系统提示词引导大模型直接输出标准节点ID
b.但大模型并不总是可靠,因此维护了一个别名映射字典,将中文地名反向映射到系统ID,当检测到用户输入包含移动意图时,会优先匹配较长的别名来提取目标节点。
c.即使如此,大模型仍可能输出不存在的节点或格式错误,因此后端实施了严格的硬校验,包括邻居效验,条件效验,来源效验,任何不合规的节点切换都会被直接拒绝。
d.最后,将各种格式的输入统一规范化为标准节点ID,这四层保障相互配合,确保故事始终在可控的轨道上推进。
2.RAG知识库
游戏的世界观设定、NPC的性格与背景、任务的触发条件、物品的获取方式、成就的解锁要求等大量静态知识,如果全部塞入系统提示词,不仅会迅速撑爆LLM的上下文窗口,还会稀释真正重要的指令信息。为此,我们实现了一套系统启动时自动遍历NPC字典、任务列表、敌人目录等所有游戏数据,为每个实体生成结构化文本描述的知识库构建机制。这些文档片段覆盖了世界观背景、NPC档案、任务详情、成就条件和天赋数据等丰富内容,通过Sentence-Transformer模型计算为384维嵌入向量后批量写入ChromaDB持久化向量库。每次玩家行动时,系统会将用户输入与当前节点ID拼接作为查询字符串,基于余弦相似度从知识库中召回最相关的3个知识文档,动态组装成辅助上下文供LLM参考。这种按需检索的机制,既保证了LLM能够获得精准的世界知识支撑,又避免了对上下文窗口的无效占用。同时,我们还通过PostgreSQL镜像实现了双数据库备份,进一步增强了知识库的可靠性与系统的容灾能力。
3.长期记忆系统
传统的对话式AI游戏往往只能记住最近的几轮交互,一旦对话长度超出上下文窗口,早期的剧情细节和玩家选择就会被遗忘,导致叙事前后矛盾。为了解决这一问题,我构建了基于向量检索的长期记忆系统。在记忆存储层面,系统每5回合自动调用LLM将对话历史压缩为150字以内的精炼剧情摘要,并连同当时的场景节点、角色状态等上下文信息一并存入ChromaDB的历史摘要集合。在记忆检索层面,我们采用向量检索与最近上下文混合的策略,既从向量库中查找与当前玩家输入最相关的3条历史摘要,也直接从数据库中读取最近8条摘要作为补充,两者合并去重后按回合倒序排列,优先提供最新的信息。这样一来,即便游戏进行了数百回合,大模型依然能够准确把握故事脉络,准确呼应玩家早期的关键选择,确保叙事的连贯性与前后一致性。
4.混合持久化:SQLite与PostgreSQL的分工
我在原有SQLite的基础上引入了PostgreSQL,形成了一套分层存储的混合持久化方案。SQLite主要承担在线事务处理职责,承载角色数据、会话状态、背包物品和游戏存档等高频读写且要求强一致性的核心业务数据。而PostgreSQL则作为异步镜像与分析存储的补充角色,主要存放历史摘要、拓扑解锁记录等可以容忍短暂延迟的数据。系统通过生产者-消费者队列将这些写操作从主请求路径中剥离,后台线程批量异步写入PostgreSQL,从而避免网络开销或数据库锁拖慢游戏响应速度。
5.话题感知缓存淘汰机制
综合评估每个缓存条目的三个维度:话题活跃度记录会话的访问频率,高频操作的会话更难被淘汰;依赖重要性统计有多少其他数据依赖此会话,例如一个尚未结束的战斗会话如果被淘汰,重新加载时需要重建战斗状态,代价极高,因此依赖越多的会话得分越高;访问频率衰减则结合LFU和LRU的思想,频繁访问或刚被命中的条目获得加分,而长期闲置的条目则被降权。每次缓存达到上限时,系统选择综合评分最低的条目进行淘汰,确保最有价值的会话始终保留在内存中。
TP × (TSI + α) × 频率分数 + 时效奖励
5.分层提示词及动态注入
在整个系统架构中,我遵循了一个核心原则:确定性的游戏规则由代码严格执行,不确定性的创意内容交给AI自由发挥。所有节点连接关系、物品来源类型、任务触发条件等硬性规则都集中配置在`game_data.py`中,由后端代码强制执行;而`dynamic_provider.py`只向AI提供当前场景相关的NPC和物品列表,从源头限制生成范围;`quest_manager.py`负责从数据库读取任务进度并通过硬编码映射检测背包变化,自动完成目标更新,AI无需干预;`prompt_manager.py`则通过系统提示词明确禁止AI越界行为,同时后端对AI输出的状态更新进行严格校验,任何违规尝试都会被拦截。最终的效果是:当玩家提交行动时,AI只需输出简洁的结构化标记,而物品扣除、任务更新、属性变化等复杂逻辑全部由Python代码完成。这种分层设计确保了即使AI偶尔出现幻觉,核心游戏数据依然完好无损,既保证了规则的鲁棒性,又保留了叙事的灵活性。
最终的效果是:当玩家说“我要把三株净化草交给艾莉西亚”时,AI只负责描写艾莉西亚接过净化草时说了什么感谢的话,而净化草从背包中扣除、任务状态更新为已完成、属性奖励生效这一连串逻辑全部由后端模块在后台完成。AI的响应只需要输出简洁的结构化标记,所有复杂的条件判断和数据一致性保障都落在后端代码上。这种分层设计确保了即使AI在某些回合出现幻觉或格式错误,核心的游戏规则和进度数据依然完好无损,既保证了系统的鲁棒性,又保留了AI叙事带来的无限可能性。
更多推荐


所有评论(0)