Agent工坊

【Agent工坊】Hermes Agent 自主循环实战:让Agent自己判断"什么时候该停、什么时候继续"

最好的Agent不是一次回答就结束的,而是能像人类一样"先试一步,看看结果,再决定下一步"。这篇文章教你搭建一个能自主跑完20步复杂任务的Agent循环——成本可控,不会死循环。

为什么你的Agent总是"浅尝辄止"

你有没有遇到过这种情况:让Agent分析一个GitHub仓库的架构,它只读了README就下结论;让它排查一个多文件bug,它看完第一个文件就说"没问题"。

问题不在模型能力,在于缺少自主循环机制。默认的Agent模式是:

用户提问 → Agent回答 → 结束

而真正能干活的是:

用户提问 → Agent思考 → 执行工具 → 观察结果 → 再思考 → 再执行 → ... → 自己判断"够了" → 输出最终答案

这就是 ReAct(Reasoning + Acting)循环,也是Hermes Agent自主任务的核心引擎。

ReAct循环的四个阶段

一个完整的自主循环包含四个关键判断点:

阶段1:解析任务 — 我到底要做什么?需要哪些工具?预期结果长什么样?

阶段2:执行+观察 — 调用工具,拿到结果,分析是否满足需求。

阶段3:收敛判断 — 我现在停手够不够?还需要继续吗?

阶段4:合成输出 — 把中间过程串成完整答案。

大多数Agent倒在阶段3——它不知道什么时候该停。要么提前放弃(浅尝辄止),要么永远不满足(死循环)。

实战:搭建一个"自主代码审查员"

下面是一个真实可用的Agent配置,让Hermes Agent自主审查GitHub PR——它会自己决定读几个文件、看多少行、是否需要深挖。

System Prompt 核心设计

你是一个自主代码审查Agent。你的工作方式是:

1. 首先,列出你需要检查的所有文件
2. 逐个读取文件,每次读完后判断:
   - 这个文件有问题吗?(有→标记,无→跳过)
   - 需要看更多上下文吗?(需要→读相关文件)
3. 当满足以下条件时停止:
   - 所有核心文件都已审查
   - 或已连续3个文件无新发现
   - 或已审查超过15个文件(防止死循环)
4. 输出结构化审查报告

关键原则:每次只读一个文件,读完后在回复中明确说明:
  [进度:已审查 3/8 文件,发现 2 个问题]
  [下一步:审查 src/auth.py,因为 user.py 引用了它的 validate_token 函数]

收敛条件的设计艺术

收敛条件是自主循环的灵魂。太松→死循环,太紧→浅尝辄止。我总结了三层收敛策略:

硬上限(安全阀)
- 最大工具调用次数:15-20次
- 最大耗时:300秒
- 超过任一硬上限,强制输出当前结果

软收敛(质量保障)
- 连续N步无新信息:如果连续3次工具调用都没有发现新问题/新数据,说明边际收益归零
- 信息覆盖率:定义了"必须检查的清单",全部打勾就停

质量判断(智能决策)
- 让Agent每次输出时自评:"我目前掌握的信息能支撑一个合格答案吗?(是/否)"
- 连续两次"是"就停

死循环防护的三种机制

机制1:步数计数器

在Agent的上下文中维护一个隐式的步数计。每执行一次工具调用,步数+1。当步数达到预设上限时,Agent必须输出最终答案,不允许再调用工具。

实现方式:在system prompt中加入——

你的总步数上限是15步。第10步时我会提醒你准备收尾。
如果你在第15步后还在调用工具,系统会强制终止并只保留你上一轮的输出。
请主动管理进度——在剩余3步时优先合成结论而非继续探索。

机制2:重复检测

如果Agent连续两次调用同一个工具、同一个参数——这是死循环的典型信号。

在上下文管理中检测:

if (current_tool == last_tool and current_args == last_args):
    # 注入提示:你刚才已经执行过这个操作,请尝试不同方法或开始收尾

机制3:信息增益递减检测

记录每次工具调用的返回值长度。如果连续3次返回的信息都在缩短,且都小于上次的50%,说明Agent在"抠细节"——此时应该触发收尾。

返回值长度序列:[3200, 2800, 900, 450, 200]  ← 第3次开始递减
                                     ↑ 触发收尾提示

完整配置模板

以下是可直接在Hermes Agent中使用的自主循环配置:

System Prompt片段:

你是自主任务Agent。遵循ReAct循环:

[循环规则]
1. 每次回复包含:思考过程 + 1个工具调用(或最终答案)
2. 在工具调用前,用 [分析] 说明为什么要调这个工具
3. 收到工具结果后,用 [观察] 总结关键发现
4. 用 [决策] 说明下一步:继续探索 / 开始收尾 / 输出答案
5. 最多15步,剩余3步时自动切换为收尾模式

[收尾条件 - 满足任一即停]
A. 完成任务清单中所有项
B. 连续3步无实质性新发现
C. 步数达到15(强制停止)
D. 连续两次 [决策] 判断为"可以输出答案"

成本控制:自主循环的Token管理

自主循环最大的风险是Token消耗失控。每多一轮对话,上下文就膨胀一轮。控制策略:

策略1:中间结果压缩

不要把所有工具返回值原样保留。每3轮做一次中间总结——

[中间总结 - 第6步]
已完成:读取5个文件,发现3个问题
关键发现:
- auth.py: JWT过期时间硬编码(P0)
- payment.py: SQL注入风险(P0)
- user.py: 密码哈希算法过时(P1)
待检查:2个关联文件

然后删除前6轮的原始工具输出,只保留这个总结。实测可节省40-60%上下文Token。

策略2:文件读取分段

不要一次读整个大文件。用 read_fileoffsetlimit 参数:

# 先读前50行,确认文件结构
read_file(path="src/main.py", limit=50)

# 发现关键代码在200行附近,精确定位
read_file(path="src/main.py", offset=190, limit=30)

这比"读全文件"节省约70%的Token。

策略3:提前终止信号

在System Prompt中训练Agent识别"已足够"的信号:

以下情况应立即停止探索并输出答案:
- 找到了明确的根因(不需要再验证其他假设)
- 目标数据的80%已获取(足够支撑结论)
- 再深入一层需要的信息成本超过收益(如需要读50个文件确认一个边缘case)

实战数据:一个真实案例的对比

我用同一个任务测试了两种Agent模式——审查一个3000行的Python项目。

指标 单次问答模式 自主循环模式
审查文件数 2个(只读了README和main.py) 11个(覆盖全部核心模块)
发现问题 1个(表面问题) 7个(含2个P0安全漏洞)
Token消耗 3,200 18,500
耗时 8秒 47秒
报告长度 200字 1,200字

自主循环多花了6倍Token和6倍时间,但产出质量是10倍以上。对于代码审查、竞品分析、深度调研这类任务,这个投入完全值得。

行动指南:三步启动你的第一个自主Agent

第一步(10分钟):选择一个"需要多步探索"的真实任务,比如"分析这个GitHub项目的架构并输出模块依赖图"

第二步(5分钟):复制上面的System Prompt片段,设置步数上限为10,开始测试

第三步(迭代优化):观察Agent的决策日志,重点调优:
- 收尾条件是否合理?(太早停→降低阈值;太晚停→提高阈值)
- Token消耗是否可控?(超过5万Token→加入中间压缩)
- 重复率是否太高?(连续相同调用→强化重复检测)


关注「AI创业内参」,回复「自主循环」获取完整配置文件和3个真实案例的决策日志。

Agent工坊 #HermesAgent #自主Agent #ReAct循环 #一人公司