<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>协议层 on Codexer</title><link>https://codexer.com/tags/%E5%8D%8F%E8%AE%AE%E5%B1%82/</link><description>Recent content in 协议层 on Codexer</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 06 Oct 2026 07:40:00 +0800</lastBuildDate><atom:link href="https://codexer.com/tags/%E5%8D%8F%E8%AE%AE%E5%B1%82/index.xml" rel="self" type="application/rss+xml"/><item><title>Codex 没看屏幕，40 分钟通关了魔兽新手村</title><link>https://codexer.com/posts/2026-10-06-codex-wow-protocol-layer/</link><pubDate>Tue, 06 Oct 2026 07:40:00 +0800</pubDate><guid>https://codexer.com/posts/2026-10-06-codex-wow-protocol-layer/</guid><description>&lt;p&gt;10 月 2 日，agent-wow 的作者贴出一次实验记录。他给 Codex 一句话：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;create an orc character and complete all quests in the starting zone
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;40 分钟后，任务清单清空了，角色一次没死，路上也没出什么岔子。整个过程里，他没有给模型看过一帧游戏画面，没有模拟键盘鼠标，也没有去动游戏客户端。模型背后是 GPT-6 Astra，推理档位拉到了 xhigh，它连的是游戏服务器本身。&lt;/p&gt;
&lt;p&gt;作者的原话是，他一开始根本不信这事能成。就算能成，也以为要折腾几个小时，中间还得走一堆弯路。&lt;/p&gt;
&lt;h2 id="为什么挑魔兽世界当考场"&gt;为什么挑魔兽世界当考场&lt;/h2&gt;
&lt;p&gt;这是作者从经典旧世一路玩到巫妖王的游戏，熟。更实际的理由是，魔兽世界在长期规划和短期操作之间有一个少见的平衡点。&lt;/p&gt;
&lt;p&gt;练满级这件事本身就是一棵依赖树：把前置任务链清完、装备凑到能进本、找到职业搭配合理的公会。每根枝条还能继续往下拆。某个部位的毕业装备要靠制造，制造又要资源和技能，角色可以自己去刷，也可以花钱买，两种做法通往同一个结果，路径完全不同。&lt;/p&gt;
&lt;p&gt;再往上就是团本。25 个人要同步，技能循环要打满伤害，脚下还得躲开火，一切都发生在几秒钟之内。&lt;/p&gt;
&lt;p&gt;这种结构正好能压测 agent：一部分任务需要提前好几步想清楚，另一部分必须当场做对。作者把目标放得很远，他想把整个服务器塞满 AI agent，看它们能不能在英雄难度下打通冰冠堡垒。打不过也行，能看到它们走到哪一步就算收获。&lt;/p&gt;
&lt;h2 id="这个框架不提供动作只提供模块"&gt;这个框架不提供动作，只提供模块&lt;/h2&gt;
&lt;p&gt;agent-wow 的取舍很硬。&lt;/p&gt;
&lt;p&gt;它不给模型截图，不模拟键鼠，也不去 hook 客户端。它的做法是让 agent 直接跟服务端讲话，用的是魔兽世界自己的网络协议。&lt;/p&gt;
&lt;p&gt;更要紧的是，这个框架里没有任何游戏动作。没有移动，没有攻击，没有对话。它只提供一套模块系统，agent 缺什么能力，自己写。&lt;/p&gt;
&lt;p&gt;作者原本不是这么想的。他最初的方案是做一个完全无头的魔兽客户端，把 agent 会用到的原语都封装整齐。写了 1.6 万行代码之后，移动原语还是一堆 bug，寻路做得很难看，整个方案被推翻。换成模块系统之后，框架本身的复杂度降了至少一个数量级。&lt;/p&gt;
&lt;p&gt;这个思路来自 Mindcraft。那边的做法是，当内置命令不够用时，允许 agent 自己生成代码去调 Mineflayer 的 API。agent-wow 沿用了同一条路，只是连内置动作都省掉了。作者还提到一个副作用：跑的次数多了，看 agent 反复自己实现哪些模块，就知道哪些原语是真需要的，可以收进核心，剩下的不必操心。&lt;/p&gt;
&lt;p&gt;实验全部跑在本地私有服务器上，用的是开源项目 AzerothCore，版本 3.3.5a，也就是巫妖王之怒的最后一个版本。线上服务器一次没连。&lt;/p&gt;
&lt;h2 id="它没有用你准备好的高层接口"&gt;它没有用你准备好的高层接口&lt;/h2&gt;
&lt;p&gt;作者原本押注 agent 会搭一层高层抽象，把 moveTo、castSpell 这类 RPC 方法暴露出来，好绕开底层的数据包。实际结果反过来了，它在协议层干得挺顺。&lt;/p&gt;</description></item></channel></rss>