探索 Tiptap V3 的最新功能

服务器端工具 (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 端点响应以及解析器函数的返回值。