Skip to content
FunCoding

Search

Search docs, Skills and MCP

Agent 重试与模型 Hooks

在任务与模型调用层补充上下文、验证回复和过滤工具,控制重试范围。

This page has not been translated into English yet. The original Chinese version is shown below.

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 内部对象。