[ PROMPT_NODE_23892 ]
tool-use
[ SKILL_DOCUMENTATION ]
# 工具使用 — TypeScript
关于概念概述(工具定义、工具选择、提示),请参阅 [shared/tool-use-concepts.md](../../shared/tool-use-concepts.md)。
## 工具运行器(推荐)
**Beta:** 工具运行器在 TypeScript SDK 中处于 Beta 阶段。
使用 `betaZodTool` 配合 Zod 模式定义带有 `run` 函数的工具,然后将其传递给 `client.beta.messages.toolRunner()`:
typescript
import Anthropic from "@anthropic-ai/sdk";
import { betaZodTool } from "@anthropic-ai/sdk/helpers/beta/zod";
import { z } from "zod";
const client = new Anthropic();
const getWeather = betaZodTool({
name: "get_weather",
description: "获取指定地点的当前天气",
inputSchema: z.object({
location: z.string().describe("城市和州,例如:San Francisco, CA"),
unit: z.enum(["celsius", "fahrenheit"]).optional(),
}),
run: async (input) => {
// 在此实现逻辑
return `在 ${input.location} 是 72°F 且晴天`;
},
});
// 工具运行器处理智能体循环并返回最终消息
const finalMessage = await client.beta.messages.toolRunner({
model: "claude-opus-4-7",
max_tokens: 16000,
tools: [getWeather],
messages: [{ role: "user", content: "巴黎的天气怎么样?" }],
});
console.log(finalMessage.content);
**工具运行器的主要优势:**
- 无需手动循环 — SDK 自动处理调用工具并将结果反馈回模型
- 通过 Zod 模式实现类型安全的工具输入
- 工具模式从 Zod 定义中自动生成
- 当 Claude 没有更多工具调用时,迭代自动停止
---
## 手动智能体循环
当您需要细粒度控制(自定义日志、条件工具执行、流式传输单个迭代、人工介入审批)时使用此方法:
typescript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const tools: Anthropic.Tool[] = [...]; // 您的工具定义
let messages: Anthropic.MessageParam[] = [{ role: "user", content: userInput }];
while (true) {
const response = await client.messages.create({
model: "claude-opus-4-7",
max_tokens: 16000,
tools: tools,
messages: messages,
});
if (response.stop_reason === "end_turn") break;
// 服务器端工具命中迭代限制;追加助手轮次并重新发送以继续
if (response.stop_reason === "pause_turn") {
messages.push({ role: "assistant", content: response.content });
continue;
}
const toolUseBlocks = response.content.filter(
(b): b is Anthropic.Tool