玩过 MUD 的朋友应该都有同感:刷等级这件事,本质上就是“把同一组命令重复敲几百遍”。从一个房间走到另一个房间,遇到怪就 kill,打完就 get,血量低了就 cast heal,循环往复。偶尔摸鱼看个视频,角色就死在半路,装备掉一地,气得人想摔键盘。
所以很长一段时间里,我一直在琢磨能不能用大模型代替我做这些重复操作。最近借着 DeepSeek Harness 这类“AI Agent 外壳工具”的成熟,我终于把这件事从想法变成了实测:让 AI 读取 MUD 房间信息,自主分析局势,直接输出战斗命令,实现自动刷级。
本文就是这次实测的完整记录,内容包括 DeepSeek Harness 的核心概念、环境搭建、skill(技能)编写、完整战斗脚本的设计思路,以及内网部署、权限报错等高频问题。文章不假设你已经熟悉 Agent 开发,只要会基本的 Python 和命令行操作,就能跟着跑起来。
顺便说明一下:DeepSeek Harness 这类工具迭代比较快,不同版本在安装方式和插件目录上会有差异。本文会以“通用 Agent 工具链”的视角讲解,重点放在思路和完整可运行的示例代码上,具体版本以你实际下载的为准。
1. 背景与核心概念
1.1 为什么选择 DeepSeek Harness 来做 MUD 自动化
MUD(Multi-User Dungeon)是最早的网络游戏形态之一,整个游戏界面就是纯文本。玩家通过输入north、kill goblin、get sword这类指令与服务器交互,服务器返回描述文本,玩家再根据文本做下一步决策。
这种“文本进、文本出”的交互方式,和大模型天然契合。换句话说,MUD 就是最适合 LLM Agent 上手的测试场:
- 输入是纯文本,不需要处理图像和复杂 GUI。
- 决策空间有限,来回就是移动、战斗、拾取、施法这几类动作。
- 游戏状态可以完整写在上下文中,不需要额外做 RAG。
- 每一步决策都能立刻得到环境反馈,适合做“观察-思考-行动”循环。
但直接用 API 调大模型远远不够。我们需要一个能管理上下文、调用脚本工具、保存运行状态、处理多轮决策的“外壳”,这就是 DeepSeek Harness 这类 Agent 工具要解决的问题。
1.2 DeepSeek Harness 是什么
用一句话概括:DeepSeek Harness 是一个围绕 DeepSeek 系列大模型设计的 Agent 运行框架/外壳工具,它把“大模型对话能力”和“外部工具执行能力”组装在一起。
如果把大模型比作大脑,Harness 就像是给大脑装上了手脚、眼睛和记事本:
- 手脚:它能调用预设脚本,比如
move、attack、pickup等动作函数。 - 眼睛:它能接收外部环境输入,比如读取游戏返回的文本。
- 记事本:它能保存任务目标、历史状态、背包信息等上下文。
在 MUD 场景下,DeepSeek Harness 做的事情可以拆成三层:
环境层:MUD 服务器返回的文本状态 ↓ Harness 层:解析文本、组装上下文、触发 skill 脚本 ↓ 模型层:DeepSeek 模型根据上下文生成下一步动作1.3 DeepSeek Harness 与普通 API 调用的区别
很多初学者会觉得:“我不就是写个while True,然后调 API,把返回结果当命令发出去吗?”
理论上确实可以,但实际跑起来会发现几个麻烦:
| 对比维度 | 直接写调用脚本 | 使用 DeepSeek Harness |
|---|---|---|
| 上下文管理 | 自己拼字符串,容易越拼越长 | 有 token 窗口管理和历史裁剪策略 |
| 工具执行 | 要手动解析返回的命令文本 | 通过 skill 机制直接触发本地函数 |
| 插件扩展 | 每加一个功能就改一次主代码 | 按目录/配置新增插件即可 |
| 多轮任务规划 | 很难让模型记住“目标是升到 5 级” | 通过 system prompt 和任务状态持续约束 |
| 运行稳定性 | 异常重试、超时处理要自己写 | 框架层提供通用兜底策略 |
这也是我推荐用 Harness 这类工具来做 AI Agent 自动化测试的原因:它能让你把精力花在“定义 skill”和“设计提示词”上,而不是重复造一个 Agent 脚手架。
2. 环境准备与版本说明
2.1 运行环境
本次实测的目标是验证“AI 自动刷 MUD 等级”的闭环,所以我使用的环境如下:
- 操作系统:Windows 11(同时验证了 Linux 下的部署思路,下文会说明差异)
- 语言环境:Python 3.10+
- 模型调用:DeepSeek API,通过
OPENAI_API_KEY环境变量方式注入(兼容 OpenAI 协议) - Agent 工具:DeepSeek Harness(社区开源版本)
- 额外依赖:
requests、pyyaml、python-dotenv
特别说明:DeepSeek Harness 当前版本更新速度较快,部分命令和配置项可能已有变化。下面示例重点演示“配置思路”,遇到不兼容时请以官方仓库 README 的说明为准。
2.2 安装 DeepSeek Harness 与基础依赖
安装流程大致分三步。首先创建并激活虚拟环境:
mkdir mud-ai-agent && cd mud-ai-agent python -m venv venv # Windows venv\Scripts\activate # Linux / macOS source venv/bin/activate然后安装 DeepSeek Harness。不同版本的安装方式不太一样,常见的是通过 pip 安装或源码克隆:
# 方式一:通过 pip 安装(如果官方提供包名,以仓库说明为准) pip install deepseek-harness # 方式二:克隆源码后本地安装 git clone https://github.com/your-target/deepseek-harness.git cd deepseek-harness pip install -e .最后安装项目需要的辅助库:
pip install requests pyyaml python-dotenv2.3 示例项目结构
为了后续扩展方便,我建议把整个项目组织成下面的结构:
mud-ai-agent/ ├── venv/ # Python 虚拟环境 ├── config/ │ ├── settings.yaml # Harness 全局配置 │ └── model_config.yaml # 模型参数配置 ├── skills/ │ ├── mud_combat/ │ │ ├── skill.yaml # 战斗技能定义 │ │ ├── prompt.md # 独立提示词文件 │ │ └── actions.py # 动作执行脚本 │ └── mud_loot/ │ ├── skill.yaml │ ├── prompt.md │ └── actions.py ├── logs/ │ └── run.log # 运行日志 ├── .env # API Key 等敏感配置 └── main.py # 自定义启动入口(可选)3. 核心原理与关键配置拆解
3.1 从“对话”到“行动”:Agent 循环
DeepSeek Harness 作为 Agent 框架,核心运行逻辑就是下面这个循环:
1. 获取环境观察(MUD 返回文本) 2. 将观察写入上下文 3. 调用模型,得到动作决策 4. 解析动作决策,执行本地脚本 5. 将执行结果反馈给上下文 6. 回到第 1 步,直到任务目标完成说白了,这和我们人玩游戏时的思考过程是一样的:先看屏幕,再想策略,然后按键盘,最后看结果。DeepSeek Harness 只是把“看”、“想”、“按键盘”这三步分别对应到环境输入、模型推理、工具调用。
3.2 关键配置项说明
在config/settings.yaml中,我建议重点关注以下配置:
agent: name: "mud-farmer" max_steps: 2000 # 最大运行步数,防止无限循环 max_idle_seconds: 300 # 无操作超时时间 context_window: 8000 # 上下文窗口上限,超出后触发裁剪策略 model: provider: "deepseek" model_name: "deepseek-chat" temperature: 0.3 # MUD 决策建议用较低温度,减少随机动作 max_tokens: 200 # 限制每次输出长度,避免一次性输出太多内容 timeout_seconds: 30 executor: sandbox: true # 是否启用沙箱环境 allow_network: false # 是否允许 skill 内发起网络请求这里有几个容易踩坑的地方:
- temperature 不要调太高。MUD 战斗需要的是稳定决策,不是创造力。温度高容易出现“模型突然决定往东走”这种奇怪行为。
- max_tokens 要限制。如果模型一次输出几百个 token,里面混着闲聊、思考、命令,解析时很容易出错。
- max_steps 必须有。没有步数上限的 agent,一旦陷入死循环,会一直消耗 API 费用。
3.3 skill 机制:让 AI 获得“战斗技能”
skill 是 DeepSeek Harness 里最重要的扩展单位。你可以把 skill 理解成一个“给 AI 预装的功能包”。
一个标准的 skill 通常包含三部分:
- skill.yaml:描述这个技能什么时候触发、调用哪些函数。
- prompt.md:告诉模型这个技能的使用规范和动作列表。
- actions.py:真正执行的 Python 函数。
在 MUD 战斗中,我们需要的 skill 至少要有:
- 移动技能:从一个房间移动到另一个房间。
- 战斗技能:攻击目标怪物。
- 拾取技能:捡起战利品。
- 恢复技能:血量低时施法治疗。
- 状态分析:从房间描述中提取“血量”“怪物”“出口”等关键信息。
3.4 上下文管理:防止 AI 忘了自己要干什么
MUD 场景下上下文增长很快。每走一个房间,服务器就会返回一段新描述,如果每次都把原始文本丢给模型,几轮之后上下文就爆了。
DeepSeek Harness 的通用做法是“结构化摘要”:
- 原始文本进入后,先经过解析器提取关键信息。
- 关键信息压缩成固定格式的状态描述。
- 历史状态只保留最近 N 轮,更早的换成摘要。
举个例子,原始房间文本可能是:
你走进一个幽暗的洞穴,空气中弥漫着潮湿的气息。 这里明显的出口是 east 和 north。 一只洞穴蝙蝠在这里盘旋,看起来不太友好。 你的生命值:78/100,法力值:35/50。压缩后的状态可以写成:
[Room] cave_01 | exits: east, north [Enemy] cave_bat_01 | HP: unknown [Player] HP: 78/100 | MP: 35/50这种格式在第二次、第三次进入同一个房间时,可以显著降低 token 消耗。
4. 完整实战:让 AI 自动战斗刷等级
4.1 实战目标设定
我们要实现的目标是:
- 角色自动寻找可攻击的怪物。
- 击败怪物后自动拾取掉落物。
- 血量低于 30% 时自动使用治疗技能。
- 当前房间无怪时,自动移动到下一个房间。
- 持续运行,直到角色升到目标等级。
这个流程看起来很复杂,但拆解后也就是上面说的四类动作:看状态、做决策、执行动作、循环。
4.2 定义战斗 skill
首先在skills/mud_combat/skill.yaml中定义技能元信息:
name: "mud_combat" description: "MUD 自动战斗技能,用于扫描怪物、攻击、拾取和恢复" triggers: - "战斗" - "怪物" - "拾取" - "治疗" actions: - name: "scan_room" description: "解析当前房间文本,提取怪物、出口、玩家状态" function: "actions.scan_room" - name: "attack" description: "攻击指定目标" function: "actions.attack" parameters: target: "string" - name: "cast_heal" description: "对自身施放治疗技能" function: "actions.cast_heal" - name: "move" description: "向指定方向移动" function: "actions.move" parameters: direction: "string" - name: "loot" description: "拾取房间内全部掉落物" function: "actions.loot"然后在skills/mud_combat/prompt.md中定义提示词模板,这是整个 skill 的灵魂:
# MUD 自动战斗指令 你的任务是控制 MUD 角色进行自动打怪升级。你只能输出可执行的游戏命令,不能输出解释。 可用的命令如下: - scan:解析当前房间状态 - attack <target>:攻击指定目标 - cast heal:施放治疗术 - move <direction>:向指定方向移动 - get all:拾取所有物品 输出格式要求: 1. 每次只能输出一条命令。 2. 如果当前房间存在怪物且自身血量高于 30%,必须攻击怪物。 3. 如果自身血量低于 30%,优先执行 cast heal。 4. 如果房间内没有怪物,优先执行 move east 或 move north。 5. 如果房间内有可拾取物品,先 get all 再移动。4.3 编写动作执行层
接下来是实际的 Python 动作代码。这里我提供一个简化但可运行的示例。
在skills/mud_combat/actions.py中:
# -*- coding: utf-8 -*- """ MUD 战斗 skill 动作执行层 说明:这里演示的是动作层的执行逻辑, 实际接入 MUD 服务器时需要根据你的客户端协议调整命令发送方式。 """ import re def scan_room(raw_text: str) -> dict: """ 从 MUD 服务器返回的原始文本中提取状态信息。 返回结构化字典,方便模型做决策。 """ state = { "exits": [], "monsters": [], "items": [], "hp": None, "mp": None, } # 识别出口,常见 MUD 描述如 "明显的出口是 east, north" exits_match = re.search(r"出口[是:]?\s*([a-z,,\s]+)", raw_text, re.I) if exits_match: exits_text = exits_match.group(1) state["exits"] = re.findall(r"[a-z]+", exits_text.lower()) # 识别怪物,常见描述如 "一只洞穴蝙蝠在这里盘旋" monster_match = re.findall(r"[\u4e00-\u9fa5]*?(蝙蝠|哥布林|骷髅|狼|兽人|史莱姆)[\u4e00-\u9fa5]*", raw_text) state["monsters"] = monster_match # 识别生命值,常见格式 "生命值:78/100" hp_match = re.search(r"生命值[::]\s*(\d+)/(\d+)", raw_text) if hp_match: state["hp"] = { "current": int(hp_match.group(1)), "max": int(hp_match.group(2)) } return state def attack(target: str) -> str: """ 生成攻击命令。这里不真正连接游戏服务器, 而是返回一个字符串命令,由上层客户端发送。 """ return f"kill {target}" def cast_heal() -> str: """生成治疗命令。""" return "cast heal" def move(direction: str) -> str: """根据出口方向生成移动命令。""" return f"move {direction}" def loot() -> str: """拾取房间内物品。""" return "get all"需要注意:上面的scan_room是从网页版 MUD 或日志文件中解析文本用的。如果 DeepSeek Harness 直接对接 MUD 客户端,那么attack、move这些函数返回的命令字符串会被发送到游戏服务器,而服务器返回的新文本又会进入下一轮上下文。
4.4 编写主循环逻辑
这一步是整个 AI 自动战斗的核心循环。我用一个简化的 Python 脚本演示 Harness 内部的大致处理逻辑:
# -*- coding: utf-8 -*- """ 简易 Agent 战斗主循环,演示 DeepSeek Harness 的执行原理 实际运行请使用 Harness 的 agent 入口,这里仅展示核心思路 """ import os import time from dotenv import load_dotenv import openai # 加载 .env 中的 API Key load_dotenv() client = openai.OpenAI( api_key=os.getenv("DEEPSEEK_API_KEY"), base_url=os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com"), ) from skills.mud_combat.actions import scan_room, attack, cast_heal, move, loot def apply_model_decision(room_raw_text: str, history: list) -> tuple[str, list]: """ 调用 DeepSeek 模型,根据房间文本和上下文生成下一步动作。 返回 (执行结果, 更新后的上下文历史) """ # 将房间原始文本压缩为结构化状态 state = scan_room(room_raw_text) # 组装上下文:这里模拟 Harness 的 skill 上下文 prompt = build_skill_prompt(state, history) response = client.chat.completions.create( model="deepseek-chat", messages=prompt, temperature=0.3, max_tokens=100, ) # 模型输出的决策,例如 "attack 洞穴蝙蝠" 或 "move east" decision = response.choices[0].message.content.strip() # 这里建议对 decision 做格式校验,防止模型乱输出 return decision, history + [{"role": "assistant", "content": decision}] def build_skill_prompt(state: dict, history: list) -> list: """构造发给模型的 messages 列表。""" system_prompt = """ 你是 MUD 游戏中的自动化战斗助手。 根据给定的房间状态,选择最合适的动作。 输出格式必须是一个命令,例如: - attack 洞穴蝙蝠 - cast heal - move east - get all 不允许输出解释。 """ state_text = f""" 当前房间状态: 出口:{state['exits']} 怪物:{state['monsters']} 生命值:{state['hp']} 物品:{state['items']} """ # 简单组装:系统提示 + 历史最近的 6 轮 + 当前状态 messages = [{"role": "system", "content": system_prompt}] messages.extend(history[-6:]) messages.append({"role": "user", "content": state_text}) return messages def main_loop(room_raw_text: str, max_steps: int = 100): """简易战斗循环,最多执行 max_steps 步。""" history = [] current_room_text = room_raw_text for step in range(max_steps): decision, history = apply_model_decision(current_room_text, history) print(f"[Step {step}] 模型决策: {decision}") # 执行决策动作,并模拟服务器返回 if decision.startswith("attack"): # 模拟攻击成功后服务器返回的新房间文本 current_room_text = "你击败了怪物。这里明显的出口是 east。你的生命值:60/100" elif decision.startswith("cast heal"): current_room_text = "你施展了治疗术。生命值恢复到 90/100。这里明显的出口是 east。" elif decision.startswith("move"): current_room_text = "你来到了另一个房间。一只哥布林在这里。生命值:85/100。出口是 west。" elif decision.startswith("get all"): current_room_text = "你拾取了一些金币。生命值:85/100。出口是 west。" else: # 模型输出不合法,记日志并继续 history.append({"role": "user", "content": "上一条输出不是一个可执行命令,请重新输出。"}) time.sleep(0.5) # 避免请求过快,实际使用中可以去掉上面的代码演示了一个极简版本。真实使用 DeepSeek Harness 时,main_loop会由框架自身管理,我们只需要把skill.yaml挂载到 Agent 配置中即可。
4.5 运行与验证
在把 skill 挂载到 Harness 后,典型的启动方式是:
deepseek-harness start --config config/settings.yaml --skills skills/mud_combat或者在 Python 脚本中通过 Harness 的 API 启动:
from deepseek_harness import Agent agent = Agent( config_path="config/settings.yaml", skills_dir="skills", ) agent.run()运行成功后的日志大致会长这样:
2025-01-15 10:23:01 [INFO] 扫描房间:出口[east, north],怪物[洞穴蝙蝠] 2025-01-15 10:23:02 [ACTION] attack 洞穴蝙蝠 2025-01-15 10:23:05 [INFO] 战斗胜利,获得 25 经验值 2025-01-15 10:23:06 [INFO] 生命值 58/100,触发治疗策略 2025-01-15 10:23:07 [ACTION] cast heal 2025-01-15 10:23:09 [ACTION] get all 2025-01-15 10:23:10 [INFO] 当前房间无怪物,执行移动决策 2025-01-15 10:23:11 [ACTION] move east如果 AI 刷等级的整个流程能稳定循环,说明 Agent 的“观察-决策-执行”链路已经打通。
5. 常见问题与排查思路
在实测过程中,下面几个问题是出现频率最高的。我整理成了表格,方便直接对照排查。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 启动时报错依赖安装失败 | Python 版本过低,或 pip 源中包名不一致 | 升级到 Python 3.10+,关闭代理后重新安装;优先使用源码安装方式 |
skill 读取文件报权限问题:SetNamedSecurityInfoW failed (win32) | Windows 文件权限或杀毒软件拦截 | 以管理员身份运行终端;将项目目录加入杀毒软件白名单;检查目标文件是否被占用 |
| 模型一直输出解释文字,不输出命令 | system prompt 约束不够强 | 在 prompt 中强调“只允许输出一条命令”,并在代码里增加格式校验,非法输出直接重试 |
| 模型频繁重复同一个动作 | temperature 过高,或上下文没有新信息 | 降低 temperature 到 0.2-0.4;在 prompt 中加入“如果连续执行 3 次相同动作,必须更换策略” |
| 上下文越来越长,API 费用上涨 | 没有做状态摘要和裁剪 | 开启 Harness 的 context_window 裁剪;使用 scan_room 压缩原始文本 |
| 内网/离线局域网无法使用 | 默认依赖在线 API | 部署本地模型服务(如 Ollama 或 vLLM),修改model_config.yaml的 base_url 指向内网服务 |
| 插件无法安装 | 插件目录不对或权限不足 | 确认插件目录为skills/,检查目录权限;Windows 下避免使用系统盘根目录作为项目路径 |
下面单独展开三个重要问题。
5.1 SetNamedSecurityInfoW failed (win32) 的解决细节
这个报错本质上发生在 Windows 上修改文件安全描述符失败。常见触发场景是 skill 运行时读取prompt.md或写入日志文件,而目标文件所在的目录没有修改权限。
排查顺序建议如下:
- 查看报错发生在哪个文件路径,确认是文件读取失败还是目录创建失败。
- 右键项目文件夹 -> 属性 -> 安全,确认当前用户拥有“完全控制”或“修改”权限。
- 关闭杀毒软件的“受控文件夹访问”功能,或把项目目录加白名单。
- 以管理员身份重新打开终端再启动 Harness。
- 如果项目位于
C:\Program Files等受保护目录下,整体移到D:\workspace这类普通目录。
5.2 DeepSeek Harness 如何在离线局域网内部署
这个需求在有内网环境的企业中很常见。由于 Harness 只是 agent 框架,它本身不要求必须连接外网,关键在于模型推理的地址。
一种可行的方案是:
model: provider: "openai-compatible" base_url: "http://192.168.1.100:8000/v1" model_name: "local-model-name" api_key: "no-key-needed"然后用 vLLM 或 Ollama 在内网服务器上启动 DeepSeek 开源模型服务,再把 Harness 的base_url指向内网地址即可。这样 MUD 文本数据完全不出内网,适合需要数据隔离的场景。
5.3 模型乱输出怎么兜底
大模型偶尔会抽风,输出一些非命令内容,比如“好的,我来帮你分析一下当前局势……”。这种情况在长时间运行中几乎一定会发生。
建议做三层兜底:
- 第一层:prompt 约束,明确输出格式。
- 第二层:代码解析,检测到非法格式就重试,连续 N 次失败则休息 30 秒再继续。
- 第三层:步数上限和异常熔断,超过
max_steps自动停止,避免烧钱。
6. 最佳实践与工程建议
6.1 不要把全部逻辑都丢给模型
这是新手最容易犯的错误。很多人写完 skill 后,把“判断血量是否过低”“判断房间有没有怪”这类确定性逻辑全部交给大模型。效率低,成本高,还容易出现幻觉。
在 DeepSeek Harness 中做 MUD 自动战斗,我建议遵循“3-7 原则”:
- 70% 的确定性逻辑用代码完成:状态解析、血量判断、物品识别、命令合法性校验。
- 30% 的决策逻辑交给模型:在多个可行动作中选择最优策略、处理未预期情况、制定刷级路线。
举个例子,血量低于 30% 时强制cast heal,这个判断应该是actions.py里的一个if分支,而不是提示词里的一句建议。
6.2 做好日志和状态持久化
MUD 自动化通常要跑好几个小时,进程中断是很常见的事。如果每次中断都要从头开始,这个方案就没有实用价值。
建议至少保存以下状态:
{ "current_room": "cave_01", "level": 9, "exp": 1280, "hp": 66, "mp": 20, "step_count": 3421, "consecutive_failures": 0 }每次动作执行后,把状态写入logs/state.json。重新启动时先读取这个文件,让 Agent 知道“我刚才玩到哪里了”。
6.3 重视 API Key 安全
项目中的 API Key 属于敏感凭证。务必做到:
- 不硬编码在代码或
skill.yaml中。 - 统一通过环境变量或
.env文件注入,并把.env加入.gitignore。 - 团队协作时使用密钥管理服务,不直接传文件。
- 如果 Key 意外泄露,立即在控制台重置。
6.4 Agent 权限要尽量收敛
反复强调一个原则:给 Agent 开放的能力,只应该是它完成目标所必需的最小权限集合。
在 MUD 自动战斗这个场景中:
- 只需要开放房间扫描、移动、攻击、治疗、拾取这几类函数。
- 不要开放文件系统高级操作、网络请求、系统命令等无关能力。
- 在
settings.yaml中开启sandbox: true,限制 skill 的执行环境。
把这个习惯带到企业开发场景中,就是“最小权限原则”。无论 Agent 面对的是测试环境还是生产系统,先收敛权限,再谈效率。
6.5 MUD 自动化的边界提醒
最后想多说一句:MUD 游戏的规则差异很大,有些服务器明确禁止机器人或自动化脚本。做技术验证、学习 Agent 开发没问题,但如果要在某个服务器上长时间挂机,建议先查看该服务器的规则说明,或者只在允许自动化的测试服/单机版环境中运行。
做技术探索不代表可以无视服务条款。合规使用,才能避免账号处罚和法律风险。
7. 总结与下一步学习方向
这次实测带给我最大的感受是:用 DeepSeek Harness 这类 Agent 工具做 MUD 自动战斗,技术门槛其实不高,真正花时间的地方在于“如何把游戏规则翻译成模型能理解的动作空间”。
文章中提供的scan_room、attack、move等函数只是最基础的框架,接下来可以从以下方向继续深入:
- 增加经验计算器:让模型知道“击杀一只蝙蝠需要多久,升级还差多少经验”。
- 增加路径规划:通过地图拓扑结构,让 Agent 自动规划刷怪路线,减少来回折返。
- 增加背包管理:自动识别物品品质,低价值物品直接丢弃。
- 接入多模型协作:一个模型负责战斗决策,另一个模型负责地图记忆和路径记忆,减少单一模型上下文压力。
- 结合 ROS 或 OpenClaw 这类机器人框架:把同一套 Harness 思路迁移到更复杂的物理环境控制中。
MUD 只是一个有趣的试验田。把这场实测中调通的“观察-决策-执行”链路迁移到自动化测试、爬虫调度、运维巡检中,才是 DeepSeek Harness 这类工具更大的价值所在。如果你也正在折腾 Agent 自动化,建议从自己最熟悉的场景开始,哪怕只是自动整理日志、自动填表单,也先跑通一轮闭环。把第一个闭环跑起来,后面就顺了。