推荐 endpoint
最小请求
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "查询天气",
"input_schema": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
],
"messages": [
{
"role": "user",
"content": [{ "type": "text", "text": "查询今天上海天气。" }]
}
]
}
cURL 示例
FIRST_RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "查询天气",
"input_schema": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
],
"messages": [
{
"role": "user",
"content": [{ "type": "text", "text": "查询今天上海天气。" }]
}
]
}')
TOOL_ID=$(echo "$FIRST_RESPONSE" | jq -r '.content[] | select(.type == "tool_use") | .id')
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d "{
\"model\": \"claude-sonnet-4-20250514\",
\"max_tokens\": 1024,
\"tools\": [
{
\"name\": \"get_weather\",
\"description\": \"查询天气\",
\"input_schema\": {
\"type\": \"object\",
\"properties\": {
\"city\": { \"type\": \"string\" }
},
\"required\": [\"city\"]
}
}
],
\"messages\": [
{
\"role\": \"user\",
\"content\": [{ \"type\": \"text\", \"text\": \"查询今天上海天气。\" }]
},
{
\"role\": \"assistant\",
\"content\": $(echo "$FIRST_RESPONSE" | jq -c '.content')
},
{
\"role\": \"user\",
\"content\": [
{
\"type\": \"tool_result\",
\"tool_use_id\": \"$TOOL_ID\",
\"content\": \"{\\\"city\\\":\\\"上海\\\",\\\"condition\\\":\\\"多云\\\",\\\"temperature\\\":24}\"
}
]
}
]
}"
Python 示例
from anthropic import Anthropic
client = Anthropic(api_key="<ANTHROPIC_API_KEY>")
first_response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=[
{
"name": "get_weather",
"description": "查询天气",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
}
],
messages=[
{
"role": "user",
"content": [{"type": "text", "text": "查询今天上海天气。"}],
}
],
)
tool_use = next(block for block in first_response.content if block.type == "tool_use")
final_response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=[
{
"name": "get_weather",
"description": "查询天气",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
}
],
messages=[
{
"role": "user",
"content": [{"type": "text", "text": "查询今天上海天气。"}],
},
{
"role": "assistant",
"content": first_response.content,
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": tool_use.id,
"content": '{"city":"上海","condition":"多云","temperature":24}',
}
],
},
],
)
print(final_response.content[0].text)
Node.js 示例
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
const firstResponse = await client.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
tools: [
{
name: "get_weather",
description: "查询天气",
input_schema: {
type: "object",
properties: {
city: { type: "string" }
},
required: ["city"]
}
}
],
messages: [
{
role: "user",
content: [{ type: "text", text: "查询今天上海天气。" }]
}
]
});
const toolUse = firstResponse.content.find((block) => block.type === "tool_use");
const finalResponse = await client.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
tools: [
{
name: "get_weather",
description: "查询天气",
input_schema: {
type: "object",
properties: {
city: { type: "string" }
},
required: ["city"]
}
}
],
messages: [
{
role: "user",
content: [{ type: "text", text: "查询今天上海天气。" }]
},
{
role: "assistant",
content: firstResponse.content
},
{
role: "user",
content: [
{
type: "tool_result",
tool_use_id: toolUse.id,
content: '{"city":"上海","condition":"多云","temperature":24}'
}
]
}
]
});
console.log(finalResponse.content[0].text);
最佳实践
- Claude 返回 tool use 后,要把
tool_result作为后续消息块回传 - 工具回传时保留 assistant 原始 block,不要只提取纯文本
- schema 描述尽量具体,减少参数歧义
