跳转到主要内容
当智能体需要读取应用数据、调用内部服务或执行某个操作时,就定义一个工具。模型通过 ID 调用工具;SDK 检查参数,在你的进程中运行你的代码,并在下一轮把结果发回。

定义工具

工具字段

schema 使用各语言的原生校验器:TypeScript 中是函数,或提供 parse() 或 safeParse() 的对象;Python 中是可调用对象、Pydantic 模型,或提供 parse 或 safe_parse 的对象;其他语言中是返回该值或抛出异常的函数或可调用对象。

超时会怎样

调用不在当前工具列表中的工具 ID 会让运行失败(Go 中为 unknown tool,C#、PHP、Ruby 和 Java 中为 Unknown tool '<name>',Rust 中为 AgentError 形式的 Unknown tool: <name>)。在 TypeScript 中设置 return-to-model 时,未知工具或无法读取的参数会改为像工具错误一样得到回复。

要求审批

把工具的审批标志设为 true,或者给它一个按调用逐次决定的函数。如果语言提供智能体级的审批函数,它会作用于每个工具,并覆盖上述两种设置。被拦下的调用会让运行以 waiting_for_human 状态暂停;在状态与审批中按调用 ID 批准或拒绝它。

把调用交给人或其他系统

手动工具没有执行器:工作由你的应用、队列或其他服务完成。交互式工具会运行一个可以暂停等待人工处理的钩子。两者都会让运行暂停,直到你为该调用 ID 提供工具输出并继续运行;参见状态与审批。 如果交互钩子改为返回一个值,该值会立即成为工具结果。继续运行后,onResponseReceived(或该语言的等价物)可以在输出校验器检查之前校验或转换提供的输出。 Rust 外部工具不接收执行器:
如果一个模型轮次中同时有自动工具和待处理工具,运行时会先运行自动工具,再返回暂停。

报告进度并更新上下文

工具可以在工作期间发布初步结果,并为之后的轮次替换应用上下文。进度以 tool.preliminary_result 事件的形式出现(参见流式传输),如果你设置了事件校验器,进度会经过它的检查。

从工具错误中恢复

默认情况下,工具抛出的错误会让运行失败并被重新抛出。把工具的错误策略设为 return-to-model,即可把错误作为工具结果({"error": "..."})发回,让模型尝试别的办法。对于不安全或无法恢复的失败,请保留默认设置。 在 TypeScript 中,toolExecution.maxOutputChars 限制模型能看到的工具输出长度;更长的输出会保留开头和结尾,中间插入一条说明。

并发运行工具

当一个模型轮次调用多个相互独立的工具时,设置并发上限即可同时运行它们。在你设置之前,Go、C#、Ruby 和 Java 一次只运行一个工具。无论完成顺序如何,结果都按模型发出调用的顺序追加。在 Go 和 C# 中,如果多个并发工具都设置了上下文,按调用顺序排在最后的那个生效。
最后修改于 2026年11月5日