服务器端工具 (Vercel AI SDK)
本指南讲解如何使用 Vercel AI SDK 调用服务器端工具。示例展示了一个返回指定地点天气的工具。
首先,按照 Vercel AI SDK 工具格式 定义工具:
import { z } from 'zod'
import { tool } from 'ai'
const weatherTool = tool({
description: '获取某个地点的天气',
parameters: z.object({
location: z.string().describe('获取天气的地点'),
}),
execute: async (args) => {
// 从外部 API 获取天气
const result = await getWeather(args)
return result
},
})然后,在调用 Vercel AI SDK 时,将工具包含在 tools 对象中。
别忘了将 maxSteps 设置为大于 1 的值,以启用多步工具调用。该参数允许 AI 按顺序调用多个工具。例如,它可以先调用获取天气报告的工具,然后调用另一个工具将该信息编辑到文档中。
import {
AiAgentToolkit,
vercelAiSdkAdapter,
ChatMessagesFormatter,
} from '@tiptap-pro/extension-ai-agent-server'
import { generateText } from 'ai'
import { openai } from '@ai-sdk/openai'
const { chatMessages, schemaAwarenessData } = request
const toolkit = new AiAgentToolkit({
adapter: vercelAiSdkAdapter,
schemaAwarenessData,
})
const formatter = new ChatMessagesFormatter({
// 从请求体获取聊天消息
initialMessages: chatMessages,
adapter: vercelAiSdkAdapter,
})
// 调用 Vercel AI SDK
const response = await generateText({
model: openai('gpt-4.1'),
messages: [
{
role: 'system',
content: `
<您的系统提示>
${toolkit.getSystemPrompt()}
`,
},
...formatter.format(),
],
// 在 tools 对象中包含天气工具,并传入 AiAgentToolkit 提供的其他工具
tools: {
...toolkit.format(),
get_weather: weatherTool,
},
// 启用多步工具调用
maxSteps: 5,
})接着,将响应添加到 formatter 中,使其被包含在对话中。
formatter.addAiResponse(response)最后,使用 formatter 将响应转换为 AI Agent 扩展期望的格式。
const response = formatter.getResolverResponse()从 formatter.getResolverResponse() 返回的值应作为您的 API 端点响应以及解析器函数的返回值。