AgentTool 代理工具详解

904 字
5 分钟
AgentTool 代理工具详解

AgentTool — 代理工具详解#

AgentTool 是一个 面向 Agent 的增强工具接口,提供了:

  • UI 友好的展示(label
  • 参数容错(prepareArguments
  • 可中断、可流式更新的执行(executesignalonUpdate
  • 细粒度并发控制(executionMode

它与 AgentState 中的 tools 数组紧密结合,并且浅拷贝策略让工具对象自身可以安全地在外部被修改,同时数组结构本身受 setter 保护。


AgentTool(代理的工具)— “五要素法”#

一个工具包含这五样东西:

  1. label — 显示名字(给人看的,如”查天气”)
  2. prepareArguments(可选)— 参数预处理(模型给的参数不标准时,你帮他修一下)
  3. execute — 真正干活的方法(核心!)
  4. executionMode(可选)— 执行模式(串行还是并行)
  5. 还从基础 Tool 继承 nameschema(工具标识和参数格式)

execute 的参数(四个参数)#

  • toolCallId — 这次调用的唯一ID
  • params — 校验后的参数(类型安全)
  • signal — 取消信号(可以中途停止)
  • onUpdate — 进度回调(干到一半时回报)

记忆口诀:名标预执模,干活传四宝(ID、参数、信号、回调)。


五要素详解#

1. 显示名称:label#

UI 友好的展示名称,给人看的。例如:

  • “查天气”
  • “搜索文件”
  • “执行命令”

2. 参数预处理:prepareArguments(可选)#

当模型生成的参数不完全符合预期时,预处理函数可以修正:

  • 缺失的默认值
  • 类型转换(如字符串转数字)
  • 参数补全(如添加上下文相关的隐式参数)

3. 执行方法:execute(核心)#

真正干活的方法,支持四个参数:

参数详解

参数类型作用
toolCallIdstring本次调用的唯一标识符
paramsRecord<string, any>经校验和预处理后的参数
signalAbortSignal取消信号,用于中断执行
onUpdate(update: any) => void进度回调,流式输出中间结果

4. 执行模式:executionMode(可选)#

细粒度并发控制:

  • "sequential" — 串行执行,必须等前一个工具完成
  • "parallel" — 并行执行,多个工具同时执行(默认)

5. 基础属性:nameschema#

从基础 Tool 接口继承:

  • name — 工具的唯一标识符(字符串)
  • schema — 参数格式定义(Schema 对象)

可中断执行机制#

signal 参数提供中断能力:

async function execute(
toolCallId: string,
params: Record<string, any>,
signal: AbortSignal,
onUpdate: (update: any) => void
) {
// 检查是否已取消
if (signal.aborted) {
throw new Error('Tool execution aborted');
}
// 长时间操作时定期检查
for (const chunk of dataStream) {
if (signal.aborted) break;
// 处理数据
onUpdate({ progress: '50%' });
}
}

流式进度更新#

onUpdate 回调支持实时反馈:

// 执行过程中汇报进度
onUpdate({
stage: 'downloading',
progress: 30,
message: '正在获取数据...'
});
// 完成时返回结果
onUpdate({
stage: 'complete',
result: finalResult
});

与 AgentState 的集成#

AgentTool 放在 AgentState.tools 数组中:

集成点说明
数组防护State 的 setter 会浅拷贝 tools 数组
并发控制executionMode 决定该工具与其他工具的执行顺序
状态追踪pendingToolCalls Set 记录执行中的工具 ID

一句话对比#

  • AgentState:代理的”状态卡”,记着配置、聊天记录和正在干嘛。
  • AgentTool:代理的”技能卡”,写着技能叫什么、怎么准备参数、怎么执行、能否并行。

与其他核心类型的关系#

类型关系交互点
AgentState容器关系tools 数组的元素
AgentLoopConfig配置关系beforeToolCall / afterToolCall 钩子控制执行
AgentMessage结果记录工具执行结果写入对话历史

完整工作流:

用户请求 → AgentState(tools列表)
→ AgentLoopConfig(beforeToolCall)
→ AgentTool.execute
→ AgentLoopConfig(afterToolCall)
→ AgentState(messages记录)

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
AgentTool 代理工具详解
https://firefly.cuteleaf.cn/posts/learn-pi/agent-core-types/10-AgentTool详解/
作者
AltumSisy
发布于
2026-06-13
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
AltumSisy
Hello, I'm AltumSisy.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
32
分类
3
标签
25
总字数
68,347
运行时长
0
最后活动
0 天前

文章目录