Hook 系统
PicoClaw 提供了一套 Hook 系统,允许你观察事件、拦截 LLM 和工具调用、以及通过审批逻辑来控制工具执行——无需修改核心代码。
Hook 类型
| 类型 | 接口 | 阶段 | 是否可修改数据 |
|---|---|---|---|
| Observer(观察者) | EventObserver | EventBus 广播 | 否 |
| LLM interceptor(LLM 拦截器) | LLMInterceptor | before_llm / after_llm | 是 |
| Tool interceptor(工具拦截器) | ToolInterceptor | before_tool / after_tool | 是 |
| Tool approver(工具审批者) | ToolApprover | approve_tool | 否,返回允许/拒绝 |
Hook 触发点
- before_llm — 在每次 LLM 请求之前触发。拦截器可以改写请求内容。
- after_llm — 在 LLM 响应之后触发。拦截器可以改写响应内容。
- before_tool — 在工具执行之前触发。拦截器可以改写参数。
- after_tool — 在工具执行之后触发。拦截器可以改写结果。
- approve_tool — 在工具执行之前(before_tool 之后)触发。审批者返回允许或拒绝。
执行顺序
- 进程内 Hook(in-process)优先执行。
- 外部进程 Hook(process hooks)随后执行。
- 在同一组内,按 priority(优先级)排序,数值越小越先执行。
- 如果两个 Hook 优先级相同,则按名称(字典序)排序。
超时设置
全局默认值在 hooks.defaults 下配置:
| 字段 | 说明 |
|---|---|
observer_timeout_ms | 观察者回调的最大执行时间,超时后将被取消。 |
interceptor_timeout_ms | 拦截器的最大执行时间,超时后将被取消。 |
approval_timeout_ms | 审批者的最大执行时间,超时后工具调用将被默认拒绝。 |