摘要:本文围绕 Agent 的生命周期展开,系统梳理了代理层钩子(before_agent、after_agent)、模型层钩子(before_model、after_model)以及包装/拦截钩子(wrap_model_call、wrap_tool_call)三类拦截机制。文章详细说明了各阶段钩子的典型用途,包括权限隔离、长期记忆读取、风控、上下文剪枝、敏感数据脱敏、死循环熔断、结果修正、缓存命中、重试降级、高危操作审计、最小权限注入等,帮助读者理解如何通过钩子机制对 Agent 的执行过程进行精细化管控。
内容参考于:图灵AI大模型全栈
Agent的生命周期
它这样的一个过程
首先是进入Agent之前(before_agent)
然后是进入模型之前(before_model)
然后是进入模型之后(after_model)
然后是进入Agent之后(after_agent)
然后是调用模型的时候(wrap_model_call)
然后是调用工具的时候(wrap_tool_call)
中间件就是在上方4个过程之间做拦截,比如在进入Agent之前做些什么事,然后进入模型之前做些什么事,然后进入模型之后做些什么事,然后进入Agent之后做些什么事
通过Agent的生命周期,可以看出它有三种,代理层(Agent层)钩子、模型层钩子、包装/拦截钩子,钩子可以理解为拦截
代理层钩子分:before_agent和after_agent,也就是进入Agent之前和进入Agent之后
进入Agent之前:
1.可以做权限的隔离和身份的注入,方便后续的流程中使用,通过这个就可以限制用户可以访问哪些功能,比如vip用户使用特殊的模型,普通用户使用普通模型,还有知识库可以通过权限来获取对应的索引,工具也可以通过权限来限制用户可以不可以使用
2.从数据库中读取长期记忆到状态中,就是读取用户的爱好、历史信息放到状态中,这样后续执行任务的时候就可以通过状态获取用户的爱好
3.风控,比如敏感词过滤、提示词注入检测等,当检测到敏感信息比如手机号可以对它进行星号加密,如果有提示词注入可以直接拒绝访问
4.动态策略,就是说根据用户的等级权限调整Token的预算和使用次数
进入Agent之后
1.指令评估和监控,就是当Agent执行完可以对它的结果进行一个评估看看好不好,然后把结果放到监控平台上
2.计费,当Agent执行完后可以对用户的余额进行扣减
3.外部系统,比如把Agent的结果写到工单里然后人工审批
4.存储记忆,就是把长期记忆存储到硬盘上(持久化到数据库里)、
模型层钩子:before_model和after_model,也就是进入模型之前和进入模型之后
进入模型之前
1.上下文剪枝,就是处理很长的聊天记录,对历史的消息进行总结保留关键的信息
2.敏感数据脱敏,比如手机号、身份证这种信息,再给模型之前可以对它们进行加密
3.注入检测风险,用户的问题或工具检索到的结果里面可能存在访问内部数据的脚本,这就需要审核才能进行执行,如果直接让它执行了会暴露我们的数据
4.死循环熔断,大模型和工具它们都是互相调用的,工具可以调用大模型,大模型也会调用工具,这样就会形成一个死循环,在进入模型之前就可以检测是否出现了死循环
进入模型之后
1.修正结果,比如我们想要结构化的数据,比如json结构,这一步可以检测大模型返回的内容是否缺失内容从而导致数据是非json结构,比如缺失大括号、引号、中括号,如果一直修复不成功可以再次调用任务重新生成
2.幻觉,处理大模型的幻觉
3.拒答拦截,我们问大模型比如DeepSeek、豆包一些敏感内容,它会回答什么什么换个话题这样的内容,如果出现这样的回答,我们可以拦截一下,返回一个我们自己设定好的回答
包装/拦截钩子:wrap_model_call和wrap_tool_call,也就是调用模型的时候和调用工具的时候
调用模型的时候
1.缓存命中,现在的模型它有一个机制,通过提示词回答完后,它会把提示词和结果缓存起来,当有人用了缓存中一模一样的提示词又去提问时会把缓存里的结果返回给用户,也就是在调用模型之前先拿着提示词去缓存中查询一下,看看这个提示词是否之前有人使用过了,如果使用过来就不再调用模型,直接返回缓存里的结果,这样可以避免Token的消耗
2.重试和降级,调用模型失败后可以再次调用(重试操作),如果还继续失败,就切换模型(降级操作)
3.影子测试,就是有两个模型主副模型,这一步就是看看主模型和副模型谁回答的好,调用一个新的模型用来评估主副模型回答的效果
4.动态指令注入,动态修改提示词
调用工具的时候:
- 高危操作审计,就是转账、删除、改配置、发邮件、执行脚本这类高危操作不能直接放行,要先挂起走人工审批,审批通过后再执行;同时把谁申请的、谁审批的、调了什么工具、传了什么参数、返回了什么结果都记到审计日志里,方便事后追溯。案例:转账/删除等操作需人工审批后执行。
- 最小权限注入,就是调用工具时不要给永久、全量的权限,而是根据当前用户和任务动态注入一个临时 Token,限定它能调用哪些工具、访问哪些资源、能执行什么动作,以及有效期多长,任务结束就失效,这样即使 Token 泄露,影响也可控。案例:使用临时 Token 调用工具,限定权限和时效。
- 超时 & 容错,就是单个工具调用不能无限等待,要设置超时时间,超时后自动取消,避免把整个 Agent 卡死;同时要有兜底策略,比如返回默认值、缓存结果、降级到备用工具,或者提示用户稍后重试。案例:单工具调用超时自动取消,返回兜底结果。
- 入参校验与修正,就是工具调用前先检查参数是否完整、类型是否正确、有没有越权字段,比如缺必填项、数字传成字符串、路径穿越等;能自动补全或修正的就修正,修不了就直接拒绝,防止工具执行失败,甚至造成安全问题。案例:修正或补全错误参数,防止工具执行失败。
图示: