开发复杂AI Agent系统时,经常遇到一个痛点:想在模型调用前增加日志、消息处理前后插入业务规则,就要侵入主流程代码。修改一处逻辑,就要改动核心链路,很容易出现牵一发而动全身的耦合问题。
我们希望核心Agent推理逻辑保持稳定,日志、RAG知识注入、安全过滤、多通道适配这些附加能力,都可以作为插件外挂,不需要改动框架源码,就能灵活增删业务逻辑。
Web开发领域,Gin的中间件通过洋葱模型,在HTTP请求生命周期实现非侵入扩展;而OpenClaw的Hook系统,把这套思想迁移到AI Agent的完整消息生命周期,并且做了进一步增强,不只是简单的洋葱链式调用,提供了多套执行模式,适配Agent各式各样的业务场景。
什么是Hook系统
Hook本质就是框架预先在业务流程的关键节点预埋好的“检查站”。 框架主流程只负责定义什么时候触发钩子,不关心钩子内部做什么业务;外部插件只需要向框架注册对应点位的处理函数,当程序运行到该节点,框架自动调度所有注册的插件逻辑。
核心价值:业务逻辑与Agent核心推理流程解耦。 新增审计、RAG增强、敏感词拦截、多消息通道,全部以插件形式注册Hook,主流程代码一行不用改。

OpenClaw将Agent从接收用户消息,到模型推理、工具调用、子Agent执行、消息输出落库,完整生命周期拆解出25个Hook点位,覆盖网关会话、消息入站、推理循环、消息出站、会话压缩、子Agent调度全链路。
| 分层 | 典型Hook点位 |
|---|---|
| 网关会话层 | gateway_start、session_start、session_end |
| 消息入站层 | inbound_claim、message_received |
| 推理循环层 | before_model_resolve、before_prompt_build、llm_input、llm_output、before_tool_call、agent_end |
| 消息出站层 | before_message_write、message_sending、message_sent |
| 系统辅助层 | 会话压缩、子Agent生命周期相关钩子 |
不同Hook点位职责边界清晰:
before_prompt_build:Prompt组装之前,适合注入RAG检索的外部知识;llm_input:Prompt已经拼接完成,即将发给大模型,适合做输入安全扫描、Prompt注入防御。
同样是修改上下文,介入时机不一样,分工明确,插件开发者可以在正确的节点做正确的事。
四种Hook执行模式,不止简单链式调用
Gin中间件基本是统一的洋葱串行模型,但是Agent业务场景复杂:有的逻辑只需要打日志,不需要阻塞主流程;有的需要串行修改数据;有的需要抢占消息处理权;热路径场景绝对不能允许异步延迟。
OpenClaw设计4种执行模式,每个Hook点位绑定固定模式,框架内部Dispatch调度入口自动匹配执行策略。
1. Void 模式|并行旁观者
行为:所有注册的Handler并行执行,不关心返回结果,单个插件报错不会阻断主流程。
适用:日志埋点、审计统计、事件通知。
代表点位:llm_output、message_received、message_sent
类比:路边监控摄像头,只记录事件,不干预车辆通行。
2. Modifying 模式|链式加工厂
行为:按优先级串行执行,前一个插件输出结果,作为下一个插件输入,支持自定义结果合并策略。
适用:Prompt增强、消息改写、动态切换模型配置。
代表点位:before_prompt_build、before_model_resolve
类比流水线,上一道工序产出交给下一道工序继续加工。 内置两种合并策略:
MergeFirstDefined高优插件优先覆盖;MergeAppend把多个插件的上下文字符串拼接在一起,RAG场景非常实用。
3. Claiming 模式|竞争认领
行为:按优先级依次执行,只要某一个插件返回
Handled=true,直接返回结果,后续插件全部跳过。适用:多消息通道分发。
代表点位:inbound_claim
类比出租车抢单,抢到订单的司机接管,其余司机直接退出。
4. Sync 模式|严苛热路径
行为:纯同步串行,禁止任何异步操作,追求极致低延迟。
适用:消息落库前拦截、内存状态同步,高性能热路径。
代表点位:before_message_write、tool_result_persist
类比百米计时器,冲线瞬间立刻返回结果,不能等待IO。
优先级机制
所有Hook注册时可以指定priority,数值越大优先级越高,优先执行。 Modifying、Claiming、Sync模式严格按照优先级排序;Void模式仅影响goroutine启动顺序,不保证执行时序。
和Gin中间件对比
- Gin中间件:统一洋葱模型,串行流转,依靠
c.Next()、c.Abort()控制流程;适合HTTP请求响应链路;全部是串行,没有并行事件、抢占认领、纯同步热路径区分。 - OpenClaw Hook:针对Agent生命周期,划分25个细粒度点位,四种调度模式;既支持链式修改,也支持并行事件通知、抢占认领、零异步开销热路径;配套完整结果合并策略,适配大模型RAG、多通道、工具调用、子Agent等AI特有场景。
二者底层思想同源:事件预埋 + 外部注册 + 非侵入扩展,但Hook系统针对Agent领域做了专门的架构增强。
Go核心Demo实现
talk is cheap,show me the code 完整代码包含Hook枚举、四种模式实现、合并策略、统一调度入口,并且模拟完整消息生命周期执行。
1 | // OpenClaw Hook System — Go 版核心实现 Demo |
总结
OpenClaw Hook系统,借鉴了Gin中间件非侵入扩展的设计思想,面向AI Agent场景做了深度定制。
- 将Agent完整生命周期拆解25个细粒度Hook点位,把黑盒的推理流程变成可观测、可干预的透明链路;
- 设计Void、Modifying、Claiming、Sync四种执行模式,覆盖事件通知、数据改写、抢占分发、高性能热路径;
- 配套优先级、多种结果合并策略,多个插件共存时行为可预期。
这套架构最大的收益:核心Agent推理逻辑稳定不动,RAG、安全过滤、审计埋点、多平台通道、子Agent能力全部以插件形式挂载。新增、删除、修改业务插件,不需要改动框架主流程代码,彻底解决Agent系统业务膨胀带来的耦合灾难。