这次我们来看一个能让 AI Agent 在极低胜率下“蠕动”到通关的游戏决策案例:故障机器人 A20 碎心。标题里那句“0.1% 胜率下艰难蠕动”非常关键,它说明这不是一次靠运气蹭出来的通关,而是一个在极高随机性和极低容错环境下,通过大量搜索和策略调优逐步逼近唯一获胜路径的决策问题。0.1% 胜率意味着 1000 局里大约只能赢 1 局,而故障机器人在 A20 进阶下,前期缺伤害、后期缺防御,很多时候连第一层 Boss 都见不到。AI Agent 要做的,就是在这样的死亡分布里把胜率一点一点抬起来,最终找到那条能走通的路径。
这篇文章不会去复述某个公开 Demo 的安装步骤,因为这个标题更像一次技术复盘,而不是传统意义上的开源项目。我们把重点放在三件事上:第一,AI Agent 在《杀戮尖塔》这类回合制 Roguelike 里的决策框架是什么;第二,如何用批量模拟、日志统计和策略调参去验证“胜率从 0.1% 慢慢爬升”这条改进曲线;第三,在本地环境下怎么搭一套可复现的 AI Agent 测试流程。换句话说,哪怕你手上没有现成的 Agent 代码,看完也能知道该从哪些维度入手,去复现一次“故障机器人 A20 碎心”的完整技术路径。
为了让内容不悬空,我会从核心能力速览、适用场景、环境准备、启动方式、功能测试、接口与批量任务、资源占用、问题排查、最佳实践几个角度展开。整套方案以通用工程模板为主,所有代码都会给出可替换的占位参数,你可以直接把它接到自己的游戏环境、强化学习框架或大模型 Agent 接口上。下面的内容适合正在做游戏 AI、强化学习、MCTS 决策树、LLM Agent 规划,或者单纯想研究高难卡牌策略的读者。
1. 核心能力速览
先给一张表,把 AI Agent 在这个场景里的能力边界说清楚。注意,这里的参数不是某个特定开源项目写死的配置,而是从“复现一个故障机器人 A20 碎心 Agent”这个目标出发的通用规格。
| 能力项 | 说明 |
|---|---|
| 项目类型 | AI Agent 游戏决策:操控《杀戮尖塔》故障机器人挑战 A20 碎心 |
| 核心目标 | 在 0.1% 级低胜率环境中通过批量搜索与策略调优找到可复现的获胜路径 |
| 主要功能 | 状态观察、路线规划、战斗出牌决策、卡组强度评估、批量模拟、胜率统计、日志复盘 |
| 运行环境 | 需要《杀戮尖塔》游戏环境或同构模拟器;Python 环境;规则型 Agent 可纯 CPU,神经网络或大模型 Agent 可选 GPU |
| 启动方式 | 命令行启动游戏实例与 Agent 进程;也可把决策模块封装成 HTTP 服务 |
| 是否支持 API | 可以,推荐将决策模块抽成 POST /decision 接口 |
| 是否支持批量任务 | 支持,按多进程或多实例方式跑 N 局并汇总胜率 |
| 适合读者 | 研究强化学习、MCTS、LLM Agent、游戏 AI 的开发者;想挑战高难卡牌策略的技术玩家 |
这张表的核心价值在于:0.1% 胜率不是结果,而是起点。一个 Agent 如果永远只输出随机动作,胜率可能连 0.1% 都达不到;能达到这个数字,说明它已经具备一定的生存能力,只是距离稳定碎心还非常远。接下来所有的工作,都围绕一个清晰指标展开:批量模拟 N 局,统计最终击败心脏的局数,用它来衡量策略改动是否有效。
从决策复杂度来看,这个场景比很多标准强化学习环境更特殊。棋盘类游戏状态虽然复杂,但动作结果通常是确定的;卡牌 Roguelike 却叠了三层随机性:每次战斗敌人行动随机、开卡掉落随机、事件和商店内容随机。Agent 必须在部分可观察的状态下,同时处理“当前战斗怎么打”和“这一局接下来怎么走”两个尺度的问题。这也是为什么标题会给人“蠕动”的感觉:每一步都只能争取一点优势,但整局优势是逐步累积出来的。
2. 适用场景与使用边界
2.1 这个 Agent 适合解决什么问题
第一个问题是路线规划。故障机器人 A20 每一层的路线选择,基本决定了这局是平稳发育还是中途崩盘。精英怪给遗物,但也可能直接把血量打穿;篝火可以回血也可以强化卡牌;商店里可能有关键卡牌或遗物,但金币总是不够。Agent 需要把当前卡组强度、当前血量、Boss 类型、事件收益全部编码成特征,然后对路线候选做评估。
第二个问题是战斗内出牌顺序。故障机器人的球和集中机制让战斗内组合数非常大:冰球提供格挡,闪电球提供输出,黑暗球负责爆发,而回响形态、偏差认知、分离等能力会影响后续每一回合的局势。Agent 要判断的不是“这张牌单回合强不强”,而是“这张牌打下去后,能不能在三到五回合内建立起可循环的防御和输出体系”。
第三个问题是长局策略的一致性。很多单回合贪收益的动作,会在后面第三层或心脏战里付出代价。比如早期拿太多攻击牌,前期清怪快,但后期抽牌库杂质太多,关键能力牌迟迟不上手。Agent 的奖励函数如果只看最终胜负,会非常稀疏,很难指认失败到底发生在哪一步。这正好是批量模拟和过程日志能发挥价值的地方:把每个阶段的死亡分布统计出来,再针对高死亡楼层做策略调整。
2.2 不适用场景与边界
这个方案不适合用于在线作弊或影响其他玩家。自动化操作如果违反游戏用户协议,有账号风险;本文讨论的所有内容都应该限制在本地研究、算法实验和离线模拟范围内。不要把 Agent 接到匹配对战里去刷分,也不要让它干扰正常玩家体验。
另一个边界是复现难度。A20 碎心对大多数人类玩家来说属于高难挑战,“0.1% 胜率”本身就是一个非常不稳定的指标。如果你把随机种子、游戏版本、Mod 环境换了,胜率曲线可能完全不同。所以做这类实验时,固定游戏版本、固定随机种子、固定 Agent 参数,是保证结果可对比的基本前提。不要指望一次改动就能带来几倍的胜率提升,更合理的预期是把 0.1% 慢慢抬到 0.5%、1%,每一步都记录成日志。
3. 环境准备与前置条件
在开始写 Agent 代码之前,先把环境清单过一遍。这里不写死某个具体版本,因为《杀戮尖塔》的版本、Mod API、Python 解释器和深度学习框架都在持续变化,最稳妥的方式是先在本地确认哪一套组合能够跑通一局完整游戏,再逐步加 Agent 逻辑。
首先是游戏端。你需要一份《杀戮尖塔》游戏本体,或者一个能够模拟其核心战斗规则的同构环境。如果走 Steam 版本,通常需要关注游戏版本号与 Mod 加载器的兼容性;如果走自研模拟器,则需要确认模拟器对球机制、集中、遗物触发顺序、心脏战特殊行动的实现是否完整。任何一处规则偏差,都会让 Agent 学到的策略在真实环境里失效。
其次是语言运行时。建议准备 Python 3.10 或更高版本,因为常见的强化学习库、数据处理库和 Web 服务框架对新版本支持更好。如果你的 Agent 是用 Java 或 C++ 编写,也可以单独保留对应运行时,关键是 Agent 进程与游戏进程之间要有一条稳定的通信通道,比如读取日志文件、读取内存状态、通过 Mod API 导出 JSON 状态等。
再次是计算资源。纯规则型 Agent 加 MCTS 在 CPU 上就能跑,每局耗时取决于模拟次数;用神经网络做价值评估时,GPU 会明显加快推理速度;如果用大语言模型参与策略候选生成,那么显存和内存需求会直接上到模型规模对应的水平。现有资料没有给出这个案例的具体硬件占用,所以更稳妥的判断是:先使用小模型或规则策略跑通流程,再根据批量模拟耗时决定是否升级到 GPU。
最后是磁盘结构和目录规划。建议至少建立三个目录:日志目录、结果目录、模型目录。日志目录保存每一局的完整状态转移和最终胜负,结果目录保存批量胜率统计,模型目录保存训练过程中的策略快照。这样后续做策略对比时,可以随时回放某一局,而不是只看到一个“win”或“loss”的标签。
4. 安装部署与启动方式
环境准备好之后,部署的核心不是把某个安装包装好,而是打通“游戏状态 -> Agent 决策 -> 动作执行 -> 结果记录”这条链路。下面给出一套通用实现框架,所有类名和方法名都可以按实际项目替换。
4.1 Agent 决策主循环
# 通用伪代码,需要按实际游戏环境接口调整 import random class GameEnv: """游戏环境封装:负责读取状态、执行动作、返回结果。""" def reset(self): """开始一局游戏,返回初始状态和合法动作列表。""" raise NotImplementedError def step(self, action): """ 执行动作。 返回 next_state, reward, done, info """ raise NotImplementedError class DecisionAgent: """Agent 决策器:可选规则、MCTS、强化学习或大模型方案。""" def __init__(self, config): self.config = config def select_action(self, state, legal_actions): # 最简单的基线:随机策略,用来验证环境连通性 return random.choice(legal_actions) env = GameEnv() agent = DecisionAgent(config) episode_result = [] for episode in range(100): state = env.reset() done = False while not done: legal_actions = state.get_legal_actions() action = agent.select_action(state, legal_actions) state, reward, done, info = env.step(action) episode_result.append({ "episode": episode, "result": "win" if info.get("heart_killed") else "loss", "floor": info.get("floor"), "boss": info.get("boss"), "final_hp": info.get("final_hp"), }) print(episode_result[-1])这个主循环是整条链路的最小闭环。第一次运行可以用随机策略,目的是确认环境能够正常启动、状态能够正确读取、动作能够成功执行。如果随机策略跑完 100 局且日志都能正确输出,就意味着后面替换成 MCTS 或强化学习策略时,不会在基础设施上浪费排查时间。
4.2 Agent 配置示例
{ "game_version": "2.3", "character": "defect", "ascension_level": 20, "heart_kill": true, "agent": { "algorithm": "mcts", "simulation_rounds": 500, "timeout_seconds": 10, "temperature": 0.8 }, "evaluation": { "episodes": 1000, "workers": 8, "seed": 42, "output_dir": "./results" } }配置项里的simulation_rounds和timeout_seconds是控制单步决策耗时最关键的参数。MCTS 模拟次数越多,决策越精细,但每局总耗时线性增长;timeout_seconds则用来防止游戏状态异常时 Agent 卡住不动作。批量评估时,workers表示同时运行的模拟进程数,需要根据 CPU 核数和内存大小调整。
4.3 启动命令模板
# 启动单局调试:先跑通一局,观察日志输出 python run_episode.py --config config/agent_config.json --debug # 启动批量评估:跑 1000 局,统计胜率 python batch_evaluate.py \ --config config/agent_config.json \ --episodes 1000 \ --workers 8 \ --seed 42 \ --output ./results/batch_result.json如果你已经有现成的 Agent 服务,也可以通过 HTTP 方式把游戏环境接进来。下面是一个通用请求示例,真实接口字段需要按实际服务调整。
curl -X POST http://127.0.0.1:8000/decision \ -H "Content-Type: application/json" \ -d '{ "state_id": "run_0001_turn_12", "legal_actions": ["play_card:defragment", "play_card:glacier", "end_turn"] }'5. 功能测试与效果验证
部署完成不代表 Agent 已经会用故障机器人碎心。下面把这些功能拆成几个独立测试项,每一组都要有明确输入、操作步骤、预期结果和失败排查方向。这样可以避免“全流程跑完但不知道卡在哪一层”的问题。
5.1 路线规划测试
测试目的:验证 Agent 能根据当前卡组强度、血量、金币和 Boss 类型选择高生存率路线,而不是无脑打精英或无脑避战。
输入状态至少需要包含:当前楼层地图、每一条路线的敌人类型、精英怪数量、篝火数量、商店数量、宝箱位置,以及当前卡组的攻击牌/防御牌/能力牌数量。操作方式是让 Agent 输出下一段路线的选择,然后观察后续三到五个节点的实际战斗结果。
判断标准:在相同的起步状态下,Agent 选择的路线应该让角色以更健康的血量进入第一层 Boss 战。如果 Agent 总是选最豪华的路线但频繁在精英怪前被打成残血,说明它高估了卡组强度。失败时重点排查状态特征里是否缺少“当前卡组成型度”这个关键信息。
5.2 起手牌与商店购买决策测试
测试目的:验证 Agent 能否在早期卡组里克制拿牌冲动,判断“这张牌现在拿了,会不会污染后面的抽牌循环”。
实际操作可以固定几个典型开局:给了强力攻击牌、给了集中相关能力牌、给了球牌,然后观察 Agent 买或不买。预期结果是,Agent 不会无脑阈值式拿牌,而是会考虑现有遗物和后续曲线。比如已经有两张“球状闪电”时,再来一张是否值得;手里没有集中来源时,“偏差认知”这张牌虽然单卡很强,但可能不是最优选择。
这类测试最能反映 Agent 对“长局收益”的理解。失败往往不是某个动作错了,而是奖励函数没有惩罚“后期抽牌库里的废牌”。建议在日志中记录每局卡组总张数、能力牌数量、平均每回合有效牌数量,用于判断卡组是否臃肿。
5.3 战斗内出牌决策测试
测试目的:验证 Agent 在战斗回合内能区分“活下来”和“打伤害”两种目标,并合理排布球和集中。
测试样例可以选择第一层精英怪和 Boss 战。输入包括当前手牌、当前球位、集中值、敌人意图、我方血量与格挡。预期结果是 Agent 会优先叠冰球和格挡来挡住敌人重击,而不是把蓝量全部拿去打闪电球导致下一回合暴毙。
判断标准要看两件事:单回合格挡量是否覆盖了敌人的攻击意图;闪电球和黑暗球是否在安全回合打出。失败时重点观察 Agent 是否忽略了敌人“意图”这个最重要的特征。如果忽略,常见的表现是前几回合打得很有节奏,然后被一次重型攻击直接带走。
5.4 心脏战专项测试
测试目的:A20 碎心挑战里,心脏战是最后一道门槛,也是最容易让 Agent 露出破绽的地方。
心脏战有几条固定机制会让 Agent 压力剧增:每次出牌都会因为律动效果掉血,敌人还会周期性强力攻击。Agent 需要在控制出牌数量的同时保证足够的格挡,并在最后几个回合完成斩杀窗口判断。
测试时可以把 Agent 直接拉到已经进入心脏战的存档,输入一套接近成型的卡组,观察它能否完成击杀。预期结果不是“无脑把所有牌打完”,而是有意识地保留关键防御牌,避免在敌人重击回合手上全是能力牌。失败时排查点包括:是否计算了律动扣血、是否预留了足够的冰球启动时间、是否在错误回合提前消耗了药水。
5.5 胜率统计与批量验证
测试目的:用批量模拟判断策略改进是否有效。单局通关没有任何统计意义,0.1% 胜率这个数字本身就要求用大样本去验证。
建议每组实验至少跑 500 到 1000 局,并记录下面几个分阶段指标:第一层 Boss 击败率、第二层 Boss 击败率、第三层 Boss 击败率、心脏击败率。通过对比这些分阶段的胜率,可以快速定位 Agent 的主要死亡区域。如果第一层 Boss 击败率只有 20%,那问题主要出在路线规划和前期卡组;如果前三层都能过但心脏战一直输,问题则集中在终局策略。
批量模拟脚本的输出结果可以简化成下面的结构:
{ "total_episodes": 1000, "heart_kills": 1, "win_rate": 0.001, "stage_rates": { "floor_1_boss": 0.42, "floor_2_boss": 0.21, "floor_3_boss": 0.08, "heart": 0.001 } }从 0.1% 开始蠕动,指的就是这些小指标逐步改善的过程。先让第一层 Boss 击败率从 20% 提到 40%,再让第二层从 10% 提到 20%,每一个阶段的提升都会最终传导到心脏击败率上。
6. 接口 API 与批量任务
当 Agent 不再只是单机脚本,而是需要接入日志分析、Web 界面或外部策略服务时,把决策模块抽成 API 是效率最高的方式。这样游戏环境不关心 Agent 内部用什么算法,只关心“给定状态,返回动作”。
6.1 决策 API 示例
一个最小可用的决策接口可以设计成下面这样:
{ "state_id": "run_0042_turn_7", "state": { "floor": 5, "hp": 52, "max_hp": 78, "gold": 130, "deck": ["strike", "strike", "zap", "ball_lightning"], "relics": ["cracked_core", "anchor"], "potions": ["fire_potion"], "legal_actions": ["play_card:zap", "play_card:ball_lightning", "end_turn"] }, "config": { "algorithm": "mcts", "simulation_rounds": 300 } }服务端返回:
{ "state_id": "run_0042_turn_7", "action": "play_card:ball_lightning", "confidence": 0.83, "debug_info": { "candidate_count": 12, "simulation_rounds": 300, "cost_ms": 2450 } }用 Python 请求这个接口只需要很短的代码:
import requests url = "http://127.0.0.1:8000/decision" payload = { "state_id": "run_0042_turn_7", "state": { "floor": 5, "hp": 52, "max_hp": 78, "gold": 130, "deck": ["strike", "strike", "zap", "ball_lightning"], "relics": ["cracked_core", "anchor"], "potions": ["fire_potion"], "legal_actions": ["play_card:zap", "play_card:ball_lightning", "end_turn"] }, "config": { "algorithm": "mcts", "simulation_rounds": 300 } } resp = requests.post(url, json=payload, timeout=15) print(resp.json())如果接口响应超过 10 秒,大概率是模拟次数设置过高,或者在搜索树里撞上了异常状态。给接口加上timeout_seconds参数,并在服务端对决策耗时做上限保护,是避免游戏进程被拖死的必要手段。
6.2 批量模拟与队列设计
批量模拟的任务设计不需要太复杂,核心是一个可重入的队列:每一条任务就是一局游戏配置,跑完写日志,然后取下一个任务。多进程或多实例并行时,最关键的是每个实例使用独立的随机种子和独立的日志文件,否则统计结果会互相污染。
# 批量任务入口模板 python batch_evaluate.py \ --config config/agent_config.json \ --episodes 500 \ --workers 4 \ --seed 100 \ --output ./results/exp_mcts_500sim.json批量模拟结束后,需要一个日志解析模块把结果汇总成胜率指标。下面是一个简单的解析示例:
import re from collections import Counter def parse_run_logs(log_path): stats = Counter() with open(log_path, "r", encoding="utf-8") as f: for line in f: match = re.search(r"result=(win|loss)", line) if match: stats[match.group(1)] += 1 total = stats["win"] + stats["loss"] win_rate = stats["win"] / max(total, 1) return { "total": total, "wins": stats["win"], "losses": stats["loss"], "win_rate": win_rate } if __name__ == "__main__": import sys print(parse_run_logs(sys.argv[1]))真实环境中,result=后面的日志格式可能完全不同,所以解析器需要和 Agent 的日志输出保持同步。建议在写 Agent 时统一日志格式,至少包含run_id、floor、result、heart_killed四个字段,这样后续做任何策略对比、失败回放都会轻松很多。
7. 资源占用与性能观察
性能观察是这个场景最容易遗漏的环节。很多人在 A20 胜率提升之后,只看到“最终赢了一局”,却没意识到持续跑批量模拟时资源开销有多大。下面给出三个需要重点观察的维度。
7.1 CPU 和内存观察
规则型 Agent 加 MCTS 在纯 CPU 下运行,开 8 个并行进程时,内存占用会随着每一局状态树的增长而波动。观察命令可以直接用top或ps,每隔一段时间抓一次 CPU 占用和内存占用,看是否存在内存缓慢增长的问题。如果某个进程长时间不退出,说明模拟过程中可能出现了死循环或搜索树异常。更稳妥的做法是给每个批量 worker 加日志,每完成一局就输出一行进度,方便定位卡住的任务。
7.2 GPU 和显存观察
如果 Agent 使用神经网络或大语言模型来做策略候选,GPU 参与推理,显存占用就会成为主要瓶颈。这里不能简单给出“6G 够用”或“8G 够用”的结论,因为显存取决于模型参数、batch_size、上下文长度和框架实现。观察方式用nvidia-smi -l 1即可;如果发现显存打满,优先降低批量推理的batch_size,或者切换到更小的模型版本。
7.3 单局耗时因素
单局总耗时由几个因素叠加:每步决策耗时、单局总步数、批量 worker 数量。每步决策耗时又受simulation_rounds、卡组规模、动作候选数量影响。卡组里的牌越多,合法动作组合数越大,MCTS 搜索要评估的节点就越多。建议调试阶段把simulation_rounds降到 50 到 100,先验证整条链路,再逐步提升到 500 或 1000。
如果目标只是复现“0.1% 胜率下的艰难蠕动”,没必要一上来就跑 1000 局。先用 100 局、低模拟次数跑出基线,再根据基线结果决定是否加模拟次数或调整特征工程。这样既能更快拿到结果,也能避免资源被无效实验占满。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 胜率长期为 0 或始终低于 0.1% | 奖励函数稀疏,Agent 不知道死因 | 查看死亡楼层分布和平均到达楼层 | 增加阶段奖励或按楼层统计败因 |
| Agent 决策超时 | 搜索树过大或大模型推理太慢 | 统计单步耗时和候选动作数量 | 降低 simulation_rounds,增加超时上限 |
| 批量模拟进程卡住 | 游戏实例未释放或文件锁冲突 | 查看进程列表和日志输出 | 使用独立队列,重启挂死实例 |
| 日志解析结果不准 | 游戏版本输出格式变化 | 对比原始日志和解析规则 | 写兼容多个版本的解析器 |
| 在线接口调用失败 | 端口被占用或请求参数不一致 | 查看服务日志和接口文档 | 更换端口,统一请求结构 |
| 训练不收敛 | 超参不当或状态特征缺失 | 绘制胜率曲线和阶段指标 | 降低学习率,增加探索噪声,补充关键特征 |
| 第一层 Boss 击败率低 | 路线规划过于激进 | 统计精英战前血量 | 调整精英策略,优先保血量 |
| 心脏战一直输 | 终局策略没有考虑律动机制 | 单独测试心脏战存档 | 增加出牌次数约束和斩杀窗口判断 |
这些问题的核心规律是:先确定是环境问题、策略问题还是资源问题,再去改对应的部分。环境问题表现为链路跑不通、日志缺失、状态读取错误;策略问题表现为链路通畅但胜率指标没有提升;资源问题表现为批量模拟推不动、进程频繁被杀、接口超时。不要把策略问题和环境问题混在一起排查,否则会浪费大量时间。
9. 最佳实践与使用建议
经过这些测试和调参过程,我建议你把这套“故障机器人 A20 碎心”Agent 实验当成一个正规的算法工程项目来做,而不是随手跑一次脚本。下面几条实践建议在复盘和复现时非常重要。
第一,先跑一个小规模最小闭环。无论你的 Agent 最终采用 MCTS、强化学习还是大模型规划,第一版代码都应该先用随机策略跑通 20 到 50 局。这个阶段的目的不是赢,而是确认环境封装正确、日志输出完整、批量脚本能正常结束。最小闭环跑通后,再逐步加入策略逻辑,问题定位会清晰很多。
第二,保存每一局的完整日志和随机种子。A20 碎心本身随机性极强,单看一两局无法判断策略好坏。必须有可对比的实验组,才能确认某个改动真的带来了 0.1% 到 0.5% 的提升。推荐日志结构至少包含:run_id、seed、floor、result、heart_killed、final_hp,有条件的话再保存每一步的决策快照。这样任何一次异常结果都能回溯到原始决策过程。
第三,用分阶段胜率代替只看最终胜率。只看“心脏击杀率”会让人无法判断败因。建议同时统计第一层 Boss 击败率、第二层 Boss 击败率、第三层 Boss 击败率。如果某个阶段长期低于预期,就集中优化该阶段的策略,而不是盲目修改全局参数。这个思路同样适用于调试复杂系统:先缩小失败区间,再定位失败原因。
第四,Agent 服务化时要注意访问边界。把决策接口暴露在局域网或公网时,一定要加认证和限流,避免被外部请求打满资源。更稳妥的做法是只监听127.0.0.1,让它作为一个本地测试服务,游戏进程和 Agent 进程都跑在同一台机器上。
第五,合规使用边界要时刻清楚。本文讨论的自动化 Agent 只适用于本地研究和算法实验。如果你把它接入在线游戏,务必先确认是否符合用户协议,千万不要用机器人去影响正常玩家,也不要为了刷成就和排名去绕过平台限制。技术实验的价值在于验证决策算法,而不是破坏公平环境。
10. 总结与下一步
故障机器人 A20 碎心这个挑战,对 AI Agent 来说是一个非常好的高难度决策测试场。它把路线规划、卡组构建、战斗内决策、长局策略和随机性处理全部压进一个环境里,任何一个环节薄弱,最终胜率就会长期趴在 0.1% 附近。真正值得关注的不是“最后赢了一局”,而是 Agent 能不能通过批量模拟和日志复盘,把分阶段胜率稳步抬升,最终让“获胜路径”从统计上稳定复现。
如果你要复现或继续做这个方向,最先应该验证的是环境链路和日志统计:能不能用随机策略跑完 100 局并输出完整的阶段胜率。这个基础不牢,后面所有策略优化都无从谈起。最容易踩的坑则是把单局成功当成结论,或者一上来就跑超大模拟量的批量任务,结果资源和时间都浪费在无效实验上。
后续可以考虑几个扩展方向:一是在 MCTS 基础上加入可学习的价值网络,减少搜索深度;二是用大语言模型把卡牌文本、遗物规则和敌人意图转成结构化提示,生成候选策略再交给模拟器验证;三是把整条批量评估流程接入自动调参工具,让它按胜率反馈自动调整每局策略参数。每一步改进,都应该回到那个最朴素的指标看效果:1000 局里,到底能赢几局。