Plugins

Plugin Hooks 和 Resolve

用一页总览看清 pipeline、guard、effect、resolve 的区别,并进入更细的运行说明

Plugin Hooks 和 Resolve

这一组能力最容易让人混淆的原因是:

  • 它们都写在 plugin 定义里
  • 看起来都像“注册一个函数”
  • 但运行语义完全不同

如果只记一句话,可以先记这个:

  • pipeline:改值
  • guard:拦截
  • effect:做副作用
  • resolve:给唯一答案

先看总对比

类型谁来触发是否返回新值是否允许多个 handler失败会怎样最适合的事
pipeline宿主代码主动调用抛错并中断当前调用逐步加工一份值
guard宿主代码主动调用不会任一 handler 抛错就中断前置校验、权限判断
effect宿主代码主动调用不会任一 handler 抛错就中断当前 effect 调用记录、埋点、同步
resolve宿主代码主动调用不会,只能一个没注册、重复注册、disabled 都会报错提供唯一权威答案

最容易忽略的一点

plugin 里声明了 hook,不代表它会自动执行。

真正的执行方式是:宿主代码在某个明确时机,主动调用某个点。

例如:

const value = await agent.plugins.pipeline("chat.enrich_message", input);
await agent.plugins.guard("review.require_checked", value);
await agent.plugins.effect("audit.observe", value);
const role = await agent.plugins.resolve("auth.resolve_role", {
  userId: "owner",
});

也就是说:

  • hook 是“扩展点定义”
  • 宿主调用是“扩展点执行”

如果宿主从来不调用这个点,这个 hook 就永远不会跑。

为什么 resolve 要单独看

很多人会下意识把 resolve 当成“另一种 hook”。

但它本质上更像:

  • 一个 authority point
  • 一个“最终到底谁说了算”的问题

所以它和前三种最大的区别是:

  • 前三种允许多个 plugin 一起参与
  • resolve 只允许一个 plugin 成为最终回答者

这就是为什么:

  • 重复注册同一个 resolve 点会直接报错
  • 没有 resolver 也会报错
  • resolver 对应的 plugin 如果 disabled,也会报错

推荐阅读顺序

  1. 总心智模型
  2. 调用流
  3. Pipeline
  4. Guard
  5. Effect
  6. Resolve
  7. 怎么选

直接看完整场景

相关文档