服务器端工具(Anthropic Claude Messages API)
本指南介绍如何使用 Anthropic Claude Messages API 调用服务器端工具。示例展示了一个返回指定位置天气的工具。
代码演示可用
本指南包含一个代码演示,帮助你快速入门。请参阅GitHub 仓库。
首先,在 Anthropic Claude Messages API 工具格式中定义该工具:
const weatherTool = {
name: 'get_weather',
description: '返回指定位置的天气',
input_schema: {
type: 'object',
properties: {
location: {
type: 'string',
description: '要获取天气的位置',
},
},
required: ['location'],
},
}然后,在调用 Anthropic API 时,将该工具包含在 tools 数组中。
import {
AiAgentToolkit,
anthropicMessagesAdapter,
ChatMessagesFormatter,
} from '@tiptap-pro/extension-ai-agent-server'
import Anthropic from '@anthropic-ai/sdk'
const { chatMessages, schemaAwarenessData } = request
const toolkit = new AiAgentToolkit({
adapter: anthropicMessagesAdapter,
schemaAwarenessData,
})
const formatter = new ChatMessagesFormatter({
initialMessages: chatMessages,
adapter: anthropicMessagesAdapter,
})
// 初始化 Anthropic 客户端
const anthropic = new Anthropic()
// 调用 Anthropic Claude Messages API
const response = await anthropic.messages.create({
model: 'claude-sonnet-4-0',
max_tokens: 2048,
system: `
<你的系统提示>
${toolkit.getSystemPrompt()}
`,
messages: formatter.format(),
// 在 tools 数组中包含天气工具,以及 AiAgentToolkit 提供的其他工具
tools: [...toolkit.format(), weatherTool],
})首先,将响应添加到 formatter 中,以便包含在对话中。
formatter.addAiResponse(response)然后,检查响应是否包含服务器端工具调用(如天气工具)。如果包含,则调用该工具并将结果添加到 formatter 中。随后,再次调用 Anthropic API。
重复此流程,直到响应中不再包含服务器端工具调用。
const isGetWeatherToolUse = (
content: Anthropic.Messages.ContentBlock,
): content is Anthropic.Messages.ToolUseBlock =>
content.type === 'tool_use' && content.name === 'get_weather'
let response: Anthropic.Messages.Message | null = null
while (!response || response.content.some(isGetWeatherToolUse)) {
// 调用 Anthropic Claude Messages API
response = await anthropic.messages.create({
model: 'claude-sonnet-4-0',
max_tokens: 2048,
system: `${systemPrompt}\n${toolkit.getSystemPrompt()}`,
messages: formatter.format(),
// 在 tools 数组中包含天气工具,以及 AiAgentToolkit 的其他工具
tools: [...toolkit.format(), weatherTool],
})
// 将响应转换为 AI Agent 扩展期望的格式
formatter.addAiResponse(response)
// 处理天气工具调用
for (const content of response.content) {
if (isGetWeatherToolUse(content)) {
const weatherResult = await getWeather(content.input)
// 将工具调用结果添加到 formatter
formatter.addChatMessage({
type: 'toolCallResult',
toolName: 'get_weather',
toolCallId: content.id,
result: weatherResult,
isError: false,
})
}
}
}最后,当不再有服务器端工具调用时,使用 formatter 将响应转换为 AI Agent 扩展期望的格式。
const response = formatter.getResolverResponse()从 formatter.getResolverResponse() 返回的值即为你的 API 端点响应和解析器函数的返回值。