Agent 重试与模型 Hooks
在任务与模型调用层补充上下文、验证回复和过滤工具,控制重试范围。
Agent 事件围绕用户任务,模型事件围绕每次 LLM 请求和响应。一次任务可能调用模型多次,流式响应还会产生多个输出块。
BeforeAgent
输入 prompt 为用户原始内容;additionalContext 追加到当前轮提示,只作用本轮。decision deny 阻止本轮并丢弃用户消息,不保留在历史;continue false 阻止本轮但保存消息。应根据是否需要保留记录选择返回方式。
AfterAgent 与重试
输入包含 prompt、prompt_response 和 stop_hook_active。每轮最终回复后触发;deny 将 reason 作为新的提示交回 Agent 请求修正,exit 2 也会以 stderr 反馈自动重试。
stop_hook_active 指示当前是否已在重试序列。验证脚本需要识别此状态并给出可达成的条件,避免不断拒绝。continue false 停止而不重试;hookSpecificOutput.clearContext 可清空 LLM 历史但保留界面显示,所以“屏幕仍显示”不等于模型仍持有全部历史。
BeforeModel
输入 llm_request 使用稳定格式,包含 model、messages、config。hookSpecificOutput.llm_request 覆盖出站请求相应部分;提供 llm_response 则使用合成响应并跳过真正 LLM 调用。deny 或 exit 2 阻止请求和本轮。
BeforeToolSelection
通过 toolConfig 控制工具:AUTO 正常选择,ANY 强制至少一次工具调用,NONE 禁用工具且优先于其他 Hooks。allowedFunctionNames 为允许名称列表。
多个匹配 Hooks 的允许名单取并集,不能叠加两个过滤 Hook 后假定权限越收越窄。这个事件不支持 decision、continue 或 systemMessage,阻止请求应选择支持相应控制的事件。
AfterModel
每个模型响应块到达时触发;修改 llm_response 只替换当前块。deny 丢弃响应并阻止该轮,continue false 停止循环。仅需检查最终回复时选 AfterAgent,避免每个流块启动昂贵脚本。
稳定模型格式
llm_request.messages 包含 user、model、system 角色与文本 content,非文本部分会被过滤;不能用此接口声称审计了全部多模态内容。响应以 candidates、content.parts、finishReason 和 usageMetadata 等稳定字段提供,依事件参考处理而非直接依赖 SDK 内部对象。