Agent自检机制深度拆解:OpenClaw与Hermes在GLM 5.3上的成败差异
2026/9/25 1:40:54 网站建设 项目流程

最近在关注机器人智能体(AI Agent)的同学,应该都看过一个很有意思的社区实验:把 OpenClaw 2.0 与 Hermes Agent 放到同一类任务闭环里,再让它们跑在相同的 GLM 5.3 基座模型之上,对比到底哪个“更会干活”。网上讨论热度很高,但很多人最开始只关心工具名,或者更关心“ GLM 5.3 API 怎么接”这类细节。实际上,这组实验最有价值的地方并不在某个 Agent 框架能调用多少函数,而在于两类实现暴露出的一个核心差异:自检方式。

这篇文章就围绕这个实验展开,重点拆解 Agent 里经常被忽略的“自检”机制到底是什么,OpenClaw 2.0 与 Hermes Agent 在自检路径上的区别为什么会影响任务最终成功率;同时给出可上手的调试思路、最小代码示例和踩坑清单。如果你正在做 Agent 应用、接大模型做自动化任务,或者刚接触 Hermes Agent、GLM 5.3 这类词,这篇文章会比较适合你。阅读完整篇文章后,你至少能回答几个问题:自检是“做完再查一遍”吗?自检为什么会导致死循环?如何设计更稳的任务收敛条件?

1. 一次社区实验背后的真正看点

1.1 实验的主角:OpenClaw 2.0 与 Hermes Agent

OpenClaw 2.0 与 Hermes Agent 都属于智能体框架/工具链这个范畴。智能体框架解决的核心问题不是“调用一次大模型”,而是把一个复杂任务拆成长流程,并让模型在每一步之间决定下一步动作:是读文件、执行命令、调用 API,还是把已经得到的结果汇总出来。

在没有框架的情况下,开发者往往需要自己写大量的while循环与状态机,模型输出什么动作,代码就去执行什么动作,执行完以后再把新状态喂回给模型。OpenClaw 2.0、Hermes Agent 这类工具存在的意义,就是把这套循环工程化、可观测化。有些框架偏重“尽可能多地暴露工具和插件”,有些框架偏重“先想清楚再做”,这种倾向会影响它在真实任务中的稳定性。

在本次针对 GLM 5.3 的对比实验中,很多人原本预期差距会体现在“谁能生成更长的推理链”或“谁能更快地调用 API”上。可实际观察下来,模型参数量相同、上下文长度相同,最终导致任务分叉的往往是完成子步骤后的自我校验。也就是说,两个 Agent 在干同一件事,但“干完以后如何确认自己真的干对了”的方法不一样。

1.2 为什么基座模型选择 GLM 5.3

实验中同时把两个 Agent 跑在 GLM 5.3 基座模型上,是为了尽量控制基座能力这个变量。通俗地讲,把汽车轮胎都换成同一品牌同一型号,才能判断底盘调校和转向系统的差异。

GLM 系列在国内大模型生态里应用很广,尤其在企业 API 接入场景中,开发者通常会选一个性价比合适的模型版本作为 Agent 的“大脑”。从社区反馈看,GLM 5.3 对工具调用、JSON 结构化输出、长指令遵循的支持已经相当可用,玩家不必再花大量时间做 Prompt 纠偏。

有一点要说明:不同版本、不同渠道(官方开放平台、阿里百炼等云厂商接入、开源权重本地部署)在服务细节上可能不同。你看到“GLM 5.3 API”字样时,最好先确认服务商提供的模型名和请求格式,不要默认同一套 endpoint 在所有环境里都适用。后面文章示例里我会用 OpenAI 兼容协议的通用写法,因为很多 Agent 框架默认就能对接兼容接口。

1.3 “自检方式”为什么成为差异焦点

我们可以把 Agent 的任务执行过程拆成三个主要环节:理解目标、执行子步骤、确认完成。前两个环节在同一个基座模型下差距通常不会特别夸张,真正容易出问题的是第三个环节“确认完成”。

有的 Agent 执行完一个步骤后,只问一次模型:“你完成任务了吗?”模型回答“完成了”,就进入下一步。这种自检本质上是“结果置信度自评”。另一种 Agent 则不会轻信模型的第一句回答,而是重新读取工具返回值、检查文件状态、对比预期输出结构,得到结构化证据后才确认完成。

Rohan Paul 的公开实验标题里给出的判断,正是把差异指向了自检方式。这个判断并非说两个框架在宏观能力上差不多,而是指:当外部模型一样、工具差不多时,自检方式决定了 Agent 是从“看起来干完了”进化到“确实干完了”的关键变量。本文后续所有拆解都围绕这个结论展开。

2. Agent 自检机制的全景解析

2.1 自检并不是“让模型再读一遍结果”

很多刚接触 Agent 开发的读者容易把 self-check / self-reflection 理解成:在最后把历史对话重新发送给模型,让模型总结一下。严格来说,这只是最基础的自检,而且并不一定有效,因为大模型很可能会顺着之前的上下文继续给出自洽但错误的内容。也就是说,模型刚才在某一步产生了错误假设,你让它总结这段历史,它大概率会维护这个错误假设,而不是识别出来。

真正的自检应该包括三类信息:

第一类是“状态自检”,重点是环境与任务状态是否如实变化。例如 Agent 负责把某个文件从 A 目录移动到 B 目录,自检不能只问模型“移动成功了吗”,而应该真实执行ls B目录,看看目标文件是否存在、文件大小是否一致。第二类是“结构自检”,重点验证模型输出是否符合预期 schema:字段是否齐全、类型是否正确、JSON 能否被解析。第三类是“目标自检”,重点比较当前结果与任务目标的语义偏差,这一层最复杂,通常还需要调用大模型判断。

这三者共同构成一个比较完整的自检闭环。OpenClaw 2.0 和 Hermes Agent 的差异,往往不是在某个框架里完全没有某一层,而是它们在默认流程里更侧重哪一层。

2.2 基于结果回读的自检 vs 基于模型自查的自检

我在实际调试 Agent 时的体会是:自检方式大致可以分成两种风格。

一种可以叫“结果回读式”。它强调证据,Agent 执行完一个工具动作后,必须再把结果数据读回来,与期望值作比较。比如调用了数据库更新 SQL,自检阶段不是等待模型感叹“更新成功”,而是重新执行SELECT抽查受影响数据;比如调用了网页抓取工具,自检阶段会再次检查返回文档是否包含目标选择器命中的节点。这种方式的优点是错误识别率高,缺点是开销大、速度慢,而且要求开发者把足够多的“校验工具”配给 Agent。

另一种是“模型自查式”。它减少外部工具调用,主要依赖大模型对当前上下文做判断。比如模型执行完一步后,通过一段提示词要求自己“请检查上一步是否满足用户需求,如果满足输出 DONE”。这种方式开销小,写起来也简单,但问题在于模型容易出现“自我感觉良好”。在某些上下文较长、工具返回信息稀疏的场景下,模型甚至会在文件根本没有生成成功时,天真地回答“已经完成任务”。

在 GLM 5.3 这类新模型上,模型自查的准确率通常会比旧模型好不少,因为模型指令遵循能力在增强。但即便能力再强,如果没有外部证据兜底,遇到“假成功”的情况仍然可能发生。所以实验中出现的一个现象是:同样一次任务,Hermes Agent 能通过自查快速收敛,OpenClaw 2.0 则因为多追一步文件检查显得“更慢”,但后续步骤踩坑更少。

2.3 自检的粒度与频率会放大差异

除自检方式本身外,自检的“粒度”也是影响体验的关键。频率过高会让 Agent 陷入无休止的验证,既消耗 token,也容易误判一些临时性失败;频率过低则会让错误累积,导致最后一步难以收敛。

多数 Agent 框架允许开发者在任务定义处设置 max_steps 或 max_iterations,这就是一个最外层的收敛条件。自检频率则往往由工具的 trigger 决定:有的工具是每执行一次就触发完整自检,有的工具允许你自定义“仅在关键节点自检”。在复杂任务里,更建议把自检频率控制在“影响后续步骤的状态变更处”。例如修改配置后必须自检,读取一个网页后可以选择性自检。

