下面内容将带你从零开始,用 Node.js + LangChain.js 整合 DeepSeek LLM、你自建的 REST 服务,设计一个自定义 Agent,最后通过 Model Context Protocol (MCP) 对外发布并调用。全文分为六大步骤,每步都配有示例代码和关键文档链接,帮助你理清整体逻辑。
简要总结:
- 环境准备:初始化 Node 项目并安装 DeepSeek 与 LangChain.js 依赖 (Your First API Call | DeepSeek API Docs, npm)
- DeepSeek 接入:配置 API Key,使用
@langchain/deepseek
包创建ChatDeepSeek
实例 (npm) - 自定义 Agent:基于 LangChain.js 扩展 LLM 类,并用 PromptTemplate + OutputParser 构建 Agent (🦜️🔗 Langchain, 🦜️🔗 Langchain)
- 工具调用:在 Agent 中封装对你自建 REST API 的调用逻辑,无缝插入对话流
- MCP 集成:了解 MCP 规范,安装 LangChain.js MCP 适配器,与 MCP 服务器建立连接 (Home, GitHub)
- 服务发布与调用:用 Express/HTTP 暴露 Agent,演示 MCP 格式请求与多 Agent 系统接入 (www.marcnuri.com)
1. 环境准备
1.1 初始化 Node.js 项目
在项目根目录执行 npm init -y
创建 package.json
。
1.2 安装关键依赖
- 深寻 DeepSeek API:
@langchain/deepseek
(npm) - LangChain.js:
langchain
- MCP 适配器:
langchainjs-mcp-adapters
(GitHub)
npm install langchain @langchain/deepseek langchainjs-mcp-adapters express axios
2. DeepSeek LLM 接入
2.1 配置 API Key
在环境变量中设置:
export DEEPSEEK_API_KEY="your_deepseek_api_key"
2.2 创建 ChatDeepSeek
实例
DeepSeek 的 API 与 OpenAI 接口兼容,LangChain.js 提供了专用包装器: (Your First API Call | DeepSeek API Docs, npm)
// src/deepseekClient.js
import { ChatDeepSeek } from "@langchain/deepseek";
import { HumanMessage } from "langchain/schema";
export const deepseek = new ChatDeepSeek({
apiKey: process.env.DEEPSEEK_API_KEY,
model: "deepseek-v3",
});
export async function callDeepseek(prompt) {
const response = await deepseek.call([new HumanMessage(prompt)]);
return response.text;
}
3. 自定义 Agent 设计
3.1 扩展自定义 LLM 类
参考 LangChain.js 的指南,创建一个可插入你自身逻辑的 LLM Wrapper (🦜️🔗 Langchain)
// src/customLLM.js
import { LLM } from "langchain/llms/base";
export class MyDeepseekLLM extends LLM {
_llmType() { return "deepseek"; }
async _call(prompt) {
// 复用 callDeepseek 工具
const { callDeepseek } = await import("./deepseekClient");
return await callDeepseek(prompt);
}
}
3.2 构建 Chat Agent
在 LangChain.js 中,基于聊天模型的 Agent 需要四要素:PromptTemplate、LLM、stop 序列、OutputParser (🦜️🔗 Langchain)
// src/myAgent.js
import { ChatAgent } from "langchain/agents";
import { PromptTemplate } from "langchain/prompts";
import { MyDeepseekLLM } from "./customLLM";
const promptTemplate = new PromptTemplate({
template: "任务:{goal}\n对话历史:{history}\n助手:",
inputVariables: ["goal", "history"],
});
export const myAgent = new ChatAgent({
llm: new MyDeepseekLLM(),
prompt: promptTemplate,
stop: ["\n"],
outputParser: // 可选,自定义解析工具调用指令 :contentReference[oaicite:10]{index=10}
});
3.3 插入工具调用
利用 LangChain.js 的 Tool 概念,在 Agent 中注册一个调用你自建 REST 服务的工具(Tool):
// src/tools/weatherTool.js
import axios from "axios";
export const weatherTool = {
name: "weather",
description: "获取指定城市的天气",
func: async (city) => {
const res = await axios.get(`http://localhost:8000/weather?city=${city}`);
return res.data.weather;
},
};
在 Agent 运行时,将工具列表注入:
myAgent.addTools([weatherTool]);
4. MCP 协议与集成
4.1 认识 Model Context Protocol
MCP 是 Anthropic 提出的开放标准,用于在 LLM 客户端与服务器之间传递结构化上下文,支持双向工具调用 (Home)。你可以在官方仓库查看规范: (GitHub)
4.2 安装 LangChain.js MCP 适配器
社区提供了适配器,可让 LangChain.js 应用像 MCP 客户端一样与服务器通信 (GitHub)
npm install langchainjs-mcp-adapters
4.3 创建 MCP 客户端
使用 MCPStdIO
或 MCPSSE
传输实现,与 MCP 服务器建立连接: (www.marcnuri.com)
// src/mcpClient.js
import { MCPStdIO } from "langchainjs-mcp-adapters";
export const mcpClient = new MCPStdIO({
command: "node path/to/mcp-server.js",
args: [],
});
5. 服务发布与调用
5.1 用 Express 暴露 Agent 服务
将上面逻辑封装到 HTTP POST 接口 /mcp/agent
,接收 MCP 格式 JSON 并返回:
// src/server.js
import express from "express";
import { myAgent } from "./myAgent";
import { mcpClient } from "./mcpClient";
const app = express();
app.use(express.json());
app.post("/mcp/agent", async (req, res) => {
const mcpContext = req.body;
// 直接通过 mcpClient 转发给 Agent
const reply = await mcpClient.callAgent(myAgent, mcpContext);
res.json(reply);
});
app.listen(5000, () => console.log("MCP Agent running on :5000"));
5.2 测试调用示例
使用 curl 模拟 MCP 请求:
curl -X POST http://localhost:5000/mcp/agent \
-H "Content-Type: application/json" \
-d '{
"goal":"获取北京天气并回复",
"agents":[{"name":"MyAgent","role":"天气助手","state":"waiting","history":[{"from":"user","content":"北京天气怎样"}]}],
"toolsUsed":[]
}'
6. 在多 Agent 系统中接入
将你的 Agent 服务 URL 注册到主控进程(如 AutoGen 或其他 MCP 管理器),即可与其他 Agents 并行协作,公共上下文通过 MCP 协议实时同步。
至此,你已完整搭建了:
- DeepSeek LLM 驱动的自定义 Agent
- LangChain.js 中的工具调用能力
- MCP 协议 的客户端适配与服务发布
后续可扩展记忆模块、更多工具、异步任务队列等,进一步提升 Agent 智能与稳定性。
在AI时代,随着AI技术的迅猛发展,各种出行助手应用如雨后春笋,受限于大模型的数据孤岛、能力边界限制,始终未能发挥其在应用层面落地价值。 MCP的出现统一了大模型与外部数据、工具间的通讯协议。而在出行服务领域,数据的时效性、工具的便捷性尤为重要,高德MCP Server旨在为大模型在出行领域的应用落地高效赋能。