最近在折腾 MCP,想把本地的一个 PyTorch 训练脚本接进去,让模型能调用一些文件系统工具。但看了几篇文档还是有点懵:MCP 到底是像 gRPC 那样的通信层,还是更偏 Tool Use 的封装规范?我在一个推理服务里同时用了 vLLM 和 FastAPI,现在想加 MCP Server,是不是得把工具注册和模型调用拆成两个进程?有没有实际跑通过的老哥说说,你们是在训练框架里直接嵌 MCP,还是单独起一个服务再让模型去连?有点分不清它和 LangChain 那套 Tool 抽象的区别,求指点下思路。
MCP 协议在深度学习框架里到底该怎么接?有点搞不懂定位
全部回复
共 3 条我理解的 MCP 更像是给模型和工具之间定的一套标准接口,不是 gRPC 那种纯通信层,重点在工具的发现和调用规范上。你现在 vLLM 加 FastAPI 的架构,MCP Server 单独起进程比较省事,训练脚本里直接嵌会跟推理服务耦合太紧。跟 LangChain 的 Tool 抽象比,MCP 更像跨应用复用的协议层,LangChain 那套还是绑在它自己生态里。建议先把工具注册抽出来独立跑,模型侧通过 MCP client 连过去试试。
我跑过类似的场景,MCP本质上不是通信层,更像是一套“工具接口的约定”,你可以粗暴理解成把Tool Use那套东西标准化了,跟gRPC完全不是一个层次的东西。你那个vLLM加FastAPI的架构,工具注册和模型调用不一定非要拆两个进程,但实际跑下来拆开更省心,尤其你还在训练脚本里混着搞,耦合太紧后面调工具权限会很难受。我自己的做法是单独起一个MCP Server进程,训练侧只当客户端去连,模型侧通过MCP拿到工具列表再决定调哪个。跟LangChain的Tool抽象比,MCP更偏协议和跨进程边界,LangChain那套更偏框架内的编排,两者不是替代关系,硬要类比的话MCP管“怎么连上工具”,LangChain管“怎么把工具串进链里”。你要是只想让PyTorch脚本调几个文件系统工具,其实直接用Python函数加个简单schema也能跑,不一定非上MCP,但如果你想让不同模型、不同服务共用同一套工具定义,那MCP的价值就出来了。
MCP 和 gRPC 不是一个层面的东西,它更像一套约定好的工具描述和调用协议,底层走什么传输其实无所谓,stdio 也行 SSE 也行。你在推理服务里加 MCP Server,不一定非得拆成两个进程,但拆开确实更省心,尤其 vLLM 那边本来就吃显存,工具执行逻辑混进去容易互相拖累。我自己的做法是单独起一个 MCP Server 进程,FastAPI 这边只负责把模型吐出来的 tool call 转发过去,训练脚本本身不嵌 MCP,训练和推理工具调用本来就是两回事。它和 LangChain 那套 Tool 抽象的区别,我觉得 LangChain 是框架内部的接口,你换框架就得重写,MCP 更像是跨进程跨语言的通用插座,理论上 Claude、本地模型、你自己的 agent 都能插同一个 Server。真要说定位,我倾向于把它当成模型和外部能力之间的标准化中间层,而不是通信框架本身。你先想清楚工具执行需不需要和推理共享状态,不需要的话拆进程基本是最稳的。