这里还需要考虑模型上下文长度的限制。自检信息如果不经过压缩就回填到上下文,很容易让上下文快速膨胀。GLM 5.3 这类模型虽然支持不错的长上下文,但成本与延迟会随 token 增加而上升。在生产环境中,建议把自检结果做摘要,只把核心字段与结论发回给模型,而不是把整段日志塞进下一轮 prompt。

3. GLM 5.3 在 Agent 自检链路中的角色

3.1 自检不是模型独立完成的事

很多读者以为,只要基座模型够强,Agent 的自检能力就自动变强。实际上,模型只是自检链路里的一个“判断器”,它能否发挥作用,取决于开发者有没有把外部世界的信息转成模型可以判别的文本或结构化数据。

举例来说,假设 Agent 要通过 API 创建一台云主机,创建接口返回了{"code":0,"message":"success","instanceId":"i-12345"},模型很容易判断成功。但如果网络抖动导致返回结果只是空字符串,模型就完全无法判断。此时 Agent 必须有一个“外部执行器”,让它去调用查询接口再次确认主机状态。GLM 5.3 可以做状态语义理解,但补不了缺失的观测信息。

所以,在整套链路里,GLM 5.3 更像是一个强大的“判断与规划模块”,而 OpenClaw 2.0 与 Hermes Agent 的不同,是通过不同的封装把观测信息喂给这个模块。

3.2 使用 GLM 5.3 做 Agent 基座时的通用调用方式

截止目前,很多国内模型服务商都提供 OpenAI 兼容接口。这种方式的好处是,你在代码里只需要将base_urlapi_keymodel替换成实际服务商参数,框架侧不需要做太多定制。

下面给出一段最小调用示例,展示如何用通用 SDK 请求一个类 GLM 对话模型。请注意,我这里没有硬编码服务商地址,因为不同渠道差异较大,必须按你自己的实际环境进行替换。这段代码的意义在于说明:基座模型只负责输出文本/JSON,外部自检逻辑由你的 Agent 代码负责。

# 文件路径:glm_client_demo.py # 说明:以 OpenAI 兼容接口为例,具体参数请以你使用的服务商文档为准。 from openai import OpenAI client = OpenAI( api_key="YOUR_API_KEY", # 建议从环境变量读取 base_url="YOUR_BASE_URL" # 例如 https://open.bigmodel.cn/api/paas/v4 ) def call_glm(system_prompt: str, user_prompt: str, temperature: float = 0.2): response = client.chat.completions.create( model="glm-5.3-flash", # 模型名以服务商实际返回为准 messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}, ], temperature=temperature, ) return response.choices[0].message.content

你可能会看到网络教程里写glm-5.3-flashglm-5.3这类模型名,但不同区域的账号、不同云平台不一定完全一致。稳妥的做法是,先通过服务商的“模型列表接口”确认当前账号可用模型名,再把它填到代码里。

3.3 Agent 自检结果如何回传模型

自检结果回传时,我建议采用结构化文本,不要直接把整段工具输出丢回模型。举一个格式示例:

[Self-Check Result] step_id: 3 tool: move_file target_path: /data/archive/report_2025.pdf status: success evidence: /data/archive/report_2025.pdf exists, size=204800 bytes

这类格式能帮助模型快速聚焦信息,减少把大量无关返回内容放入上下文。结构固定的好处还在于:GLM 5.3 这类模型经过大量代码/JSON 训练后,对清晰结构非常敏感,当自检信息结构混乱时,模型反而容易产生幻觉式推断。所以在自检环节,“清不清楚”甚至比“准不准确”更影响模型后续判断。

4. OpenClaw 2.0 与 Hermes Agent 的自检差异实践观察

4.1 实验对比的典型任务设计

为了理解差异,我们先设定一个抽象任务:Agent 需要从某个数据源读取 20 条记录,对每条记录做清洗,最后将结果写入目标 CSV,并且生成一份摘要报告。

