AI SDK 集成

将 deepseek-kit 与 Vercel AI SDK 协同使用——DeepSeek 处理文本推理,AI SDK 处理多模态和 UI 集成。

Vercel AI SDK 是一个流行的 AI 应用开发框架,支持多种模型提供商和丰富的 UI 集成钩子。通过将 deepseek-kit 与 AI SDK 集成,你可以利用 AI SDK 的多模态能力(图片理解、文件处理等)弥补 DeepSeek V4 的不足,同时享受 DeepSeek 的低成本和高性能文本推理。

安装

pnpm add deepseek-kit ai @ai-sdk/openai zod

模式一:deepseek-kit 作为 AI SDK 的子智能体

在这种模式下,AI SDK 的 ToolLoopAgent 作为主智能体处理多模态输入,deepseek-kit 智能体被封装为工具,处理需要深度推理和工具调用的文本任务。

场景:图片分析 + 深度研究

用户发送一张图片,AI SDK 的多模态模型先理解图片内容,然后将分析结果交给 DeepSeek 智能体进行深度研究:

import { openai } from '@ai-sdk/openai'
import { tool as aiTool, ToolLoopAgent } from 'ai'
import { createAgent, createModel, tool } from 'deepseek-kit'
import { z } from 'zod'

const deepseekModel = createModel({ model: 'deepseek-v4-flash' })

const researchAgent = createAgent({
  model: deepseekModel,
  system: '你是一个研究助手。根据提供的信息进行深入分析,并在最终回复中清晰总结你的发现。',
  tools: [searchTool],
})

const researchTool = aiTool({
  description: '使用 DeepSeek 对给定主题进行深度研究和分析',
  parameters: z.object({
    topic: z.string().describe('需要研究的主题'),
    context: z.string().describe('相关的上下文信息,如图片分析结果'),
  }),
  execute: async ({ topic, context }) => {
    const result = await researchAgent.generate({
      prompt: `基于以下上下文信息,深入研究这个主题:${topic}\n\n上下文:${context}`,
    })
    return result.text
  },
})

const mainAgent = new ToolLoopAgent({
  model: openai('gpt-4o'),
  tools: { research: researchTool },
})

当用户发送图片时:

  1. GPT-4o 理解图片内容,提取关键信息
  2. GPT-4o 判断需要深入研究,调用 research 工具
  3. DeepSeek 智能体在独立上下文中执行研究任务
  4. 研究结果返回给 GPT-4o,生成最终回复

场景:成本优化路由

简单任务交给 DeepSeek,复杂多模态任务交给 GPT-4o:

import { openai } from '@ai-sdk/openai'
import { tool as aiTool, generateText } from 'ai'
import { createAgent, createModel, tool } from 'deepseek-kit'
import { z } from 'zod'

const deepseekModel = createModel({ model: 'deepseek-v4-flash' })

const deepseekAgent = createAgent({
  model: deepseekModel,
  system: '你是一个高效的文本处理助手。简洁准确地完成任务。',
})

const textProcessingTool = aiTool({
  description: '处理纯文本任务,如写作、翻译、总结、代码生成等',
  parameters: z.object({
    task: z.string().describe('需要处理的文本任务'),
  }),
  execute: async ({ task }) => {
    const result = await deepseekAgent.generate({ prompt: task })
    return result.text
  },
})

const result = await generateText({
  model: openai('gpt-4o'),
  tools: { processText: textProcessingTool },
  messages: [
    {
      role: 'user',
      content: [
        { type: 'text', text: '分析这张图片中的架构,然后写一份技术文档。' },
        { type: 'image', image: imageUrl },
      ],
    },
  ],
})

GPT-4o 先理解图片,然后通过 processText 工具将文档写作任务委派给 DeepSeek,节省成本。

模式二:AI SDK 作为 deepseek-kit 的子智能体

在这种模式下,deepseek-kit 智能体作为主编排者,在需要多模态能力时调用 AI SDK 的模型。

场景:图片理解工具

将 AI SDK 的多模态模型封装为 deepseek-kit 工具,供 DeepSeek 智能体按需调用:

import { openai } from '@ai-sdk/openai'
import { generateText } from 'ai'
import { createAgent, createModel, tool } from 'deepseek-kit'
import { z } from 'zod'

