首页/新闻资讯/正文详情

爆火的MCP!手把手教你用langchain打造自己的AI服务并接入TaoToken

发布时间:2026/9/27 18:55:09 来源:云帆数科 栏目:资讯中心
爆火的MCP!手把手教你用langchain打造自己的AI服务并接入TaoToken
1. 为什么我要把 MCP 和 langchain 拼在一起用MCP 是 Model Context Protocol 的缩写你可以把它理解成一套「工具插头标准」以前给大模型加能力得在代码里手写 Function Call 的 JSON Schema模型换了、工具改了schema 就得跟着重写。MCP 把「工具怎么描述、怎么被调用、怎么返回结果」抽成协议服务端只管暴露工具客户端只管发现和调用两边解耦。适合谁适合想自建 AI 服务、又不想被某一家模型 SDK 绑死的开发者。但光有 MCP 还不够。真实项目里你往往要同时挂好几个 MCP Server文件、天气、数据库、内部 API还要让模型自己决定调哪个、调几次、拿到结果后继续推理。这时候 langchain 生态里的langchain-mcp-adapters就派上用场了它把 MCP 工具自动转成 langchain 的 Tool 对象再交给langgraph的 ReAct Agent 调度。你写的是标准 MCP Server跑起来却是一个能自主编排工具的 Agent。我这次的目标很具体本地起两个 MCP Server一个算数、一个查天气用 langchain 客户端把它们聚合成一个 Agent模型调用统一走 TaoToken 的 OpenAI 兼容通道。整条链路跑通后你换模型只需要改一个base_url和一个 Key工具代码一行不动。下面从环境准备一路写到排错命令都能直接复制。2. TaoToken 前置一个 Key 打通模型调用在写 MCP 之前先把模型通道定下来。langchain 的ChatOpenAI需要一个base_url和api_keyTaoToken 提供 OpenAI 兼容接口所以不用装额外的 SDK直接复用langchain_openai就行。这样做的好处是MCP 工具链和模型供应商彻底解耦哪天想换模型只动配置不动业务代码。你需要先去控制台拿一个 API Key。打开 https://taotoken.net/api-keys 登录后创建一个 Key复制出来形如sk-开头的一串。注意这个 Key 只在创建时完整显示一次先存到环境变量里别硬编码进代码提交到仓库。拿到 Key 后把接口地址和 Key 写进环境变量后面所有脚本都从这里读export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api/v1如果你更习惯用配置文件管理可以在项目根目录建一个.env用python-dotenv加载。我实测下来环境变量最省事尤其是同时开多个终端跑 Server 和 Client 的时候不用每个文件都改一遍。注意base_url结尾的/v1别漏langchain 的 OpenAI 客户端会在这个地址后面拼/chat/completions少一段就会 404。模型名怎么填TaoToken 的模型列表在文档里有常见的就是gpt-4o-mini、gpt-4o这类。你可以在 https://taotoken.net/doc 查到当前支持的模型标识填错模型名会直接返回 400报错信息里会写model not found很好定位。3. 可复制配置从 MCP Server 到 langchain Client3.1 环境与依赖安装Python 版本要大于 3.10我用的是 3.12。MCP 的 Python SDK 用到了较新的类型语法3.9 会报TypeError。依赖装这几个pip install mcp[cli] langchain-mcp-adapters langchain-openai langchain langgraph python-dotenvmcp[cli]带上了命令行调试工具后面验证 Server 能不能单独跑起来会用到。langchain-mcp-adapters是核心负责把 MCP 工具转成 langchain Tool。3.2 写第一个 MCP Servermath_server.pyMCP Server 的本质是「注册工具 启动传输层」。用FastMCP装饰器注册工具最直观# math_server.py from mcp.server.fastmcp import FastMCP import logging logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) logger logging.getLogger(__name__) mcp FastMCP(Math) mcp.tool() def add(a: int, b: int) - int: logger.info(add called: a%d, b%d, a, b) return a b mcp.tool() def multiply(a: int, b: int) - int: logger.info(multiply called: a%d, b%d, a, b) return a * b if __name__ __main__: logger.info(starting Math MCP server via stdio) mcp.run(transportstdio)transportstdio表示这个 Server 通过标准输入输出和客户端通信适合本地进程调用。工具函数的类型注解a: int会被自动转成 JSON Schema模型就是靠这个知道参数类型的所以注解别省。3.3 第二个 MCP Serverweather_server.py再写一个天气服务结构一样只是工具不同# weather_server.py from mcp.server.fastmcp import FastMCP import logging logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) logger logging.getLogger(__name__) mcp FastMCP(Weather) mcp.tool() def get_weather(city: str) - str: logger.info(get_weather called: city%s, city) return f{city}天气晴朗25℃ if __name__ __main__: logger.info(starting Weather MCP server via stdio) mcp.run(transportstdio)这里返回的是模拟数据真实项目里换成调用气象 API 即可MCP 层不用改。3.4 langchain Client聚合多个 MCP Server关键来了。MultiServerMCPClient用一个字典描述所有要挂载的 Server每个 Server 指定启动命令、参数和传输方式# remote_client.py import asyncio import os from dotenv import load_dotenv from langchain_mcp_adapters.client import MultiServerMCPClient from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent load_dotenv() llm ChatOpenAI( modelgpt-4o-mini, api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ[TAOTOKEN_BASE_URL], ) def print_result(agent_response): for message in agent_response.get(messages, []): if message.type ai and message.content: print(最终答案:, message.content) async def main(): client MultiServerMCPClient({ math: { command: python, args: [./math_server.py], transport: stdio, }, weather: { command: python, args: [./weather_server.py], transport: stdio, }, }) tools await client.get_tools() print(已加载工具:, [t.name for t in tools]) agent create_react_agent(llm, tools) while True: user_input input(\n请输入问题exit 退出).strip() if user_input.lower() exit: break resp await agent.ainvoke({messages: user_input}) print_result(resp) if __name__ __main__: asyncio.run(main())create_react_agent(llm, tools)是 langgraph 的预构建模块它把工具列表塞进一个 ReAct 循环模型先想「要不要调工具」要调就发工具调用拿到结果再想直到能直接回答。你不需要手写这个循环。3.5 关于 config.toml 与 settings.json 骨架如果你用 MCP 官方 CLI 或某些客户端比如 Claude Desktop 类工具来管理 Server它们读的是 JSON 配置。一个通用的settings.json骨架长这样{ mcpServers: { math: { command: python, args: [./math_server.py] }, weather: { command: python, args: [./weather_server.py] } } }而如果你用 Rust 版或某些支持 TOML 的宿主config.toml等价写法是[mcpServers.math] command python args [./math_server.py] [mcpServers.weather] command python args [./weather_server.py]两种格式描述的是同一件事Server 名字、启动命令、参数。langchain 的MultiServerMCPClient用的是 Python 字典字段名和上面一致所以你在不同宿主之间迁移配置时改的是外壳工具代码不动。4. 验证请求跑通一次完整调用先单独验证每个 Server 能不能起来。开一个终端python math_server.py如果没报错、光标停住不返回说明 stdio Server 正常在等输入。按CtrlC退出。天气服务同理。然后跑客户端python remote_client.py启动后你会先看到一行已加载工具: [add, multiply, get_weather]这说明 langchain 成功从两个 MCP Server 里发现了三个工具。接着输入问题北京天气怎么样另外帮我算 12 乘 8预期行为是Agent 先调get_weather(city北京)再调multiply(a12, b8)最后把两个结果拼成一句话回答。你会在 Server 那边的终端看到日志2025-xx-xx - INFO - get_weather called: city北京 2025-xx-xx - INFO - multiply called: a12, b8客户端这边打印最终答案: 北京天气晴朗25℃。12 乘 8 等于 96。一次请求里模型自主调了两个不同 Server 的工具这就是 MCP langchain 的价值工具分散在不同进程Agent 统一编排。如果你只问「3 加 5」它只会调add不会碰天气服务说明工具选择是按需的。5. 本篇常见错排查报错ModuleNotFoundError: No module named mcp依赖没装全。注意包名是mcp[cli]不是mcp-server。重装一遍pip install mcp[cli] langchain-mcp-adapters。报错openai.BadRequestError: model not found模型名填错了。去 https://taotoken.net/doc 核对当前可用模型标识别凭记忆写。报错401 UnauthorizedKey 没读到或已失效。先确认echo $TAOTOKEN_API_KEY有输出再确认.env里没有多余空格和引号。Key 泄露了就去 https://taotoken.net/api-keys 删掉重建。工具列表是空的已加载工具: []多半是args里的路径不对。MultiServerMCPClient启动子进程时的工作目录可能和你终端不一致建议把./math_server.py换成绝对路径或者用os.path.abspath拼出来。Agent 一直不调工具直接瞎编答案检查工具函数的类型注解是否完整。def add(a, b)没有注解生成的 schema 参数类型是空的模型不知道传什么就不敢调。补上a: int, b: int。Server 启动后立刻退出mcp.run(transportstdio)必须在if __name__ __main__:里否则被 import 时就会执行。另外 stdio 模式下不要往 stdout 打印调试信息会污染协议流日志走logging到 stderr。中文输入乱码Windows 终端默认编码可能是 GBK。跑之前执行chcp 65001切到 UTF-8或者在 Python 里设置PYTHONIOENCODINGutf-8。6. 把这条链路用起来跑通之后你手里其实有了一个可复用的骨架新增能力 新增一个 MCP Server 文件 在MultiServerMCPClient字典里加一项模型侧完全不用动。想把模型换成更强的版本改ChatOpenAI的model参数即可base_url和 Key 还是那一套。如果你打算长期跑编码类或 Agent 类任务可以看看 Coding Plan 的额度方案 https://taotoken.net/coding-plan 比按次调用更适合高频场景只是想先验证模型对话效果直接开 https://taotoken.net/models 试就行。接入文档在 https://taotoken.net/doc 遇到协议层的细节可以对照查。我踩过的一个坑是一开始把两个 Server 写在同一个文件里用不同端口结果 stdio 模式下进程管理很乱。后来拆成独立文件、每个 Server 一个进程日志清晰出问题也好定位。工具多了之后建议按领域拆文件别堆在一起。