两种 Agent 在这个任务上的执行路径可能都有如下步骤:读取源文件、调用模型清洗字段、写 CSV、读回 CSV 验证行数、生成报告。但实际对比时,我建议把任务故意做得“容易出错”一些,例如源文件中包含 2 条非法 UTF-8 字符、目标目录不存在、某条记录缺字段。这样才能把自检方式的差异放大。

网上的一些实验里,大家会同时用 mock 工具制造“假成功”:比如写文件接口在磁盘已满时仍然返回成功,但写入字节数为 0。这种情况下,只有带“结果回读式自检”的 Agent 能发现问题。如果你的 Agent 完全依赖模型自查,几乎必然会把“已成功”的假消息当成事实继续执行。

4.2 观察维度:收敛时间、错误率、token 开销

建议从三个维度记录两个 Agent 的差异。

第一维度是“任务完成度”,看最终 CSV 文件是否完整、报告是否包含所有摘要指标。第二维度是“收敛步数”,看 Agent 在执行过程中是否出现反复修改但没有任何进展的情况。第三维度是“token 消耗”,因为自检会引入额外模型调用与外部检查,开销必然上涨。

从社区实验反馈来看,OpenClaw 2.0 与 Hermes Agent 的差异并不绝对。若任务结构化程度高,偏向外部工具操作,那么结果回读式自检更稳,Agent 的表现往往更好;若任务偏重语义分析,没有固定正确格式,你很难定义外部校验规则,此时模型自查式自检会表现得更加灵活。

注意一点:不能用“某个框架在某个案例上不行”来直接给框架定性。配置方式、工具集数量、自检提示词质量都会影响最终结果。实验价值更多在于给开发者一个判断方向:你要做的任务适合哪一种自检路径。

4.3 简化自检循环示例

下面我写一个高度简化的 Agent 循环示例,重点演示“带证据自检”和“纯模型自查”在流程上的区别。代码不一定对应某个具体框架,但结构是所有 Agent 框架都相似的。

# 文件路径:agent_loop_demo.py import json def run_tool(tool_name: str, params: dict): """模拟执行外部工具,返回执行结果字典。""" # 真实项目中这里会调用 subprocess / requests / 文件操作等 if tool_name == "write_csv": # 故意模拟:接口返回成功,但并没有真正写入数据 return {"status": "success", "written_rows": 0, "fake_ok": True} if tool_name == "read_csv": return {"status": "success", "row_count": 0} return {"status": "unknown"} def model_self_check(history: list) -> bool: """ 模拟纯模型自查:只问模型一句‘是否完成’。 这里不真正调用大模型,只是演示控制流位置。 """ # 假设模型基于历史上下文回答“完成了” print("[Model Self-Check] 根据上下文判断任务是否完成...") return True def evidence_based_check(expected_rows: int) -> bool: """ 基于证据的自检:重新读取文件,确认写入行数是否达到预期。 """ result = run_tool("read_csv", {}) print(f"[Evidence Check] 实际读回 {result['row_count']} 行") return result["row_count"] >= expected_rows def agent_loop(check_mode: str): history = [] # 第一步:写入 CSV run_result = run_tool("write_csv", {"path": "/tmp/result.csv"}) history.append({"tool": "write_csv", "result": run_result}) if check_mode == "model_self_check": done = model_self_check(history) else: done = evidence_based_check(expected_rows=20) print(f"最终判定结果: {done}\n") if __name__ == "__main__": print("运行纯模型自查模式:") agent_loop(check_mode="model_self_check") print("运行基于证据的自检模式:") agent_loop(check_mode="evidence_based")

这段代码第一次运行时会打印类似下面的内容:

运行纯模型自查模式: [Model Self-Check] 根据上下文判断任务是否完成... 最终判定结果: True 运行基于证据的自检模式: [Evidence Check] 实际读回 0 行 最终判定结果: False

注意,这里write_csv工具被设计成“假成功”。模型自查模式容易被欺骗,而基于证据的自检模式通过读回文件发现了真实状态。这个简化示例说明了自检方式差异的本质:是否把“外部事实”引入判断。

