Hooks
文档API 参考
LIGHTER / DOCUMENTATION

Hooks API

四种钩子使用相同的构造方式。运行示例见使用生命周期钩子。

公共构造参数

new BeforeModelHook({ hookName, description?, hookFunction })

其他钩子类同样接收这三个字段:

字段 必填 说明
hookName: string 是 钩子标识,也是实例的公开只读属性
description?: string 否 描述,也是实例的公开只读属性
hookFunction 是 回调函数,具体类型见下表

回调类型

类 输入 允许的返回值
BeforeAgentHook AgentRequest AgentRequest | void | Promise<AgentRequest | void>
BeforeModelHook ModelRequest ModelRequest | void | Promise<ModelRequest | void>
AfterModelHook AssistantMessage AssistantMessage | void | Promise<AssistantMessage | void>
AfterAgentHook BaseMessages BaseMessages | void | Promise<BaseMessages | void>

所有回调都会被等待。返回 undefined 时保留当前值;返回替换值时采用替换值。当前实现使用空值合并,但类型不允许返回 null。

AfterAgentHook 的输入与返回值是消息数组,不是完整的 AgentResponse。

execute()

类 公开方法
BeforeAgentHook execute(request: AgentRequest): Promise<AgentRequest>
BeforeModelHook execute(request: ModelRequest): Promise<ModelRequest>
AfterModelHook execute(message: AssistantMessage): Promise<AssistantMessage>
AfterAgentHook execute(messages: BaseMessages): Promise<BaseMessages>

这些方法由 Agent 或 Model 自动调用。直接调用时,回调异常会向调用方抛出。

调用时机与失败

  • beforeAgent:每次运行开始时一次,尚未加入 Agent 的系统提示词。
  • beforeModel:每次模型请求前,包括工具结果返回后的下一次调用。
  • afterModel:每次获得完整助手消息后,早于 Agent 执行其中的工具调用。流式增量不经过此钩子。
  • afterAgent:当前在循环成功结束后一次,早于 Agent 包装最终结果。

Agent 捕获这些钩子的异常后返回或产生失败结果;直接调用 Model 时,模型钩子异常直接抛出。当前模型失败或提前结束流时跳过 afterAgent,不能将它用作保证执行的资源清理钩子。

示例

import { AfterAgentHook, AssistantMessage } from "@yong_xie/lighter";

const appendNotice = new AfterAgentHook({
  hookName: "append-notice",
  hookFunction: (messages) => [
    ...messages,
    // 返回消息数组,Agent 会将它放入最终响应的 messages。
    new AssistantMessage("本次回复仅供参考。"),
  ],
});

将此实例传给 new Agent({ model, hooks: { afterAgent: appendNotice } })。此钩子只影响最终返回的消息,不会追加一次模型调用,也不会将内容作为流式增量发送。