相关推荐

uniapp+koa+mongoose 增删改查实战:TaoToken 统一 Key 打通 SSL 配置
uniapp+koa+mongoose 增删改查实战:TaoToken 统一 Key 打通 SSL 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 18:55:09

网站建设注意这3点,新手入门不踩坑
网站建设注意这3点,新手入门不踩坑

网站建设注意这3点,新手入门不踩坑 改个需求建站公司拖一周,这种糟心事儿是不是让你血压飙升?很多新手入门做网站,前期沟通得欢,一上头就签了约。结果呢?想改个按钮颜色、换个文案,对方就开始“内部评估”、“技术难度高”,一拖就是七八天。这时候你… · 2026/9/27 18:55:03

EMQX 5.0 网关框架配置 TaoToken:多物联网协议接入的 settings.json 骨架与验证
EMQX 5.0 网关框架配置 TaoToken:多物联网协议接入的 settings.json 骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 18:55:03

二进制文件编译器汇总:用 TaoToken 统一 Key 打通 Cline 与 CC Switch 配置
二进制文件编译器汇总:用 TaoToken 统一 Key 打通 Cline 与 CC Switch 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 19:25:54

3个免费工具搞定网页版崩坏星穹铁道,拒绝建站公司拖一周
3个免费工具搞定网页版崩坏星穹铁道,拒绝建站公司拖一周

