治理约 13 分钟

护栏、意图与 react-rails

Java 侧在不改 agent-core-java 的前提下补的扩展:工具护栏三段链、意图匹配路由、ReAct 增强 Rail。

依据 agent-solution 0.1.3 · main@bf702bc9(2026-11-03)核实

这是什么

agent-core-ext-java 基于 agent-core-java 的公共扩展点,补了一批可复用能力,不改 agent-core-java 源码。本关挑三块讲:工具护栏、意图套件、react-rails。

源码agent-core-ext-java READMEagent-solution/common/agent-core-ext-java/README.md@bf702bc9

它们本质上都是 agent-core 区讲过的 Rail:挂在智能体生命周期的钩子上,在调模型、调工具前后插入检查和控制。

工具护栏:三段链

智能体要调"写入订单系统"这类工具时,护栏决定放行、询问还是拒绝。ToolGuardrail.install 一次装好三个 Rail:

顺序Rail职责
1AllowedToolsGateRail白名单闸门:不在名单里的工具直接拒绝,不进入策略评估
2GuardrailPermissionRail权限引擎:按规则给出 allow / ask / deny;ask 抛出中断,等用户确认
3GuardrailDecisionObserverRail记录 allow / deny 决策,交给审计监听器
源码ToolGuardrail.installagent-solution/common/agent-core-ext-java/agent-core-ext-tool-guardrail/src/main/java/com/openjiuwen/agents/toolguardrail/ToolGuardrail.java:63@bf702bc9

几个值得学的设计取舍:

  • fail-closed 安装:配置没声明启用、宿主又往智能体配置里塞了另一份权限 Rail,都直接抛错。源码注释的理由是:看起来装了但没在拦,比拒绝启动更糟。
  • 重复安装是空操作:中断续跑会再次进入安装钩子,所以第二次安装静默返回,不要求每个宿主自己记"装过没有"。
  • 白名单两种失败处理不同:工具不在名单里 → 拒;名单本身读取失败 → 记警告、放行给权限引擎。因为后面还有引擎兜底,读配置失败就全拒只会造成整体停摆。
源码AllowedToolsGateRailagent-solution/common/agent-core-ext-java/agent-core-ext-tool-guardrail/src/main/java/com/openjiuwen/agents/toolguardrail/rail/AllowedToolsGateRail.java:49@bf702bc9

三档决策 allow / ask / deny,严格程度依次升高。配置值不合法时直接报错,不会悄悄变成空值——注释里说,一个悄悄失效的决策等于一个悄悄不再守护的护栏。

源码GuardrailLevelsagent-solution/common/agent-core-ext-java/agent-core-ext-tool-guardrail/src/main/java/com/openjiuwen/agents/toolguardrail/config/GuardrailLevels.java:19@bf702bc9

意图套件:先判断"用户要办什么"

agent-core-ext-intent-suite 面向 DeepAgent,把用户的话匹配到 Agent Card 的技能或自定义意图,再执行绑定的结果动作(比如委托给另一个智能体)。匹配器可以替换,生产上可以换成基于重排序模型的匹配器,匹配阈值可配置。

源码intent-suite READMEagent-solution/common/agent-core-ext-java/agent-core-ext-intent-suite/README.md@bf702bc9

远端 Agent Card 的注册、A2A 委托执行和 Spring 配置在 agent-runtime-ext-java 里,意图套件本身是纯类库。

react-rails:让 ReAct 收得住

ReAct 循环容易出现"自以为完成""原地打转""出错就乱试"。react-rails 补了几类 Rail:

方向做什么
结果验证与收敛按成功条件检查输出,不满足就纠正、重规划或降级
重规划与上下文治理限制重复尝试,压缩失败过程留下的上下文
停滞检测与完成检查发现无进展的循环,结束前检查关键条件
异常降级与自恢复保留根因,以可识别的状态结束
模型行为约束包装模型、约束阶段行为和工具调用
可观测性关键状态变化发结构化事件
源码react-rails READMEagent-solution/common/agent-core-ext-java/agent-core-ext-react-rails/README.md@bf702bc9

这些按需组合,不要求一次全开。

小结

  • 扩展工程靠 Rail 等公共扩展点增强 agent-core-java,不改其源码。
  • 工具护栏 = 白名单闸门 + 权限引擎 + 决策观察者,安装失败一律报错。
  • 意图套件负责"要办什么"的匹配和路由;react-rails 负责让 ReAct 循环收敛、可观测。

源码出处

链接指向固定提交,仓库后续更新不影响这里的行号。

过关测验

  1. 1. 护栏的三档决策按严格程度从低到高是?

  2. 2. 白名单读取失败(配置读不到)时,白名单闸门会怎样?

  3. 3. 护栏配置里 enabled 不是 true,却调用了 install(),会怎样?

通关条件

  • ○ 测验全部答对