2025-04-30 08:30 重庆
最近正在忙着准备 AI 产品示例项目的数据,但是有好几群友问了MCP的问题,先花点时间给大家安排一下 MCP。
最近正在忙着准备 AI 产品示例项目的数据,但是有好几群友问了MCP的问题,先花点时间给大家安排一下 MCP。作为一个带队落地 AI 应用的真实玩家,是怎么看待 MCP 的?
先说观点:「MCP 不错,但它仅仅是个协议而已」,很多科普文章中,提到的更多都是愿景,而不是落地的场景。
本文不再重新陈述 MCP 的基本概念,而是旨在能让大家了解的是 MCP 有什么用?
、怎么用?
、要不要用?
我准备了一份MCP实现的核心代码
,只保留必要的内容,五分钟就能看明白 MCP 回事。
先上代码,让我们看看实现 MCP 最核心的部分我们都干了些什么东西。顺便让大家看看 MCP 到底和 Function call 是个什么关系
❝此处只贴用于讲解的代码,其他代码基本都是逻辑处理与调用。也可关注公众号:【华洛 AI 转型纪实】,发送
❞mcpdemo
,来获取完整代码。
MCP 代码核心逻辑
我们在本地运行的 MCP,所以使用的是Stdio
模式的客户端和服务端。也就是:StdioServerTransport
和StdioClientTransport
先看打满日志的 demo 运行起来起来后,我们获得的信息:
我们的服务端写了两个简单的工具,加法
和减法
。
服务端启动成功之后,客户端成功的从服务端获取到了这两个工具。
我们发起了一个问题:计算1+1
接下来做的事情就是 MCP 的客户端核心三步逻辑:
客户端调用 AI 的 function call 能力,由 AI 决定是否使用工具,使用哪个工具。
客户端把确定要使用的工具和参数发送回服务端,由服务端实现 API 调用并返回结果。
客户端根据结果,再次调用 AI,由 AI 进行回答。
我们一边看代码一边说里面的问题:
第一步调用 AI,决定使用工具
客户端代码:
const response = await this.openai.chat.completions.create({
model: model,
messages,
tools: this.tools, // ! 重点看这里,this.tools是服务端返回的工具列表
});
看到了么?这里用的还是 Function call! 谣言一:MCP和Function call没关系,MCP就可以让大家调用工具
,终结了。MCP 就是用的 function call 的能力来实现的工具调用。当然我们也可以不用 Function call,我们就直接用提示词判断,也是可以的。
这里要说的是:MCP就是个协议
。并没有给大模型带来任何新的能力,也没有某些人说的 MCP 提升了 Function call 的能力,以后不用 Function call 了,用 MCP 就够了这种话,千万不要被误导。
「MCP 并没有让大模型的工具调用能力提升」
在真实的生产环境中,目前 Function call 主要的问题有:
工具调用准确性不够。 真正的生成环境可能不是三个五个工具,而是三十个五十个。工具之间的界限不够清晰的话,就会存在模型判断不准确的情况。
参数提取准确性不够。 特别是当一个工具必填加选填的参数达到十个以上的时候,面对复杂问题,参数的提取准确率会下降。
多意图的识别。
用户的一个问题涉及到多个工具时,目前没有能够稳定提取的模型。
第二步把工具和参数发回服务端,由服务端调用 API
客户端代码:
const result = await this.mcp.callTool({
name: toolName,
arguments: toolArgs,
});
服务端的代码:
server.tool(
"加法",
"计算数字相加",
{
"a": z.number().describe("加法的第一个数字"),
"b": z.number().describe("加法的第二个数字"),
},
async ({ a, b, c }) => {
console.error(`服务端: 收到加法API,计算${a}和${b}两个数的和。模型API发送`)
// 这里模拟API的发送和使用
let data = a + b
return {
content: [
{
type: "text",
text: a + '+' + b + '的结果是:' + data,
},
],
};
},
);
发现问题了么? API 是要有 MCP 服务器提供者调用的。「要花钱的朋友!」
每一台 MCP 服务器背后都是要成本的,收费产品进行 MCP 服务器的支持还说的过去,不收费的产品全靠爱发电。更不要说,谁敢在生成环境接一个不收费的私人的小服务器?
百度地图核心 API 全面兼容 MCP 了,百度地图是收费的,进行多场景的支持是很正常的行为。
来看看百炼吧,阿里的百炼目前推出了 MCP 的功能,支持在百炼上部署 MCP server。
也是要花钱的朋友~,三方 API 调用费用另算。
阿里的魔塔社区提供了大量的 MCP,可以看到有一些大厂的服务在,当然有收费的有免费的,各位可以尝试
第三步客户端根据结果,再次调用 AI,由 AI 进行回答。
客户端代码:
messages.push({
role: "user",
content: result.content,
});
const aiResponse = await this.openai.chat.completions.create({
model: model,
messages: messages,
});
从服务端返回的结果,添加到messages
中,配合提示词由大模型进行回复即可。
这一步属于正常的流程,没什么好说的。
那么问题是:我们使用 MCP 来实现,和我们自己实现这套流程有什么区别么?我们为什么要用 MCP 呢?
当初群里朋友第一次提到 MCP 的时候,我去看了一眼文档,给了这样的结论:
大厂为了抢生态做的事情,给落地的流程中定义了一些概念,多了脑力负担,流程和自己实现没区别。
对于工具的使用,自己实现和用 MCP 实现有什么区别么?
自己实现的流程和逻辑是这样的:
MCP 的逻辑是这样的:
「看吧,本质上是没有区别的。」
什么?你说 MCP 服务端,如果日后需要与其他企业进行合作,可以方便的让对方的 MCP 客户端调用? 我们的客户端也可以很方便的接入别人的 MCP 服务端。
不好意思,不用 MCP 也可以,因为 Function call 的参数格式已经确定了,这里原本存在差异性就极小。而且 MCP 也并没有解决这个差异性。还是需要客户端进行修改的。
MCP 真正的意义
现在还是诸神混战时期,整个 AI 产品的上下游所有的点,都具有极高的不确定性。
MCP 给出了一个技术标准化的协议,是大家共建 AI 的愿景中的一环,潜力是有的。
但是 Anthropic 真的只是在乎这个协议么?前面的内容我们也看到了,MCP 和我们自己实现的流程几乎是一样的。但是为什么还要提出 MCP 呢?
「为了生态控制权和行业话语权。」
MCP 它表面上是一个开放的协议,旨在解决 AI 模型与外部工具集成的碎片化问题,但其实他就是 Anthropic 对未来 AI 生态主导权的竞争。
未来 MCP 如果真的作为一个标准的协议成为大家的共识,围绕这个协议,甚至每家模型的工具调用格式都将被统一,此时 Anthropic 在委员会里的位置呢?不言而喻啊。
结语
最后把我的策略分享给大家吧:
「打算在圈子里玩的部分,就和大家用一样的,不在圈子里玩的,其实自己团队实现也是 OK 的。」
我这边更多的是自己团队实现的,而且在这个实现过程中大家对模型应用、AI 产品的理解不断地在提升。
希望各位读者也多进行尝试,这样未来面对新出的各路牛鬼蛇神时大家才能有更多的判断力。
共勉吧!
❝☺️你好,我是「华洛」,如果你对程序员转型 AI 产品负责人感兴趣,请给我点个赞。
已入驻【稀土掘金】,欢迎大家围观,后续会分享大量最近三年来的经验和踩过的坑。
❞
关注更多AI编程资讯请去AI Coding专区:https://juejin.cn/aicoding