工具
工具让智能体能够执行操作——获取数据、调用外部 API、执行代码,甚至操作计算机。JavaScript/TypeScript SDK 支持七种类别:
当您阅读完智能体,明确应由哪个智能体负责该任务,并希望赋予其相应能力后,再阅读本页。如果您仍在不同委派模式之间进行选择,请参阅智能体编排。
- OpenAI 托管工具——与模型一同在 OpenAI 服务器上运行。(Web 搜索、文件搜索、Code Interpreter、图像生成、工具搜索)
- 内置执行工具——由 SDK 提供、在模型之外执行的工具。(计算机操作和 apply_patch 在本地运行;shell 可在本地或托管容器中运行)
- 函数工具——使用 JSON Schema 封装任意本地函数,以便 LLM 调用。
- Agents as tools——将整个智能体公开为可调用工具。
- MCP 服务器——附加一个 Model Context Protocol 服务器(本地或远程)。
- 沙盒能力——为
SandboxAgent附加工作区范围内的 shell、文件系统、技能、记忆或压缩工具。 - 实验性功能:Codex 工具——将 Codex SDK 封装为函数工具,以运行可感知工作区的任务。
本指南的其余部分将先介绍每种工具类别,然后总结跨类别的工具选择和提示指南。
1. 托管工具(OpenAI Responses API)
Section titled “1. 托管工具(OpenAI Responses API)”使用 OpenAIResponsesModel 时,您可以添加以下内置工具:
| 工具 | 类型字符串 | 用途 |
|---|---|---|
| Web 搜索 | 'web_search' | 搜索互联网。 |
| 文件/检索搜索 | 'file_search' | 查询 OpenAI 托管的向量存储。 |
| Code Interpreter | 'code_interpreter' | 在沙盒环境中运行代码。 |
| 图像生成 | 'image_generation' | 根据文本生成图像。 |
| 工具搜索 | 'tool_search' | 在运行时加载延迟加载的函数工具、命名空间或可搜索的 MCP 工具。 |
import { Agent, codeInterpreterTool, fileSearchTool, imageGenerationTool, webSearchTool,} from '@openai/agents';
const agent = new Agent({ name: 'Travel assistant', tools: [ webSearchTool({ searchContextSize: 'medium' }), fileSearchTool('VS_ID', { maxNumResults: 3 }), codeInterpreterTool(), imageGenerationTool({ size: '1024x1024' }), ],});SDK 提供了用于返回托管工具定义的辅助函数:
| 辅助函数 | 说明 |
|---|---|
webSearchTool(options?) | 提供适合 JS 的选项,例如 searchContextSize、userLocation 和 filters.allowedDomains。 |
fileSearchTool(ids, options?) | 第一个参数接受一个或多个向量存储 ID,此外还支持 maxNumResults、includeSearchResults、rankingOptions 和过滤器等选项。 |
codeInterpreterTool(options?) | 未提供 container 时,默认使用自动管理的容器。 |
imageGenerationTool(options?) | 支持图像生成配置,例如 model、size、quality、background、inputFidelity、inputImageMask、moderation、outputCompression、partialImages 和输出格式。 |
toolSearchTool(options?) | 添加内置的 tool_search 辅助工具。可将其与设置了 deferLoading: true 的延迟函数工具或托管 MCP 工具搭配使用。默认支持托管执行,也可以通过 execution: 'client' 和 execute 使用客户端执行。 |
这些辅助函数会将适合 JavaScript/TypeScript 的选项名称映射到底层 OpenAI Responses API 工具载荷。有关完整的工具 Schema,以及排序选项或语义过滤器等高级选项,请参阅官方 OpenAI 工具指南;有关当前内置工具搜索流程和模型可用性,请参阅官方工具搜索指南。
2. 内置执行工具
Section titled “2. 内置执行工具”这些工具内置于 SDK 中,但执行发生在模型响应之外:
- 计算机操作——实现
Computer接口并将其传递给computerTool()。此工具始终针对您提供的本地Computer实现运行。 - Shell——提供本地
Shell实现,或使用shellTool({ environment })配置托管容器环境。 - 应用补丁——实现
Editor接口并将其传递给applyPatchTool()。此工具始终针对您提供的本地Editor实现运行。 - 沙盒 shell 和文件系统工具——当这些操作应在沙盒工作区内运行时,在
SandboxAgent上使用shell()、filesystem()、skills()、memory()或compaction()。
工具调用仍由模型发起,但实际工作由您的应用程序或配置的执行环境完成。
沙盒能力工具与进程级内置工具不同:它们绑定到当前 SandboxAgent 运行的活动沙盒会话。如果工具应操作智能体的隔离工作区,而不是您的应用程序进程,请使用快速入门。
import { Agent, applyPatchTool, computerTool, shellTool, Computer, Editor, Shell,} from '@openai/agents';
const computer: Computer = { environment: 'browser', dimensions: [1024, 768], screenshot: async () => '', click: async () => {}, doubleClick: async () => {}, scroll: async () => {}, type: async () => {}, wait: async () => {}, move: async () => {}, keypress: async () => {}, drag: async () => {},};
const shell: Shell = { run: async () => ({ output: [ { stdout: '', stderr: '', outcome: { type: 'exit', exitCode: 0 }, }, ], }),};
const editor: Editor = { createFile: async () => ({ status: 'completed' }), updateFile: async () => ({ status: 'completed' }), deleteFile: async () => ({ status: 'completed' }),};
const agent = new Agent({ name: 'Local tools agent', model: 'gpt-5.4', tools: [ computerTool({ computer }), shellTool({ shell, needsApproval: true }), applyPatchTool({ editor, needsApproval: true }), ],});计算机工具详情
Section titled “计算机工具详情”computerTool() 接受以下任一项:
- 具体的
Computer实例。 - 为每次运行创建
Computer的初始化函数。 - 当您需要运行范围内的设置和清理时,使用包含
{ create, dispose }的提供程序对象。
要使用 OpenAI 当前的计算机操作路径,请设置支持计算机操作的模型,例如 gpt-5.4。当请求模型已明确指定时,SDK 会发送正式版内置 computer 工具格式。如果实际模型仍来自已存储的提示或其他较旧的集成,SDK 会继续使用旧版 computer_use_preview 传输格式以保持兼容,除非您通过 modelSettings.toolChoice: 'computer' 明确选择正式版路径。
正式版计算机调用可在单个 computer_call 中包含批量 actions[]。SDK 会按顺序执行这些操作,针对每个操作评估 needsApproval,并将最终屏幕截图作为工具输出返回。如果您根据 interruption.rawItem 构建审批 UI,请在存在 actions 时读取它,否则针对旧版预览项回退到 action。
当高影响力的计算机操作需要暂停以供用户审核时,请使用 needsApproval;如果您希望确认或拒绝计算机调用报告的待处理安全检查,请使用 onSafetyCheck。有关模型端指南和迁移详情,请参阅官方 OpenAI 计算机操作指南及其迁移说明。
Shell 工具详情
Section titled “Shell 工具详情”shellTool() 有两种模式:
- 本地模式:提供
shell,还可选择提供environment: { type: 'local', skills },以及用于自动处理审批的needsApproval和onApproval。 - 托管容器模式:提供
type为'container_auto'或'container_reference'的environment。
在本地模式下,environment.skills 允许您通过 name、description 和文件系统 path 挂载本地技能。
在托管容器模式下,使用以下任一种方式配置 shellTool({ environment }):
- 使用
type: 'container_auto'为本次运行创建托管容器。 - 使用
type: 'container_reference'通过containerId复用现有容器。
托管的 container_auto 环境支持:
networkPolicy,包括带有domainSecrets的允许列表。- 用于挂载已上传文件的
fileIds。 - 用于设置容器规格的
memoryLimit。 skills,可通过skill_reference或内联 zip 包提供。
托管 shell 环境不接受 shell、needsApproval 或 onApproval,因为执行发生在托管容器环境中,而不是您的本地进程中。
有关端到端用法,请参阅 examples/tools/local-shell.ts、examples/tools/container-shell-skill-ref.ts 和 examples/tools/container-shell-inline-skill.ts。
应用补丁工具详情
Section titled “应用补丁工具详情”applyPatchTool() 采用与 shellTool() 相同的本地审批流程:使用 needsApproval 在编辑文件前暂停;如果希望通过应用级回调自动批准或拒绝,请使用 onApproval。
3. 函数工具
Section titled “3. 函数工具”您可以使用 tool() 辅助函数将任意函数转换为工具。
import { tool } from '@openai/agents';import { z } from 'zod';
const getWeatherTool = tool({ name: 'get_weather', description: 'Get the weather for a given city', parameters: z.object({ city: z.string() }), async execute({ city }) { return `The weather in ${city} is sunny.`; },});| 字段 | 必需 | 说明 |
|---|---|---|
name | 否 | 默认为函数名称(例如 get_weather)。 |
description | 是 | 向 LLM 显示的清晰、易于理解的说明。 |
parameters | 是 | Zod Schema 或原始 JSON Schema 对象。Zod 参数会自动启用严格模式。 |
strict | 否 | 为 true(默认值)时,如果参数未通过验证,SDK 会返回模型错误。设置为 false 可启用模糊匹配。 |
execute | 是 | (args, context, details) => string | unknown | Promise<...>——您的业务逻辑。非字符串输出会序列化后提供给模型。context 是可选的 RunContext;details 包含 toolCall、resumeState 和 signal 等元数据。 |
errorFunction | 否 | 自定义处理程序 (context, error) => string,用于将内部错误转换为用户可见的字符串。 |
timeoutMs | 否 | 每次调用的超时时间,以毫秒为单位。必须大于 0 且小于或等于 2147483647。 |
timeoutBehavior | 否 | 超时模式:error_as_result(默认值)返回模型可见的超时消息,raise_exception 则抛出 ToolTimeoutError。 |
timeoutErrorFunction | 否 | 自定义处理程序 (context, timeoutError) => string,用于在 timeoutBehavior 为 error_as_result 时生成超时输出。 |
customDataExtractor | 否 | 回调 (context) => Record<string, unknown> | null | undefined,用于将仅供 SDK 使用的元数据附加到生成的 RunToolCallOutputItem.customData。这些数据不会发回模型。 |
needsApproval | 否 | 执行前要求人工批准。请参阅人机协作。 |
isEnabled | 否 | 根据每次运行的条件公开工具;接受布尔值或谓词。 |
inputGuardrails | 否 | 在工具执行前运行的护栏;可以拒绝输入或抛出异常。请参阅护栏。 |
outputGuardrails | 否 | 在工具执行后运行的护栏;可以拒绝输出或抛出异常。请参阅护栏。 |
仅供 SDK 使用的自定义数据
Section titled “仅供 SDK 使用的自定义数据”当您的应用程序需要在工具结果旁附加渲染提示、内部 ID 或其他兼容 JSON 的元数据时,请使用 customDataExtractor。该回调接收运行上下文、工具定义、模型工具调用、已解析的输入、输出,以及克隆后的原始输出项。返回的数据存储在 RunToolCallOutputItem.customData 和 RunState 中,但会从 history 和模型重放中排除。
函数工具超时
Section titled “函数工具超时”使用 timeoutMs 限制每次函数工具调用的时长。
timeoutBehavior: 'error_as_result'(默认值)向模型返回Tool '<name>' timed out after <timeoutMs>ms.。timeoutBehavior: 'raise_exception'抛出ToolTimeoutError,您可以将其作为运行异常的一部分捕获。timeoutErrorFunction允许您在error_as_result模式下自定义超时文本。- 超时会中止
details.signal,因此监听取消信号的长时间运行工具可以及时停止。
如果您直接调用函数工具,请使用 invokeFunctionTool,以强制执行与正常智能体运行相同的超时行为。
非严格 JSON Schema 工具
Section titled “非严格 JSON Schema 工具”如果您需要模型推测无效或不完整的输入,可以在使用原始 JSON Schema 时禁用严格模式:
import { tool } from '@openai/agents';
interface LooseToolInput { text: string;}
const looseTool = tool({ description: 'Echo input; be forgiving about typos', strict: false, parameters: { type: 'object', properties: { text: { type: 'string' } }, required: ['text'], additionalProperties: true, }, execute: async (input) => { // because strict is false we need to do our own verification if (typeof input !== 'object' || input === null || !('text' in input)) { return 'Invalid input. Please try again'; } return (input as LooseToolInput).text; },});通过工具搜索延迟加载工具
Section titled “通过工具搜索延迟加载工具”工具搜索使模型可以在运行时仅加载所需的工具定义,而不必预先发送所有 Schema。在 SDK 中,这是处理延迟加载的顶层函数工具、toolNamespace() 组,以及配置了 deferLoading: true 的托管 MCP 工具的方式。
工具搜索仅可与 GPT-5.4 及之后支持 Responses API 中此功能的模型版本配合使用。
import { Agent, tool, toolNamespace, toolSearchTool } from '@openai/agents';import { z } from 'zod';
const customerIdParams = z.object({ customerId: z.string().describe('The customer identifier to look up.'),});
// Keep a standalone deferred tool at the top level when it represents a// single searchable capability that does not need a shared namespace.const shippingLookup = tool({ name: 'get_shipping_eta', description: 'Look up a shipment ETA by customer identifier.', parameters: customerIdParams, deferLoading: true, async execute({ customerId }) { return { customerId, eta: '2026-03-07', carrier: 'Priority Express', }; },});
// Group related tools into a namespace when one domain description should// cover several deferred tools and let tool search load them together.const crmTools = toolNamespace({ name: 'crm', description: 'CRM tools for customer profile lookups.', tools: [ tool({ name: 'get_customer_profile', description: 'Fetch a basic customer profile.', parameters: customerIdParams, deferLoading: true, async execute({ customerId }) { return { customerId, tier: 'enterprise', }; }, }), ],});
const agent = new Agent({ name: 'Operations assistant', model: 'gpt-5.4', // Mixing namespaced and top-level deferred tools in one request is supported. tools: [shippingLookup, ...crmTools, toolSearchTool()],});该示例有意混合使用了两种方式:
shippingLookup保持在顶层,因为它是一项独立的可搜索能力。crmTools使用toolNamespace(),因为相关 CRM 工具共享一个高级标签和说明。- 同一请求支持混用带命名空间和顶层的延迟工具;工具搜索可以同时加载
crm等命名空间路径和get_shipping_eta等顶层路径。
使用工具搜索时:
- 使用
deferLoading: true标记每个延迟加载的函数工具。 - 当多个相关工具应共享一个领域说明并作为一组加载时,使用
toolNamespace({ name, description, tools })。 - 如果某个工具是一项独立能力,并且工具名称本身就是很好的搜索目标,请将其保留在顶层。
- 只要有任何延迟函数工具或托管 MCP 工具使用
deferLoading: true,就应将toolSearchTool()添加到同一个tools数组。 - 将
modelSettings.toolChoice保持为'auto'。SDK 不允许按名称强制使用内置tool_search工具或延迟加载的函数工具。 - 默认为托管执行。如果设置
toolSearchTool({ execution: 'client', execute }),标准run()循环仅支持内置的{ paths: string[] }客户端查询格式;自定义客户端 Schema 需要您自行实现 Responses 循环。 - 一个命名空间可以混合即时成员和延迟成员。即时成员无需工具搜索即可调用,而同一命名空间中的延迟成员则按需加载。
- 延迟函数工具和
toolNamespace()仅适用于 Responses。Chat Completions 会拒绝它们,AI SDK 适配器也不支持延迟加载 Responses 工具的流程。
4. Agents as tools
Section titled “4. Agents as tools”有时,您希望一个智能体协助另一个智能体,但不完全交接对话。此时可以使用 agent.asTool():
如果您仍在 agent.asTool() 和 handoff() 之间进行选择,请对比智能体和智能体编排中介绍的模式。
import { Agent } from '@openai/agents';
const summarizer = new Agent({ name: 'Summarizer', instructions: 'Generate a concise summary of the supplied text.',});
const summarizerTool = summarizer.asTool({ toolName: 'summarize_text', toolDescription: 'Generate a concise summary of the supplied text.',});
const mainAgent = new Agent({ name: 'Research assistant', tools: [summarizerTool],});在底层,SDK 会:
- 创建一个仅包含
input参数的函数工具。 - 调用工具时,使用该输入运行子智能体。
- 返回最后一条消息,或返回由
customOutputExtractor提取的输出。
将智能体作为工具运行时,Agents SDK 会使用默认设置创建一个运行器,并在函数执行过程中通过该运行器运行智能体。如果您希望提供 runConfig 或 runOptions 的任何属性,可以将其传递给 asTool() 方法,以自定义运行器行为。
您还可以通过 asTool() 选项为智能体工具设置 needsApproval 和 isEnabled,以便与人机协作流程和条件式工具可用性集成。
在 customOutputExtractor 内,使用 result.agentToolInvocation 检查当前的 Agent.asTool() 调用。在该回调中,结果始终来自 Agent.asTool(),因此 agentToolInvocation 始终有定义,并公开 toolName、toolCallId 和 toolArguments。使用 result.runContext 获取常规应用上下文和 toolInput。这些元数据仅适用于当前嵌套调用,不会序列化到 RunState 中。
import { Agent } from '@openai/agents';
const billingAgent = new Agent({ name: 'Billing Agent', instructions: 'Handle billing questions and subscription changes.',});
const billingTool = billingAgent.asTool({ toolName: 'billing_agent', toolDescription: 'Handles customer billing questions.', customOutputExtractor(result) { console.log('tool', result.agentToolInvocation.toolName); // Direct invoke() calls may not have a model-generated tool call id. console.log('call', result.agentToolInvocation.toolCallId); console.log('args', result.agentToolInvocation.toolArguments);
return String(result.finalOutput ?? ''); },});
const orchestrator = new Agent({ name: 'Support Orchestrator', instructions: 'Delegate billing questions to the billing agent tool.', tools: [billingTool],});agent.asTool() 的高级结构化输入选项:
inputBuilder:将结构化工具参数映射到嵌套智能体输入载荷。includeInputSchema:在嵌套运行中包含输入 JSON Schema,以增强 Schema 感知行为。resumeState:控制恢复嵌套序列化RunState时的上下文协调策略:'merge'(默认值)将实时审批/上下文状态合并到序列化状态中,'replace'改为使用当前运行上下文,'preferSerialized'则使用未更改的序列化上下文恢复运行。
智能体工具的流式事件
Section titled “智能体工具的流式事件”智能体工具可以将所有嵌套运行事件以流式方式传回您的应用程序。请选择适合工具构建方式的钩子形式:
import { Agent } from '@openai/agents';
const billingAgent = new Agent({ name: 'Billing Agent', instructions: 'Answer billing questions and compute simple charges.',});
const billingTool = billingAgent.asTool({ toolName: 'billing_agent', toolDescription: 'Handles customer billing questions.', // onStream: simplest catch-all when you define the tool inline. onStream: (event) => { console.log(`[onStream] ${event.event.type}`, event); },});
// on(eventName) lets you subscribe selectively (or use '*' for all).billingTool.on('run_item_stream_event', (event) => { console.log('[on run_item_stream_event]', event);});billingTool.on('raw_model_stream_event', (event) => { console.log('[on raw_model_stream_event]', event);});
const orchestrator = new Agent({ name: 'Support Orchestrator', instructions: 'Delegate billing questions to the billing agent tool.', tools: [billingTool],});- 事件类型与
RunStreamEvent['type']匹配:raw_model_stream_event、run_item_stream_event、agent_updated_stream_event。 onStream是最简单的”全部捕获”方式,非常适合内联声明工具的情况(tools: [agent.asTool({ onStream })])。如果不需要按事件路由,请使用此方式。on(eventName, handler)允许您选择性订阅事件(也可以使用'*'),最适合需要更细粒度处理,或希望在创建后附加监听器的情况。- 如果提供
onStream或任何on(...)处理程序,Agents as tools 会自动以流式模式运行;如果不提供,则保持非流式路径。 - 处理程序会并行调用,因此缓慢的
onStream回调不会阻塞on(...)处理程序,反之亦然。 - 当工具通过模型工具调用触发时,会提供
toolCallId;直接调用invoke()或提供程序的特殊行为可能导致其缺失。
5. MCP 服务器
Section titled “5. MCP 服务器”您可以通过 Model Context Protocol (MCP) 服务器公开工具,并将其附加到智能体。例如,您可以使用 MCPServerStdio 启动并连接到 stdio MCP 服务器:
import { Agent, MCPServerStdio } from '@openai/agents';
const server = new MCPServerStdio({ fullCommand: 'pnpm exec mcp-server-filesystem ./sample_files',});
await server.connect();
const agent = new Agent({ name: 'Assistant', mcpServers: [server],});有关完整示例,请参阅 filesystem-example.ts。此外,如果您需要 MCP 服务器工具集成的完整指南,请参阅 MCP 集成了解详情。在管理多个服务器(或部分故障)时,请使用 connectMcpServers,并遵循 MCP 集成中的生命周期指南。
6. 实验性功能:Codex 工具
Section titled “6. 实验性功能:Codex 工具”@openai/agents-extensions/experimental/codex 提供了 codexTool()。这是一个函数工具,可将模型工具调用路由到 Codex SDK,使智能体能够自主运行工作区范围内的任务(shell、文件编辑、MCP 工具)。此接口为实验性功能,未来可能会发生变化。
请先安装依赖项:
npm install @openai/agents-extensions @openai/codex-sdk快速开始:
import { Agent } from '@openai/agents';import { codexTool } from '@openai/agents-extensions/experimental/codex';
export const codexAgent = new Agent({ name: 'Codex Agent', instructions: 'Use the codex tool to inspect the workspace and answer the question. When skill names, which usually start with `$`, are mentioned, you must rely on the codex tool to use the skill and answer the question.', tools: [ codexTool({ sandboxMode: 'workspace-write', workingDirectory: '/path/to/repo', defaultThreadOptions: { model: 'gpt-5.4', networkAccessEnabled: true, webSearchEnabled: false, }, }), ],});注意事项:
- 身份验证:提供
CODEX_API_KEY(首选)或OPENAI_API_KEY,也可以传递codexOptions.apiKey。 - 输入:采用严格 Schema——
inputs必须至少包含一个{ type: 'text', text }或{ type: 'local_image', path }。 - 安全性:将
sandboxMode与workingDirectory搭配使用;如果该目录不是 Git 仓库,请设置skipGitRepoCheck。 - 线程管理:
useRunContextThreadId: true会在runContext.context中读取/存储最新线程 ID,这有助于在应用状态中跨轮次复用线程。 - 线程 ID 优先级:工具调用的
threadId(如果您的 Schema 包含它)优先级最高,其次是运行上下文线程 ID,最后是codexTool({ threadId })。 - 运行上下文键:当
name: 'codex'时,默认为codexThreadId;对于name: 'engineer'等名称,则为codexThreadId_<suffix>(规范化后为codex_engineer)。 - 可变上下文要求:启用
useRunContextThreadId后,请将可变对象或Map作为run(..., { context })传入。 - 命名:工具名称会规范化到
codex命名空间中(engineer会变为codex_engineer),并且智能体中的重复 Codex 工具名称会被拒绝。 - 流式传输:
onStream会镜像 Codex 事件(推理、命令执行、MCP 工具调用、文件更改、Web 搜索),便于您记录日志或追踪进度。 - 输出:工具结果包含
response、usage和threadId,Codex token 用量会记录在RunContext中。 - 结构:
outputSchema可以是描述符、JSON Schema 对象或 Zod 对象。对于 JSON 对象 Schema,additionalProperties必须为false。
运行上下文线程复用示例:
import { Agent, run } from '@openai/agents';import { codexTool } from '@openai/agents-extensions/experimental/codex';
// Derived from codexTool({ name: 'engineer' }) when runContextThreadIdKey is omitted.type ExampleContext = { codexThreadId_engineer?: string;};
const agent = new Agent<ExampleContext>({ name: 'Codex assistant', instructions: 'Use the codex tool for workspace tasks.', tools: [ codexTool({ // `name` is optional for a single Codex tool. // We set it so the run-context key is tool-specific and to avoid collisions when adding more Codex tools. name: 'engineer', // Reuse the same Codex thread across runs that share this context object. useRunContextThreadId: true, sandboxMode: 'workspace-write', workingDirectory: '/path/to/repo', defaultThreadOptions: { model: 'gpt-5.4', approvalPolicy: 'never', }, }), ],});
// The default key for useRunContextThreadId with name=engineer is codexThreadId_engineer.const context: ExampleContext = {};
// First turn creates (or resumes) a Codex thread and stores the thread ID in context.await run(agent, 'Inspect src/tool.ts and summarize it.', { context });// Second turn reuses the same thread because it shares the same context object.await run(agent, 'Now list refactoring opportunities.', { context });
const threadId = context.codexThreadId_engineer;工具策略与最佳实践
Section titled “工具策略与最佳实践”工具使用行为
Section titled “工具使用行为”有关如何控制模型必须在何时及以何种方式使用工具(modelSettings.toolChoice、toolUseBehavior 等),请参阅智能体。
- 简短、明确的说明——描述工具执行什么操作以及何时使用。
- 验证输入——尽可能使用 Zod Schema 进行严格的 JSON 验证。
- 避免在错误处理程序中产生副作用——
errorFunction应返回有帮助的字符串,而不是抛出异常。 - 每个工具只承担一项职责——小型、可组合的工具有助于改善模型推理。