这阵子MCP挺火的,闲来无聊尝试了一波,感觉挺有意思的。前阵子说利用AI大模型驱动Fluent似乎可以借助MCP实现。
MCP(Model Context Protocol)是Anthropic于2024年开源的标准协议,旨在统一AI模型与数据源的交互方式,提升数据访问的便捷性和可靠性,提供标准化的工具调用、资源管理和提示词功能。目前,MCP仍处于探索阶段,其行业影响力有待进一步验证。
早期的AI大模型依赖于训练,其根据用户输入的提示词给出模型的推理结果,其输出结果受限于模型的训练效果,经常会因为模型能力的不足而出现幻觉。后来人们发现可以借助于利用AI大模型调用函数来实现模型能力的补充,但这种情况经常会因为调用接口的不统一而导致兼容性很差,常常一个实现相同功能的函数为了迎合不同的模型而要重复编写。再后来就有了MCP,人们终于可以在同一个接口规范下去实现函数调用了。也就是说,有了MCP后,只要你的函数满足MCP协议,那么所有支持MCP的AI大模型都可以调用了。
MCP的运作主要包括三部分:
-
MCP Host:需要通过MCP获得数据的程序,例如Claude Desktop, IDEs或者一些AI工具等 -
MCP Client: MCP协议客户端,和MCP Server是一对一支持的。 -
MCP Server:需要通过MCP暴露一些特殊的能力的轻应用。根据MCP协议定义,Server可以提供三种类型的标准能力,Resources、Tools、Prompts,每个Server可同时提供者三种类型能力或其中一种。 -
Resources:资源,类似于文件数据读取,可以是文件资源或是API响应返回的内容。 -
Tools:工具,第三方服务、功能函数,通过此可控制LLM可调用哪些函数。 -
Prompts:提示词,为用户预先定义好的完成特定任务的模板
借用网上流行的一张图来说明MCP各组件之间的关系。
下面举个简单的例子来说明。
比如说前些时候人们经常用“9.11和9.9比较谁更大?”这样的问题来考验AI大模型,虽然说现在的大模型基本都能回答,但是如果我们使用MCP,可以让小模型也能很好地回答此问题。
首先确保机器上安装了python。然后用下面的命令安装MCP组件:
pip install mcp
或者pip install mcp[cli]
安装完毕后执行下面的命令查看mcp是否安装成功:
mcp version
如果显示以下结果,则表示安装成功。

下面来创建一个mcp server。
-
新建一个 test.py 文件,用于编写 MCP Server 的 python 程序代码。
以下是 test.py 文件内容,注意,备注内容非常重要,大模型通过函数名和备注来判断是否调用次函数。这里只是简单演示而随便编的一段代码,并没有考虑参数a和b相等的情况。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("compareNumber")
@mcp.tool()
def getNumber(a,b):
""" 比较两个数的大小,返回较大的数
参数:
a : 第一个数
b : 第二个数
返回:
a和b中的最大值
"""
if a > b:
return a
else:
return b
if __name__ == "__main__":
mcp.run(transport='stdio')
代码编写完毕后将其放在d盘跟路径下,完整路径为d:test.py
。
下面我们到CherryStudio中测试MCP。
-
在CherryStudio中点击设置按钮,然后进入 MCP服务器 栏目下,点击 编辑JSON 按钮打开编辑对话框

-
输入以下信息
{
"mcpServers": {
"compareNumber": {
"description": "比较两个数的大小,返回较大的那个数",
"isActive": true,
"command": "python",
"args": [
"d:\test.py"
]
}
}
}
如下图所示,点击 确定 按钮完成设置。

-
设置完毕后如下图所示。

下面找个小模型试试。我们使用Qwen2.5:7B来尝试。
首先不开MCP,我们问问 9.11和9.9谁更大? ,如下图所示,7b的qwen并没有给出正确答案。

然后启用MCP,如下图所示,可以看到大模型启用了MCP中的getNumber函数,并给出了正确的结果。

所以,我们可以将想要实现的功能通过MCP进行封装,然后大模型根据用户的提示词选择合适的功能函数进行调用。
(完)

本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册