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