3个免费工具搞定网页版崩坏星穹铁道,拒绝建站公司拖一周 改个需求建站公司拖一周,这种憋屈事谁没经历过?明明只是想在官网加个“网页版崩坏星穹铁道”的游戏入口或者资讯页,对方却要排期、改合同,最后交付的页面还卡顿得要命。别等了,自己动手才能掌握… · 2026/9/27 19:25:54

【安装包】2026 最新版 OpenClaw 接入 DeepSeek V4 完整配置 + 避坑指南:TaoToken 统一 Key 通道实战
【安装包】2026 最新版 OpenClaw 接入 DeepSeek V4 完整配置 + 避坑指南:TaoToken 统一 Key 通道实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 19:25:54

从原理到示例:Java开发玩转MCP,用TaoToken统一Key打通Spring AI Alibaba
从原理到示例:Java开发玩转MCP,用TaoToken统一Key打通Spring AI Alibaba

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 19:25:54

不会代码也能搞:一站式wordpress性能优化实战
不会代码也能搞:一站式wordpress性能优化实战

不会代码也能搞:一站式wordpress性能优化实战 自己完全不懂代码,却想给公司或项目搞个靠谱的网站,是不是经常对着屏幕发呆?别慌,这太正常了。其实你需要的不是从零学编程,而是一套能跑起来的【一站式wordpress】解决方案。但光有方案… · 2026/9/27 19:25:48

Call to undefined function think\captcha\imagettftext():PHP GD 扩展与 php-fpm 环境排查配置指南
Call to undefined function think\captcha\imagettftext():PHP GD 扩展与 php-fpm 环境排查配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 19:25:48

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码