乐于分享
好东西不私藏

告别玩具级 Agent:OpenClaw + Hermes 把 800 行"上帝类"重构到 189 行的真实复盘

告别玩具级 Agent:OpenClaw + Hermes 把 800 行"上帝类"重构到 189 行的真实复盘

告别玩具级 Agent:OpenClaw + Hermes 把 800 行"上帝类"重构到 189 行的真实复盘

在 AI 编程时代,如果你还在用对话框让 AI “帮我重构一下这个文件”,那你还没走出新手村。面对 800 行以上、耦合了业务逻辑、WebSocket、限流器和全局状态的“屎山”,普通的对话式 AI 会瞬间产生幻觉,甚至删库跑路。

真正能深入骨髓动刀的,是“脑机分离 + 人类统筹”架构。

1. 物理四肢:隔离沙箱(sandbox_api.py)

核心逻辑:AI 必须活在笼子里。我们通过 Docker 容器提供一个物理隔离的 API,让 AI 通过指令操作文件,而不是直接给它宿主机权限。

sandbox_api.py - 运行在 Docker 隔离环境from flask import Flask, request, jsonifyimport subprocessimport osapp = Flask(name)WORKSPACE = "/workspace" # 容器内工作目录@app.route('/tools/bash', methods=['POST'])def execute(): # 限制 AI 的活动范围,只能在 /workspace 下折腾 cmd = request.json.get("command") try: # 设置超时保护,防止 AI 写出死循环 res = subprocess.run(cmd, shell=True, capture_output=True, text=True, cwd=WORKSPACE, timeout=30) return jsonify({"status""success""out": res.stdout, "err": res.stderr}) except Exception as e: return jsonify({"status""error""msg"str(e)})if name == "main": app.run(host='0.0.0.0', port=5001)

2. 推理大脑:Hermes 协议(hermes_brain.py)

核心逻辑:大脑只负责“想”,不负责“做”。它通过Function Calling将思考转化为对沙箱的 API 调用。

hermes_brain.py - 负责 ReAct 循环import requestsfrom openai import OpenAI# 定义大脑可见的“手”TOOLS = [{ "type""function", "function": { "name""bash", "description""执行 Bash 命令修改文件", "parameters": { "type""object", "properties": {"command": {"type""string"}}, "required": ["command"] } }}]def run_task(prompt): # 典型的 ReAct 循环:思考 -> 动作 -> 观察 -> 再思考 messages = [{"role""user""content": prompt}] for _ in range(20): resp = client.chat.completions.create(model="gemini-3.1-pro", messages=messages, tools=TOOLS) # 如果大脑要动“手” if resp.choices[0].message.tool_calls: # 转发指令给沙箱 (5001 端口) # ... 执行并获取返回结果 ... else: if "TASK_COMPLETED" in resp.choices[0].message.content: break

3. 人类统筹:最后的防线(fix_main.py)

核心逻辑:重构中,AI 极易因为“代码平移”导致导入顺序错误。此时不需要再跟 AI 废话,人类直接接管,用一段极其精准的AST 或正则脚本进行微创修复。

fix_main.py - 人类主刀医师的紧急补丁import redef fix_imports(): with open("enterprise_api_server.py""r"as f: code = f.read() # 修复常见 Bug:app.include_router 必须在 app = FastAPI() 之后 app_init = re.search(r"app = FastAPI(.?)", code).group() routers = re.findall(r"app.include_router(.?)", code) # 清理掉错误的乱序位置 new_code = re.sub(r"app.include_router(.*?)\n""", code) # 在正确的位置缝合 new_code = new_code.replace(app_init, app_init + "\n" + "\n".join(routers)) with open("enterprise_api_server.py""w"as f: f.write(new_code)

4. 重构战果:星型放射架构

重构后的项目彻底告别了“单文件上帝类”,形成了单向依赖的闭环:

模块职责变化
dependencies.py全局血库:存放 limiter、ws_manager🆕 打破循环依赖的关键
routes/*.py各级分遣队:Auth、Metrics、Alerts🟢 高内聚,各管各的
server.py中央指挥部:只负责配置与挂载📉 830行 -> 189行

5. 架构师的复盘手记

关于 Lobster (网关):当你的模型额度 (Quota) 耗尽时,千万别在 Agent 里死磕,应该在网关层做Round-Robin (轮询)

关于 OpenClaw (沙箱):它不仅是安全的边界,更是“上下文”的实体。AI 不需要记住所有代码,它只需要学会使用grep去沙箱里查。

关于人类:AI 负责体力劳动(搬运、改名、写样板代码),人类负责拓扑设计(决定谁依赖谁)。

结语:工程重构的终极范式

AI 辅助编程的尽头,不是让人类工程师下岗,而是将其逼向更高维度的角色——架构设计者与兜底者。
在这个三位一体的系统中:
AI 大脑:不知疲倦的推演者
隔离沙箱:无菌手术台
人类:握着最终决定权、在拓扑死锁和架构崩塌前力挽狂澜的主刀医师
高内聚,低耦合。
这不仅是代码的最高准则,也是人类与 AI 协作的终极形态