5. 在工程中落地自检:代码级别的最小实现

5.1 用结构化 JSON 约束自检结果

比起让模型自由文本回答“是否完成”,工程上更推荐让它输出一个 JSON。例如,设计一个自检函数,要求模型从历史信息中提取以下字段:is_completemissing_fieldsrecommended_next_action。这样后续代码可以根据is_complete进入下一步或触发重试。

下面是一段把 GLM 返回解析成结构化自检结果的示例:

# 文件路径:structured_check_demo.py import json from glm_client_demo import call_glm def run_structured_check(task_desc: str, observation: str) -> dict: system_prompt = ( "你是一个任务执行监察器。根据观察信息判断任务是否已经完成," "只输出 JSON,不要输出多余解释。" ) user_prompt = f"""任务描述: {task_desc} 当前观察: {observation} 请输出如下 JSON: {{"is_complete": true/false, "reason": "简短原因", "missing": ["缺失项"]}} """ raw = call_glm(system_prompt, user_prompt, temperature=0) try: # 兼容模型输出可能带 ```json 包裹的情况 text = raw.strip() if text.startswith("```json"): text = text[7:] if text.endswith("```"): text = text[:-3] return json.loads(text) except json.JSONDecodeError: # 容错:无法解析时默认不通过,防止带错状态继续执行 return {"is_complete": False, "reason": "model output invalid", "missing": []}

关键点是解析失败时不要“猜测任务完成”,默认按未完成处理会更安全。这是我在 Agent 工程中踩过的一个坑:模型偶尔会输出一段正常文本但缺少 JSON 关键字段,如果解析器不严格,就会把None当成成功状态,导致后续跳过必要步骤。

5.2 自检失败后的重试策略

自检失败不代表整个任务失败,很多时候只是某个子步骤执行不完整。重试策略设计不当,会引发无限循环。推荐使用指数退避加上最大重试次数。下面是一个最小实现思路:

# 文件路径:retry_demo.py import time from structured_check_demo import run_structured_check MAX_RETRY = 3 BASE_DELAY = 1.0 def execute_task_with_retry(task_desc: str, steps: list): observation = "" for attempt in range(MAX_RETRY): # 执行子步骤,真实项目中这里会调用工具函数 for step in steps: observation += f"执行步骤: {step}\n" check = run_structured_check(task_desc, observation) if check.get("is_complete"): return {"status": "success", "check": check} delay = BASE_DELAY * (2 ** attempt) print(f"第 {attempt + 1} 次自检未通过,等待 {delay}s 后重试") time.sleep(delay) return {"status": "failed", "reason": "超过最大重试次数"}

在实际的 OpenClaw 2.0 或 Hermes Agent 部署里,上限值最好做成配置项,不要写死。因为不同任务对重试的耐心完全不同:执行数据库变更时,你可能只允许重试一次;抓取外部网页时,允许重试五次也未必够。把配置与业务场景解耦,才干得出比较稳的 Agent 系统。

5.3 回到主页面、重复导航类问题的自检陷阱

网络热词里经常有人问“Hermes Agent 回到主页面的命令是什么”,这其实反映出 Agent 在做 UI 自动化或多页面任务时常出现的一类典型问题:Agent 执行了一个返回主页的动作,但页面渲染有延迟,自检时页面还没有正式跳转,模型误以为仍在旧页面,从而又执行一次返回命令。

处理这类问题,单纯靠重试并不高效。更好的做法是引入“等待条件”自检:不是直接检查“操作是否成功”,而是先轮询目标页面状态,直到满足某个稳定条件后再确认。例如检查某个主页特有的控件是否存在,若存在就认为已回到主页,否则等待 500ms 继续轮询,最多轮询 10 次。

这类自检方式的代码示例并不复杂:

# 文件路径:wait_condition_demo.py import time def is_on_homepage(driver) -> bool: """判断当前是否处于主页,具体实现依赖你的 UI 自动化框架。""" # 这里只做演示,实际代码应替换为对主页特征的判断 return driver.page_source.find("home-logo") != -1 def go_home_and_wait(driver, max_wait: float = 5.0): driver.execute_script("window.location.href = '/home'") deadline = time.time() + max_wait while time.time() < deadline: if is_on_homepage(driver): return True time.sleep(0.3) # 超时后返回最后一次判断结果,交由上层决定是否重试 return is_on_homepage(driver)

所以,如果你看到 Agent 不停“回主页面”死循环,问题通常不是缺少一个命令字符串,而是缺少对“页面是否已稳定”的自检条件。

6. 常见问题与排查思路

6.1 归纳成表:安装、运行与自检问题

问题现象常见原因解决思路
Hermes Agent 安装后启动失败依赖版本不兼容,或安装时未完成 Python 环境激活先确认 Python 版本是否在要求范围内,再重装依赖;重点关注日志里第一个报错模块
安装过程中要求登录网站不同发行版可能内置账号体系或激活校验确认是否是官方渠道要求;不要随意绕过后台校验;查看日志判断是否有默认账号配置
Agent 明明调用工具成功,却反复重试工具返回值里没有可验证的状态字段,自检逻辑无法确认修改工具封装,将结构化状态放入返回值末尾
模型总回复“已完成”但任务结果缺失纯模型自查缺少外部证据增加结果读回类自检,如读取文件、查询数据库、调用状态接口
上下文越来越长,模型开始答非所问自检时把完整工具日志直接放回 prompt自检结果需要摘要压缩,只保留关键字段
同一段任务在 GLM 5.3 上表现不稳定模型版本或服务商接口不一致,或未开启 JSON mode先固定模型版本与温度参数,再检查返回格式
Agent 卡在“回到主页面”这类导航循环自检没有等待页面渲染完成使用等待条件轮询,直到目标特征出现

6.2 排查自检问题时的推荐顺序

遇到自检类问题时,不要一上来就调大模型 prompt。我建议按下面的顺序排查:

第一步,打开 Agent 运行日志,找到最近一次判断“任务完成”的位置。第二步,检查它做出判断前拿到哪些证据。如果日志里只有模型自己的分析文本,没有任何工具状态返回,说明自检基本是模型自查式,需要补工具阅读。第三步,人工模拟这个工具调用,确认工具是否真的会产生可观测状态。第四步,再调整自检代码,让它去读取可观测状态。

一个很常见的坑是:把工具封装成“只返回成功/失败”,而没有返回结果细节。这会让再强的基座模型也没法做有效自检,因为模型根本看不到数据真实变化。所以,建议所有工具返回尽量包含状态、变更数量、关键样本等字段,这是自检机制能够发挥作用的前提。

6.3 不要忽视幂等设计

自检失败会触发重试,而重试必须考虑幂等。也就是说,同一个操作执行两次,结果不应发生冲突。比如“新建云主机”这种操作天然不具备幂等性,如果第一次实际已经创建成功,但自检没来得及确认,然后重试创建了一次,会造成资源重复。

解决思路有二。一种是为每次任务分配 request_id,目标系统支持按 request_id 去重;另一种是在执行前先查询“是否已经存在同类资源”,存在则跳过创建。在 OpenClaw 2.0 或 Hermes Agent 的任务配置里,开发者需要特别关注那些带有“创建类”语义的工具函数,给它们加上前置查询步骤,而不是盲目依赖重试。

7. 最佳实践与工程建议

7.1 给自检代码划分四个层级

我在项目里会把自检逻辑分成四层,避免写成一个巨型函数。

第一层是“语法检查层”,负责检查模型输出能否被正确解析为 JSON、参数是否合法。第二层是“工具执行层”,负责通过真实命令或 API 调用验证状态,例如检查文件是否存在。第三层是“业务规则层”,负责判断结果是否满足业务约束,例如金额必须大于 0。第四层是“目标语义层”,负责用大模型评估结果是否与用户原始意图一致。前两层用普通代码实现,尽量不用大模型;后两层才把大模型作为判断器。这样设计既能提升确定性问题处理速度,也能保证灵活任务的自检质量。

