全自动完全托管的原神 AI,一个面向开放世界游戏环境的具身智能研究。
Note
避免风险,所以这里只描述实现思路,不提供任何工具、模型、数据集、接口或可直接运行的实现。
本文档提出一种面向《原神》开放世界环境的分层式游戏智能体架构。该架构不试图让单一大模型直接接收游戏截图并输出低层操作,而是将“感知”“短期反应”“长期规划”拆分为不同的功能层。视觉层使用 YOLO 类目标检测模型将游戏画面转化为结构化环境状态;中间层使用固定规则与 LSTM 等时序模型处理战斗、闪避、镜头调整和移动微操等需要低延迟响应的行为;决策层使用经过蒸馏训练的领域专用 LLM 处理任务理解、路线规划、策略选择和异常恢复。
在这个结构中,YOLO 相当于眼睛,负责把画面转换成可计算的世界表征;LSTM 与固定逻辑相当于脊柱,负责快速反射和短规划;LLM 相当于大脑,负责长期目标、抽象推理和对低层行为的抑制或修正。本文档重点讨论该系统的概念架构、训练思路、模块边界、数据流与研究问题。
开放世界游戏环境具备许多接近具身智能研究的特征:连续视觉输入、非结构化场景、多阶段任务、实时战斗、资源管理、导航规划、角色状态变化以及大量 UI 交互。与棋类、文本游戏或封闭规则环境相比,开放世界游戏的智能体不只需要知道“下一步应该做什么”,还需要知道“当前画面中发生了什么”“当前状态是否允许执行该动作”“如果动作失败应该如何恢复”。
如果直接让一个多模态大模型观看实时截图并输出控制指令,会面临几个问题:
- 图像输入成本高,推理延迟大,难以满足实时战斗需求。
- 大模型擅长语义理解和规划,但不适合承担高频、低延迟的反射行为。
- 截图中的大量像素信息对规划层是冗余的,真正需要的是被抽象后的状态表示。
- 单一模型同时学习视觉识别、时序控制和长期规划,会增加训练复杂度和失败面。
因此,更合理的做法是将系统拆成多个时间尺度不同的子系统。视觉模型负责从图像中提取事实,中间层负责毫秒到秒级的动作反应,LLM 负责数秒到数分钟尺度的任务规划。不同层之间通过结构化状态和动作意图进行通信,而不是共享原始像素。
可以将该系统抽象为一个部分可观测的序列决策问题。在任意时刻 t,智能体只能从屏幕画面和历史状态中推断当前世界状态,而无法直接访问游戏内部数据。
形式化地说,系统接收一段观测序列:
O_t = { frame_t, ui_t, history_{t-n:t-1}, user_goal }
其中 frame_t 是当前游戏画面,ui_t 是画面中可见的界面信息,history 是过去一段时间内的识别结果与动作记录,user_goal 是使用者给出的任务目标。系统需要输出动作或动作计划:
A_t = { low_level_action, mid_level_intent, high_level_plan }
其中低层动作可能是移动、转向、攻击、闪避、交互等;中层意图可能是“接近目标”“保持距离”“脱离战斗”;高层计划则可能是“跟随任务标记到达目标地点”“优先绕过敌人”“完成对话并提交任务”。
核心研究问题是:如何在没有直接访问游戏内部状态的前提下,让智能体仅通过屏幕观测形成稳定、低延迟、可纠错的任务执行能力。
系统采用分层控制结构:
┌──────────────────────────────────────────────┐
使用者目标
└──────────────────────┬───────────────────────┘
│
↓
┌──────────────────────────────────────────────┐
决策层:领域专用 LLM
任务理解 / 长期规划 / 策略修正 / 失败恢复
└──────────────────────┬───────────────────────┘
│ 高层意图与约束
↓
┌──────────────────────────────────────────────┐
中间层:固定逻辑 + LSTM 时序模型
短规划 / 快速反应 / 战斗节奏 / 移动微操
└──────────────────────┬───────────────────────┘
│ 可执行动作
↓
┌──────────────────────────────────────────────┐
游戏环境
└──────────────────────┬───────────────────────┘
│ 屏幕画面
↓
┌──────────────────────────────────────────────┐
视觉层:YOLO / OCR / UI 识别
目标检测 / 状态抽取 / UI 元素识别
└──────────────────────┬───────────────────────┘
│ 结构化状态
└───────────────→ 返回给中间层与决策层
该架构的关键思想是让每一层只承担它最适合承担的任务。视觉层不做规划,中间层不理解复杂任务,LLM 不直接承担高频动作控制。这样可以降低单个模型的复杂度,也更容易定位系统失败的来源。
视觉层的目标是将原始游戏画面转换为紧凑、稳定、可被下游模型消费的结构化状态。它可以由多个子模块组成,其中 YOLO 负责目标检测,OCR 负责文字与数字读取,UI 识别模型负责界面区域和状态图标识别。
视觉层需要识别的信息可以分为几个类别:
- 实体对象:怪物、NPC、可交互物、采集物、宝箱、任务目标、传送点等。
- 空间关系:目标在屏幕中的位置、相对方向、估计距离、是否被遮挡。
- UI 状态:血量、体力、元素能量、技能冷却、任务追踪、地图标记、对话选项等。
- 战斗状态:是否进入战斗、敌人攻击前摇、危险区域、角色受击、元素反应提示等。
- 导航线索:小地图方向、任务距离提示、路径障碍、可攀爬或可跳跃区域等。
视觉层输出的不是自然语言描述,而是机器可解析的状态对象。例如:
{
"timestamp": 1024.32,
"scene": {
"mode": "open_world",
"camera_direction": "north_east",
"quest_marker": {
"visible": true,
"screen_position": [0.73, 0.21],
"estimated_distance": 86.5
}
},
"entities": [
{
"id": "enemy_01",
"category": "monster",
"label": "hilichurl",
"bbox": [0.56, 0.44, 0.66, 0.71],
"confidence": 0.91,
"estimated_distance": 11.8,
"threat_level": "medium"
},
{
"id": "target_01",
"category": "collectable",
"label": "sweet_flower",
"bbox": [0.38, 0.61, 0.43, 0.67],
"confidence": 0.84,
"estimated_distance": 4.2
}
],
"character": {
"hp_ratio": 0.86,
"stamina_ratio": 0.72,
"burst_ready": true,
"active_slot": 1,
"is_in_combat": true
},
"ui": {
"dialog_open": false,
"map_open": false,
"tracking_quest": true
}
}这种表示的优势在于,LLM 不再需要处理高维图像,只需要处理已经被压缩过的事实集合。对于长期规划来说,“前方 12 米处有敌人,任务点在东北方向 86 米”比一张完整截图更高效、更稳定。
视觉识别不可避免会出现误检、漏检和状态抖动。为了避免单帧识别错误直接影响决策,需要引入状态平滑机制:
- 对连续多帧的检测结果做时间聚合,过滤短暂闪烁的目标。
- 对关键状态设置置信度阈值,例如低置信度目标只作为候选信息。
- 对 UI 数值和图标状态做一致性验证,避免单帧 OCR 错误。
- 对实体分配短期 ID,维持目标在连续帧中的身份一致性。
视觉层不应该向上游输出未经处理的“杂乱检测框”,而应该输出经过清洗、合并和置信度标定的状态表示。
中间层负责实时性较强、反馈周期较短的行为。它位于视觉层和 LLM 之间,既接收视觉状态,也接收 LLM 给出的高层意图。
这一层可以看作“低级反射系统”。它并不需要理解完整任务,只需要在当前局部状态下做出快速、稳定、可执行的行为选择。
固定逻辑适合处理规则明确、边界清晰、无需学习的行为。例如:
- 当角色血量低于阈值时,提高保守策略权重。
- 当对话框出现时,进入 UI 交互状态。
- 当任务标记可见时,保持朝向任务标记移动。
- 当体力过低时,减少冲刺、攀爬或连续闪避。
- 当识别结果置信度不足时,暂停激进动作并请求重新观测。
固定逻辑的价值在于稳定性。它可以作为机器学习模型的保护壳,避免模型在明显危险或无效的状态下输出不合理动作。
LSTM 适合处理连续时间序列中的短期依赖。游戏中的许多动作不是单帧决策,而是依赖过去几帧的变化趋势。例如敌人是否正在接近、攻击前摇是否正在发生、角色是否正在被击退、镜头是否已经对准目标。
中间层可以把过去一段时间的结构化状态作为输入:
S_{t-k:t} = { state_{t-k}, state_{t-k+1}, ..., state_t }
模型输出短期动作意图:
M_t = { dodge, approach, retreat, attack, rotate_camera, interact, wait }
与 LLM 不同,中间层的输出粒度更低、频率更高、响应时间更短。它关注的是“接下来 0.1 到 2 秒应该怎么做”,而不是“这个任务整体应该如何完成”。
中间层不能完全自治。和人类行为类似,低级反射可以很快做出反应,但大脑可以抑制或修正这些反应。
例如:
- 中间层检测到敌人后倾向于进入战斗,但 LLM 判断当前目标是限时赶路,于是设置“避免非必要战斗”的约束。
- 中间层检测到采集物后倾向于靠近拾取,但 LLM 判断当前任务优先级更高,于是忽略非任务目标。
- 中间层在低血量时倾向于撤退,但 LLM 判断敌人即将被击败,于是允许短时间继续输出。
这种关系不是简单的上层命令下层执行,而是“高层给出目标和约束,下层在约束内快速控制”。如果中间层连续失败,也应把失败信息反馈给 LLM,由 LLM 重新规划。
决策层由领域专用 LLM 承担,负责长期任务理解、策略规划、上下文维护和失败恢复。它不直接读取截图,而是接收视觉层输出的结构化状态,以及中间层反馈的执行结果。
LLM 的输入可以由以下部分组成:
- 用户目标:例如“完成当前任务”“前往某个地点”“采集某种材料”。
- 当前状态:视觉层输出的结构化环境信息。
- 历史摘要:最近一段时间的动作、失败、状态变化和重要事件。
- 中间层反馈:当前动作是否成功、是否卡住、是否进入战斗、是否偏离目标。
- 系统约束:优先安全、避免无意义战斗、减少资源消耗、保持路径效率等。
示例输入可以表示为:
{
"user_goal": "complete_current_quest",
"world_state": {
"quest_marker_visible": true,
"quest_distance": 86.5,
"nearby_enemies": 2,
"in_combat": true,
"hp_ratio": 0.86
},
"history_summary": [
"followed quest marker for 20 seconds",
"encountered enemies near path",
"movement slowed due to combat state"
],
"controller_feedback": {
"last_intent": "approach_quest_marker",
"status": "blocked_by_enemy"
}
}LLM 的输出不应该是直接按键,而应该是可解释的高层计划:
{
"plan_id": "quest_navigation_001",
"goal": "continue_current_quest",
"subgoals": [
{
"name": "leave_combat_area",
"priority": 1,
"constraints": ["avoid_extended_fight", "preserve_hp"]
},
{
"name": "realign_to_quest_marker",
"priority": 2,
"constraints": ["face_marker", "resume_forward_movement"]
},
{
"name": "interact_with_quest_target",
"priority": 3,
"constraints": ["wait_for_dialog_ui", "confirm_safe_options"]
}
],
"middle_layer_policy": {
"combat_aggression": "low",
"allow_dodge": true,
"allow_collectables": false,
"navigation_bias": "quest_marker"
}
}这种输出可以被中间层解释为行为约束,而不是一串不可解释的低层动作。这样既能保持 LLM 的规划能力,也能保留中间层的实时反应能力。
该系统的训练不是单一模型训练,而是多层蒸馏与数据闭环的组合。
YOLO 初始状态下并不认识《原神》的界面、怪物、采集物、任务标记或角色状态。如果完全依赖人工标注,成本会非常高。因此可以设想使用现有高级多模态 LLM 作为教师模型,对游戏视频帧进行自动标注,再将标注结果蒸馏给轻量视觉模型。
流程如下:
- 收集游玩视频,覆盖不同地图、天气、时间、任务、战斗和 UI 状态。
- 将视频拆分为单帧或关键帧序列。
- 使用多模态 LLM 对画面进行语义标注,生成目标类别、边界框、UI 状态和文字信息。
- 将多模态 LLM 的输出转换成 YOLO 可训练格式。
- 训练视觉模型,并在保留集上评估检测质量。
- 将模型失败样本重新提交给教师模型或人工复核,形成迭代数据闭环。
这个过程本质上是用强模型的泛化视觉能力生产标注,再训练一个小模型负责高频实时识别。
决策层 LLM 不需要保留通用大模型的全部能力。它需要学习的是“如何根据结构化游戏状态做任务规划”。因此训练数据应围绕游戏任务构造,而不是混入大量无关对话能力。
教师模型可以根据结构化状态生成以下内容:
- 当前局势解释
- 任务目标拆解
- 下一阶段计划
- 对中间层的行为约束
- 失败后的恢复策略
- 不同策略之间的优先级判断
学生模型则学习从结构化状态到高层计划的映射。这样可以降低模型规模、减少推理成本,并提高在特定游戏任务上的响应速度。
中间层训练更接近行为克隆或时序策略学习。它接收连续帧的结构化状态,输出短期动作意图。
数据来源可以包括:
- 玩家游玩轨迹中的状态与动作序列。
- 教师模型或规则系统生成的短期动作标签。
- 系统运行失败后的纠错样本。
- 不同敌人、地形和 UI 状态下的局部控制片段。
中间层训练关注的不是“为什么要完成这个任务”,而是“在这个局部状态下,下一小段时间怎样行动更稳定”。
一个可持续迭代的系统需要形成数据闭环。每一次运行都可以产生新的训练信号:
运行游戏
↓
记录画面、识别结果、计划、动作和反馈
↓
检测失败样本与低置信度样本
↓
交给教师模型重新标注或生成解释
↓
更新视觉层、中间层或决策层数据集
↓
重新训练或微调
失败样本尤其重要。例如卡在地形、反复撞墙、战斗中无意义闪避、任务目标无法交互、UI 状态识别错误等,都可以作为下一轮训练的数据来源。
为了判断系统是否真正有效,需要为不同层设计不同的评估指标。
视觉层可以关注:
- 目标检测准确率
- UI 状态识别准确率
- 连续帧目标稳定性
- 关键目标漏检率
- 单帧推理延迟
中间层可以关注:
- 闪避成功率
- 战斗存活率
- 移动稳定性
- 卡住恢复率
- 动作响应延迟
决策层可以关注:
- 任务完成率
- 平均完成时间
- 失败后恢复能力
- 无关行为比例
- 高层计划与实际执行的一致性
整体系统还需要关注端到端表现,例如从接受目标到完成任务所需的时间、资源消耗、异常次数以及不同场景下的泛化能力。
该架构仍然存在许多研究难点。
首先是视觉识别的域内复杂性。《原神》的场景具有复杂光照、天气、特效、遮挡和 UI 变化,视觉模型必须处理大量分布差异。
其次是状态抽象的粒度。如果结构化状态过粗,LLM 无法做出准确规划;如果状态过细,则会增加输入长度和噪声,降低推理效率。
第三是层级之间的信用分配。当任务失败时,失败原因可能来自视觉误检、中间层控制不稳定、LLM 规划错误或环境随机变化。系统需要记录足够的中间信息,才能判断应该改进哪一层。
第四是实时性与规划能力的平衡。LLM 推理较慢,不能参与每一帧控制;中间层反应快,但缺少长期语义理解。系统必须明确哪些决策交给 LLM,哪些决策交给中间层。
第五是自动标注质量。多模态 LLM 可以降低人工标注成本,但它生成的标签不一定完全正确,需要置信度筛选、格式校验和失败样本回流。
一个较合理的研究路线可以分为几个阶段:
- 构建状态表示规范,确定 YOLO、UI 识别、中间层和 LLM 之间的数据格式。
- 建立小规模视觉数据集,先覆盖最常见的 UI、怪物、任务标记和角色状态。
- 训练视觉层原型,验证结构化状态是否足够稳定。
- 实现固定逻辑中间层,用规则完成最基础的导航、交互和安全控制。
- 收集短期行为序列,训练 LSTM 或其他时序模型增强中间层反应能力。
- 使用教师 LLM 生成规划数据,蒸馏领域专用决策 LLM。
- 打通端到端闭环,在限定任务范围内评估完成率。
- 引入失败样本回流机制,逐步扩展任务、地图和场景覆盖范围。
本文档只讨论具身智能、分层控制、模型蒸馏和状态表示等研究性问题,不提供任何可直接用于实际游戏环境的工具、模型、脚本、接口或执行方式。所有内容都应被理解为系统设计层面的概念讨论。
这个设想的核心不是“让一个大模型直接玩游戏”,而是构建一个更接近生物智能体的分层系统:视觉层负责看见世界,中间层负责快速反射,决策层负责理解目标和规划未来。通过将原始图像压缩为结构化状态,再让不同模型在不同时间尺度上协同工作,可以在理论上同时获得较好的实时性、可解释性和可训练性。
后续仍需要进一步明确的问题包括:状态表示应该细到什么程度,LLM 的计划语言如何设计,中间层如何接收并执行高层约束,以及失败样本如何自动归因到具体模块。这些问题将决定该架构能否从概念走向稳定的研究原型。