LangChain 集成

将 deepseek-kit 与 LangChain.js 协同使用——DeepSeek 处理文本推理和工具调用,LangChain 处理多模态和复杂工作流。

LangChain.js 是一个功能丰富的 AI 应用开发框架,提供了智能体、工具、中间件、记忆系统等完整生态。通过将 deepseek-kit 与 LangChain 集成,你可以利用 LangChain 的多模态支持、预构建工具和状态管理能力,同时享受 DeepSeek 的高性价比文本推理。

安装

pnpm add deepseek-kit langchain @langchain/openai zod

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

将 deepseek-kit 智能体封装为 LangChain 工具,在 LangChain 的 createAgent 中作为子智能体使用。LangChain 主智能体负责多模态理解和任务编排,DeepSeek 子智能体负责深度文本推理。

场景:多模态输入 + 文本研究

import { ChatOpenAI } from '@langchain/openai'
import { createAgent, createModel } from 'deepseek-kit'
import { createAgent as createLangChainAgent, tool } from 'langchain'
import { z } from 'zod'

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

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

const researchTool = tool(
  async ({ topic, context }) => {
    const result = await researchAgent.generate({
      prompt: `基于以下上下文,深入研究:${topic}\n\n上下文:${context}`,
    })
    return result.text
  },
  {
    name: 'deepseek_research',
    description: '使用 DeepSeek 对给定主题进行深度研究和分析,适合需要深度推理的文本任务',
    schema: z.object({
      topic: z.string().describe('需要研究的主题'),
      context: z.string().describe('相关的上下文信息'),
    }),
  },
)

const mainAgent = createLangChainAgent({
  model: new ChatOpenAI({ model: 'gpt-4o' }),
  tools: [researchTool],
})

场景:代码审查流水线

LangChain 编排多步工作流,DeepSeek 负责具体的代码分析和审查:

import { ChatOpenAI } from '@langchain/openai'
import { createAgent, createModel, tool as dsTool } from 'deepseek-kit'
import { createAgent as createLangChainAgent, tool } from 'langchain'
import { z } from 'zod'

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

const codeAnalysisAgent = createAgent({
  model: deepseekModel,
  system: '你是一个代码分析专家。分析代码结构、逻辑和潜在问题,给出详细的分析报告。',
})

const codeReviewAgent = createAgent({
  model: deepseekModel,
  system: '你是一个代码审查专家。基于分析报告,给出具体的改进建议和修复方案。',
  output: {
    schema: z.object({
      issues: z.array(z.object({
        severity: z.enum(['critical', 'warning', 'info']),
        description: z.string(),
        suggestion: z.string(),
      })),
      overallScore: z.number().min(0).max(100),
      summary: z.string(),
    }),
  },
})

const analyzeTool = tool(
  async ({ code }) => {
    const result = await codeAnalysisAgent.generate({
      prompt: `分析以下代码:\n\`\`\`\n${code}\n\`\`\``,
    })
    return result.text
  },
  {
    name: 'analyze_code',
    description: '使用 DeepSeek 分析代码结构和逻辑',
    schema: z.object({ code: z.string().describe('需要分析的代码') }),
  },
)

const reviewTool = tool(
  async ({ analysisReport }) => {
    const result = await codeReviewAgent.generate({
      prompt: `基于以下分析报告进行代码审查:\n${analysisReport}`,
    })
    return JSON.stringify(result.output)
  },
  {
    name: 'review_code',
    description: '基于分析报告进行代码审查,返回结构化的审查结果',
    schema: z.object({ analysisReport: z.string().describe('代码分析报告') }),
  },
)

const mainAgent = createLangChainAgent({
  model: new ChatOpenAI({ model: 'gpt-4o' }),
  tools: [analyzeTool, reviewTool],
})

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

将 LangChain 的能力封装为 deepseek-kit 工具,在 deepseek-kit 智能体中按需调用。

场景:图片理解 + 文本推理

DeepSeek 智能体作为主控,需要理解图片时调用 LangChain 的多模态模型:

import { HumanMessage } from '@langchain/core/messages'
import { ChatOpenAI } from '@langchain/openai'
import { createAgent, createModel, tool } from 'deepseek-kit'
import { z } from 'zod'

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

const visionModel = new ChatOpenAI({ model: 'gpt-4o' })