如果所有自检都用大模型做,你会遇到成本高、延迟高、判断不稳定三重问题。GLM 5.3 在一定程度上提高了句子级判断的准确率,但不代表它应该替你去执行ls命令或查询数据库。

7.2 日志与观测是自检的镜子

Agent 失控时会破坏文件、重复下单或陷入循环。若没有日志,事后排查会非常痛苦。建议为每次 Agent 会话记录完整的结构化执行轨迹:

{ "session_id": "8f9a3c1d", "step": 4, "tool": "write_csv", "tool_status": "success", "self_check_mode": "evidence_based", "self_check_passed": false, "evidence": { "read_rows": 0, "expected_rows": 20 }, "ts": "2025-06-06T10:12:33Z" }

这个结构相当于给 Agent 装了一个黑匣子,后续复盘时,只要查自检失败前后的几条轨迹,就能定位是工具问题还是判断逻辑问题。生产环境建议把这类日志发送到集中式日志平台,并基于关键指标设置告警,例如“自检失败率超过 30%”就应该告警,而不是等用户投诉。

7.3 权限与安全边界

Agent 一旦接入外部工具与 GLM 5.3 这类云模型 API,你就必须把权限边界想清楚。不要把数据库高权限账号、生产环境密钥直接写在 Agent 的默认配置里。更合适的做法是使用环境变量或密钥管理服务动态注入,并在 Agent 配置里限定可执行工具列表为最小集。

对删除、批量更新、创建外部资源这类高风险操作,除了在代码层增加二次确认,还应在工具函数内部记录审计日志。我曾经见过一个 Agent 因为自检逻辑误判,把一份未备份的旧数据当成垃圾数据循环清理。从那以后,涉及删除类工具,我都会在前置检查之外再加一条硬编码限制:如果删除数量超过阈值,必须人工审批。

7.4 自检提示词应避免诱导模型承认成功

给自检模型写提示词时,也应遵循中立性原则。不要写成“如果结果看起来不错就回答成功”,这种表述会诱导模型趋同。更推荐的写法是:

请根据证据列表逐项判断: 1. 文件是否生成。 2. 数据行数是否不少于 20。 3. 关键字段是否有缺失。 只有当所有条件都满足时,才输出 is_complete=true。

这种把判断条件显式列出来的做法,能让 GLM 5.3 更稳定地执行二分类判断,而不是自由发挥。自由文本判断偶尔会有惊喜,也更容易有惊吓;显式条件在 Agent 流水线里性价比更高。

8. 总结与下一步可以做的实验

这篇围绕 Atomic Bot 实验的分析,核心是把 OpenClaw 2.0、Hermes Agent、GLM 5.3 放进同一张工作台,拆解它们之间的真实差异不在“谁能输出更长的推理链”,而是“完成任务后,谁会用什么样的证据来确认成功”。自检方式看起来只是 Agent 流程里的一小段,但它会直接影响任务能够稳定收敛、会不会产生幻觉状态、以及多步任务的最终成功率。

如果你想快速判断自己的 Agent 项目最需要补哪块,可以这样自查:当前系统报错时,是停在“不知道该调哪个工具”,还是停在“明明调了工具但对自己的结果没有信心”?前者是规划问题,可以靠更强模型、更多工具描述解决;后者往往是自检问题,需要从状态回读与结果验证入手。

下一步还可以继续做这些实验:设计一个“故障注入”测试集,故意让工具返回假成功,然后比较不同自检策略下的失败率;或者在 Hermes Agent 上尝试外接知识库后,观察自检是否会引用更多事实证据;再或者在不同基座模型(包括 GLM 5.3 的不同规格)上跑同一套自检用例,验证模型升级到底能补多少自检短板。

只要把握住“模型负责判断,代码负责取证”的原则,这类实验就不难复现,也会给你自己的 Agent 工程带来不少改进线索。对文中示例工程的配置细节有疑问的朋友,欢迎在评论区留下你使用的框架与报错场景,我们可以继续针对具体实现展开讨论。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询