一条消息的完整流转

用一个完整场景把 pipeline、guard、effect 串起来,看清谁在什么时候被调用

这篇不再单看某一个点,而是把三种 hook 串起来。

场景

你有一条进入系统的消息,希望它经历这三步:

  1. 先补充来源和页面信息
  2. 再检查这条消息是否已经审核
  3. 最后记录一次观测日志

宿主代码

const enriched = await city.powers.scope({ agent_id: agent.id, workspace_id: workspace.id }).pipeline("chat.enrich_message", {
  text: "Please summarize this page",
});

await city.powers.scope({ agent_id: agent.id, workspace_id: workspace.id }).guard("review.require_checked", enriched);

await city.powers.scope({ agent_id: agent.id, workspace_id: workspace.id }).effect("audit.observe", enriched);

对应的 Power 们

MessageAugmentPower

负责 pipeline:

  • 给输入补字段

ReviewGuardPower

负责 guard:

  • 判断能不能继续

AuditEffectPower

负责 effect:

  • 记录发生过什么

这三步为什么不能混成一个点

因为它们回答的是三种不同问题:

  • pipeline:值要不要变
  • guard:流程能不能过
  • effect:要不要记录点什么

如果把它们都塞进一个点里,后面几乎一定会变得难读。

读这篇最该得到的感觉

hook 不是“某个 Power 自己决定什么时候跑”。

而是:

  • 宿主先定义调用顺序
  • Power 再在每个点里参与

相关文档