const analyzeImageTool = tool({
  name: 'analyzeImage',
  description: '分析图片内容,返回详细的文字描述。当用户提到图片、截图、照片时使用此工具。',
  schema: z.object({
    imageUrl: z.string().describe('图片的 URL 地址'),
    question: z.string().describe('关于图片的具体问题'),
  }),
  execute: async (input) => {
    const response = await visionModel.invoke([
      new HumanMessage({
        content: [
          { type: 'text', text: input.question },
          { type: 'image_url', image_url: { url: input.imageUrl } },
        ],
      }),
    ])
    return response.content as string
  },
})

const agent = createAgent({
  model: deepseekModel,
  tools: [analyzeImageTool, searchTool],
  system: '你是一个助手。当用户发送图片时,先用 analyzeImage 理解图片,再基于结果回答。',
})

const result = await agent.generate({
  prompt: '这张截图中的错误信息是什么?帮我分析可能的原因。',
})

场景:利用 LangChain 预构建工具

LangChain 提供了丰富的预构建工具(Web 搜索、数据库查询等),可以直接封装为 deepseek-kit 工具:

import { createAgent, createModel, tool } from 'deepseek-kit'
import { z } from 'zod'

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

const webSearchTool = tool({
  name: 'webSearch',
  description: '搜索互联网获取实时信息',
  schema: z.object({
    query: z.string().describe('搜索关键词'),
  }),
  execute: async (input) => {
    // 使用 LangChain 的预构建搜索工具或自定义搜索实现
    const results = await performWebSearch(input.query)
    return results
  },
})

const agent = createAgent({
  model: deepseekModel,
  tools: [webSearchTool],
  system: '你是一个研究助手。使用 webSearch 工具获取最新信息,然后综合分析回答。',
})

混合架构示例

以下是一个完整的混合架构示例——LangChain 处理用户交互和多模态输入,DeepSeek 处理文本密集型任务:

import { ChatOpenAI } from '@langchain/openai'
import { createAgent, createModel, tool as dsTool } from 'deepseek-kit'
import { createAgent as createLangChainAgent, tool } from 'langchain'
import { z } from 'zod'

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

const writingAgent = createAgent({
  model: deepseekModel,
  system: '你是一个专业的技术写作助手。根据提供的信息撰写高质量的技术文档。',
})

const analysisAgent = createAgent({
  model: deepseekModel,
  system: '你是一个数据分析助手。分析数据并提取关键洞察。',
  output: {
    schema: z.object({
      summary: z.string(),
      keyFindings: z.array(z.string()),
      recommendation: z.string(),
    }),
  },
})

const writeDocTool = tool(
  async ({ topic, context }) => {
    const result = await writingAgent.generate({
      prompt: `撰写关于 ${topic} 的技术文档。\n\n参考资料:${context}`,
    })
    return result.text
  },
  {
    name: 'write_document',
    description: '使用 DeepSeek 撰写技术文档',
    schema: z.object({
      topic: z.string().describe('文档主题'),
      context: z.string().describe('参考资料'),
    }),
  },
)

const analyzeDataTool = tool(
  async ({ data, question }) => {
    const result = await analysisAgent.generate({
      prompt: `分析以下数据:${data}\n\n问题:${question}`,
    })
    return JSON.stringify(result.output)
  },
  {
    name: 'analyze_data',
    description: '使用 DeepSeek 分析数据并提取洞察',
    schema: z.object({
      data: z.string().describe('需要分析的数据'),
      question: z.string().describe('分析问题'),
    }),
  },
)

const mainAgent = createLangChainAgent({
  model: new ChatOpenAI({ model: 'gpt-4o' }),
  tools: [writeDocTool, analyzeDataTool],
})

注意事项

  • 上下文隔离 — deepseek-kit 子智能体拥有独立的上下文窗口。如需传递 LangChain 主智能体的对话历史,请在工具的 execute 函数中手动构建消息
  • 工具格式差异 — deepseek-kit 的 tool() 和 LangChain 的 tool() 使用不同的参数格式,不能直接互换。需要在集成层做适配
  • 错误处理 — deepseek-kit 子智能体的错误会作为工具执行失败返回给 LangChain 主智能体。你可以在 LangChain 的中间件中统一处理这些错误
  • API Key — 确保同时配置了 DEEPSEEK_API_KEY 和 LangChain 对应模型的 API Key(如 OPENAI_API_KEY
  • 流式输出 — deepseek-kit 子智能体的内部流式事件不会传播到 LangChain 的流中。如需展示进度,请在工具中自行处理