Skip to content

Hook 系统

Hook 是 Agent 运行时的生命周期扩展点。通过注册 Hook,您可以在 Agent 执行的关键节点插入自定义逻辑,例如在每轮对话前注入知识、在对话结束后提取记忆、在工具调用前做权限检查等。

核心概念

事件驱动

Hook 基于事件模型运作。Agent 运行过程中会在关键节点发布事件,已注册的 Hook 监听到对应事件后执行自定义逻辑。

优先级排序

同一事件可以注册多个 Hook。执行顺序由 priority 决定,数值越小优先级越高(priority 5 先于 priority 10 执行)。

结果控制

每个 Hook 执行后返回结果,决定后续流程是继续、跳过还是中止。

事件类型

Agent 运行时支持 15 种事件,覆盖会话、对话轮次、工具调用、记忆处理和自动化运行的完整生命周期。

会话事件

事件触发时机典型用途
session_start会话开始初始化上下文、加载配置
session_end会话结束清理资源、保存状态

对话轮次事件

事件触发时机典型用途
pre_turn每轮对话处理前注入知识、准备上下文
post_turn每轮对话处理后日志记录、后处理
turn_complete轮次完成(异步)提取记忆、异步分析

工具调用事件

事件触发时机典型用途
pre_tool_call工具调用前权限检查、参数校验
post_tool_call工具调用后结果审计、指标采集

记忆处理事件

事件触发时机典型用途
pre_memory_inject记忆注入到提示前过滤或增强注入内容
post_memory_extract记忆召回后日志记录、内容过滤
pre_memory_store存储新记忆前敏感信息拦截、内容脱敏

演化与后台事件

事件触发时机典型用途
evolution_detected检测到用户行为模式自动调整策略
dream_scheduled后台整理任务被调度日志记录、资源管理

自动化运行事件

事件触发时机典型用途
run_start自动化运行开始初始化、通知
run_success自动化运行成功结果通知、触发后续
run_failure自动化运行失败告警、错误上报

执行模式

Hook 支持两种执行模式:

模式行为适用场景
sequential按优先级串行执行,遇到 Abort 立即中断后续需要严格顺序的场景
parallel所有 Hook 并行执行,互不阻塞可独立运行的场景

默认模式为 sequential

执行结果

每个 Hook 处理函数返回以下四种结果之一:

结果含义对后续 Hook 的影响
Continue正常继续无影响
ContinueWith正常继续,并携带数据传递给下游无影响,数据可被后续环节读取
Skip跳过当前事件的后续处理不执行后续 Hook
Abort中止执行,附带错误信息串行模式下中断后续;并行模式下仅记录日志

Hook 定位与加载规则

Hook 的注册来源分为两类,加载顺序如下:

1. 内置 Hook(builtin)

应用启动时自动注册,不可删除,但可以通过 CLI 或 UI 禁用。

Hook ID事件优先级模式超时说明
builtin:knowledge_retrievalpre_turn10parallel30 秒对话前检索 Agent 知识库,将相关知识注入上下文
builtin:process_turn_memoriesturn_complete10sequential60 秒对话后异步提取并存储学习记忆

2. 配置型 Hook(config)

在 Agent Profile 的 hooks 字段中声明,应用启动时按 Agent 逐一加载。

加载流程

  1. 应用启动 → 调用 register_builtin_hooks()
  2. 遍历所有 Agent → 读取每个 Agent Profile 的 hooks 字段
  3. 解析每条 Hook 配置 → 创建对应的处理函数 → 注册到全局 Registry

定位规则

  • 同一事件下,Hook 按 priority 升序排列(数值小的先执行)
  • 同一 id 的 Hook 会覆盖已有注册(后注册覆盖先注册)
  • 禁用的 Hook 保留在 Registry 中但不参与执行

Hook ID 命名约定

前缀来源示例
builtin:系统内置builtin:knowledge_retrieval
config:<id>Agent 配置来源注册时标记为 config:agent-123
custom:用户自定义custom:filter_sensitive

配置型 Hook

配置格式

在 Agent Profile JSON 的 hooks 数组中定义:

json
{
  "hooks": [
    {
      "id": "custom:log_turns",
      "event": "post_memory_extract",
      "priority": 50,
      "enabled": true,
      "action": "log",
      "config": { "level": "info" }
    },
    {
      "id": "custom:filter_sensitive",
      "event": "pre_memory_store",
      "priority": 10,
      "enabled": true,
      "action": "filter",
      "config": { "patterns": ["password", "secret", "api_key"] }
    }
  ]
}

字段说明

字段类型必填默认值说明
id文本-Hook 唯一标识
event文本-监听的事件类型(snake_case)
priority数字50执行优先级,越小越先执行
enabled布尔false是否启用
action文本-处理动作类型
config对象{}动作的配置参数

支持的 Action 类型

log — 日志记录

记录 Hook 事件到系统日志。

json
{
  "action": "log",
  "config": { "level": "debug" }
}

level 可选值:debug(默认)、infowarn

filter — 内容过滤

检查事件 payload 是否包含指定模式,匹配时跳过该事件的后续处理。

json
{
  "action": "filter",
  "config": { "patterns": ["password", "secret"] }
}

当 payload 中包含任一 pattern 字符串时,返回 Skip,阻止后续处理(例如阻止敏感信息被存入记忆)。

Hook 上下文

每个 Hook 执行时收到的上下文数据:

字段类型说明
event文本事件类型
agent_id文本(可选)当前 Agent ID
conversation_id文本(可选)当前对话 ID
run_id文本(可选)自动化运行 ID
query文本(可选)用户消息内容
timestamp文本ISO 8601 时间戳
payloadJSON 对象事件携带的数据

INFO

安全敏感字段(auth_tokenapp_handlecloud_api_base)不会序列化到 JSON 中,仅在 runtime 内部使用。

超时保护

所有 Hook 执行都有超时保护,超时后自动跳过并记录警告日志:

场景默认超时
普通 Hook30 秒
LLM 相关 Hook120 秒

超时不会导致系统崩溃,Hook 超时后返回 Continue,后续流程正常继续。

发布模式

Hook 事件有两种发布方式:

方式行为使用场景
publish阻塞等待所有 Hook 完成需要 Hook 结果的场景(如 PreTurn 注入知识)
publish_detached火力即忘,立即返回不需要等待结果的场景(如 TurnComplete 异步提取记忆)

CLI 管理

通过 CLI 可以查看和管理已注册的 Hook:

bash
# 列出所有 Hook
workova hooks:list

# 按事件类型过滤
workova hooks:list --event pre_turn

# 启用指定 Hook
workova hooks:toggle --event pre_turn --hook-id builtin:knowledge_retrieval --enabled

# 禁用指定 Hook
workova hooks:toggle --event pre_turn --hook-id builtin:knowledge_retrieval --no-enabled

适用场景

场景推荐事件说明
知识增强pre_turn在对话前注入相关知识提升回答质量
记忆提取turn_complete对话后异步提取关键信息存入长期记忆
敏感信息拦截pre_memory_store在存储记忆前过滤密码、密钥等敏感内容
工具调用审计post_tool_call记录所有工具调用的参数和结果
权限控制pre_tool_call在工具执行前检查权限,不满足时中止
运行状态通知run_success / run_failure自动化运行结束后发送通知

下一步

Workova 官方文档