const deepseekModel = createModel({ model: 'deepseek-v4-flash' })

const analyzeImageTool = tool({
  name: 'analyzeImage',
  description: '分析图片内容,返回详细的文字描述',
  schema: z.object({
    imageUrl: z.string().describe('图片的 URL 地址'),
    question: z.string().describe('关于图片的问题'),
  }),
  execute: async (input) => {
    const result = await generateText({
      model: openai('gpt-4o'),
      messages: [
        {
          role: 'user',
          content: [
            { type: 'text', text: input.question },
            { type: 'image', image: input.imageUrl },
          ],
        },
      ],
    })
    return result.text
  },
})

const agent = createAgent({
  model: deepseekModel,
  tools: [analyzeImageTool, searchTool],
  system: '你是一个助手。当用户发送图片时,使用 analyzeImage 工具理解图片内容,然后基于分析结果回答问题。',
})

const result = await agent.generate({
  prompt: '这张图片中的建筑是什么风格?请结合历史背景详细分析。',
})

场景:多模型协作

DeepSeek 作为主编排者,根据任务类型动态选择模型:

import { anthropic } from '@ai-sdk/anthropic'
import { openai } from '@ai-sdk/openai'
import { generateText } from 'ai'
import { createAgent, createModel, tool } from 'deepseek-kit'
import { z } from 'zod'

const deepseekModel = createModel({ model: 'deepseek-v4-flash' })

const visionTool = tool({
  name: 'analyzeImage',
  description: '使用视觉模型分析图片',
  schema: z.object({
    imageUrl: z.string(),
    question: z.string(),
  }),
  execute: async (input) => {
    const result = await generateText({
      model: openai('gpt-4o'),
      messages: [{
        role: 'user',
        content: [
          { type: 'text', text: input.question },
          { type: 'image', image: input.imageUrl },
        ],
      }],
    })
    return result.text
  },
})

const longContextTool = tool({
  name: 'analyzeLongDocument',
  description: '分析超长文档,支持 200K token 上下文',
  schema: z.object({
    document: z.string(),
    question: z.string(),
  }),
  execute: async (input) => {
    const result = await generateText({
      model: anthropic('claude-sonnet-4-20250514'),
      prompt: `分析以下文档并回答问题:\n\n${input.document}\n\n问题:${input.question}`,
    })
    return result.text
  },
})

const agent = createAgent({
  model: deepseekModel,
  tools: [visionTool, longContextTool, searchTool],
  system: '你是一个智能编排助手。根据任务类型选择合适的工具:图片分析用 analyzeImage,长文档分析用 analyzeLongDocument,其他任务直接处理。',
})

流式输出集成

当 deepseek-kit 智能体作为子智能体时,其内部的流式事件不会传播到 AI SDK 的流中。如果你需要在 UI 中展示子智能体的进度,可以在工具中实现自定义的进度回调:

const researchTool = aiTool({
  description: '使用 DeepSeek 进行深度研究',
  parameters: z.object({ topic: z.string() }),
  execute: async ({ topic }) => {
    const agent = createAgent({ model: deepseekModel, tools: [searchTool] })

    let fullText = ''
    const stream = agent.stream({ prompt: topic })

    for await (const event of stream) {
      if (event.type === 'text-delta') {
        fullText += event.textDelta
      }
      if (event.type === 'tool-call') {
        console.log(`[DeepSeek] 调用工具: ${event.toolCalls.map(t => t.function.name).join(', ')}`)
      }
    }

    return fullText
  },
})

注意事项

  • 上下文隔离 — deepseek-kit 子智能体拥有独立的上下文窗口,不继承 AI SDK 主智能体的对话历史。如需传递上下文,请在工具的 execute 函数中手动构建
  • 延迟叠加 — 子智能体的执行时间会叠加到主智能体的总延迟上。对于简单文本任务,考虑直接使用 DeepSeek 而非通过 AI SDK 中转
  • 错误传播 — 子智能体中的错误会作为工具执行失败返回给主智能体,不会直接中断主流程
  • API Key — 确保同时配置了 DEEPSEEK_API_KEY 和 AI SDK 对应模型的 API Key(如 OPENAI_API_KEY