跳到主要内容
📖 本章预览

本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。

第19章 Agent 高级特性:Hook、路由与容错

19.1 Agent Hook 机制

19.1.1 什么是 Hook

Hook 本质上是 AOP(面向切面编程)在 Agent 领域的应用。Agent 的执行流程是一条链:接收输入 → LLM 思考 → 调用工具 → 返回结果。Hook 允许你在这条链的关键节点插入自定义逻辑,而不需要修改 Agent 本身的代码。

Agent 执行流程中可插入 Hook 的位置:

用户输入


┌──────────────┐
│ beforeRun │ ← 请求到达时:参数校验、日志记录、限流检查
├──────────────┤
│ beforeThink │ ← LLM 推理前:Prompt 改写、上下文注入
├──────────────┤
│ LLM 推理 │
├──────────────┤
│ afterThink │ ← LLM 推理后:思考过程记录、异常检测
├──────────────┤
│ beforeTool │ ← 工具调用前:权限校验、参数脱敏、调用拦截
├──────────────┤
│ 工具执行 │
├──────────────┤
│ afterTool │ ← 工具调用后:结果缓存、审计日志、异常处理
├──────────────┤
│ afterRun │ ← 最终返回前:结果过滤、敏感信息脱敏、计费统计
└──────────────┘


返回结果

为什么需要 Hook 而不是直接在 Agent 里写逻辑?

  1. 解耦:审计、限流、权限这些横切关注点不应该和业务逻辑混在一起
  2. 可插拔:不同场景组合不同的 Hook,不需要改 Agent 代码
  3. 可复用:同一个 Hook 可以挂到多个 Agent 上

19.1.2 Hook 接口设计

/**
* Agent Hook 接口
* 每个方法都有默认空实现,子类按需覆盖
*/
public interface AgentHook {

/** Agent 开始执行前(可用于参数校验、限流) */
default void beforeRun(AgentContext context) {}

/** Agent 执行完成后(可用于计费、审计) */
default void afterRun(AgentContext context, String result) {}

/**
* 工具调用前(可用于权限校验、参数拦截)
* @return true=允许调用,false=拦截
*/
default boolean beforeToolCall(String toolName, Object args) { return true; }

/** 工具调用后(可用于结果缓存、日志) */
default void afterToolCall(String toolName, Object args, Object result) {}
}

/**
* Agent 上下文:在 Hook 之间传递数据
*/
public class AgentContext {
private String input; // 用户输入
private String sessionId; // 会话ID
private String userId; // 用户ID
private long startTime; // 开始时间
private int toolCallCount; // 工具调用次数
private Map<String, Object> attrs; // 自定义属性(Hook 间传递数据)

public long getElapsedTime() {
return System.currentTimeMillis() - startTime;
}

// getter/setter 省略
}

19.1.3 实战:审计日志 Hook

这是最常见的 Hook,记录 Agent 的每一步操作,用于问题排查和合规审计。

/**
* 审计日志 Hook
* 记录 Agent 的完整执行轨迹:谁在什么时候调了什么工具,耗时多少
*/
@Component
public class AuditHook implements AgentHook {

private static final Logger log = LoggerFactory.getLogger(AuditHook.class);



🔒 解锁完整内容

本章剩余内容需要解锁后查看

以上仅为本章部分预览内容,完整内容包含更多深度源码解析、实战代码和面试要点。

加入知识星球你将获得:

  • ✅ 全部 26 章完整内容 + 持续更新
  • ✅ 配套源码 + 实战项目
  • ✅ 一对一答疑 + 面试辅导
  • ✅ 简历优化 + 内推机会

📚 本章完整目录

以下为本章完整目录结构,加入知识星球即可解锁全部内容。

19.1.4 实战:限流 Hook

19.1.5 实战:敏感信息过滤 Hook

19.1.6 实战:工具调用权限 Hook

19.1.7 Hook 注册与执行引擎

19.2 Agent 路由与动态分发

19.2.1 为什么需要路由

19.2.2 LLM 路由实现

19.2.3 规则路由实现

19.2.4 混合路由:规则优先 + LLM 兜底

19.3 Agent 流式执行与异步编排

19.3.1 流式输出原理

19.3.2 异步编排:多 Agent 并行执行

19.3.3 管道编排:Agent 串行接力

19.4 Agent 容错与降级

19.4.1 为什么 Agent 需要容错

19.4.2 实战:带完整容错的 Agent 执行器

19.4.3 实战:Agent 死循环防护

19.5 完整 Controller:暴露所有高级特性

19.6 各特性适用场景总结