专栏名称: 玉树芝兰
思考教育、写作和互联网。 我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动。
目录
相关文章推荐
天池大数据科研平台  ·  DeepSeek R1 最新全面综述:R1 ... ·  15 小时前  
大数据文摘  ·  马斯克大力出奇迹,Grok3 把 o3 干翻了 ·  3 天前  
数据派THU  ·  记忆层增强的 Transformer ... ·  1 周前  
数据派THU  ·  数据派志愿者招募 | 寻找最志同道合的你! ·  1 周前  
51好读  ›  专栏  ›  玉树芝兰

Claude 的 MCP (模型上下文协议)有啥用?

玉树芝兰  · 公众号  · 大数据  · 2024-11-28 17:13

正文

轻松愉快的 SQL 数据分析,只不过是冰山一角

协议


Claude (Anthropic) 最近出了个 MCP (Model Context Protocol,模型上下文协议) 协议,搞得我朋友圈里有刷屏之势。你能清晰感受到,大伙儿都非常欣喜。我自己试用之后,决定写下这篇文章,分享给你。


MCP 是一种新的开放标准协议,用来在大模型和数据源之间建立安全双向的链接。这是它的官方示意图。


这张图展示了使用 Claude 或其他 IDE 时,通过这种双向沟通协议,模型(目前指 Claude)可以与不同的数据服务器进行连接。每个连接的数据源可能千差万别,比如上图里面前两个连接本地数据,第三个则直接通过互联网操作远程文件。

MCP 有什么用呢?为什么会让这么多的开发者与用户欢欣鼓舞?

MCP 是一种统一的集成方式,交互界面完全一致。如果其他大模型也跟进,那么以后连接数据的感觉,就像给不同的电子设备使用 USB-C 接口,而不用准备那么多种不同的线缆插头。

更重要的,是 MCP 的设计目标——提升 安全性与控制力 。因为以前处理数据时,我们通常采用 极端的处理方式 ,很不安全。


第一种是将数据上传到大模型的对话中。这会带来两个问题:

  1. 数据上传到他人服务器上,存在安全隐患。

  2. 上传过程,数据大小和类型有严格限制。后文咱们会提到相应的例子。

另一种方式是让大模型获得本地管理员级别处理权限,帮助我们自动处理本地数据。之前我 给你介绍过的 Open Interpreter 就属于这种方式。看起来非常方便、灵活,但 AI 代理在本地以管理员权限进行各种操作,看到所有文件。如果它被植入不安全的代码,控制你的计算机,可能导致隐私和重要数据泄露,后果严重性不言而喻。


为解决上述两种极端数据交互方式带来的问题,Claude 提供了 MCP 作为一种解决方案。作为协议,它是完全开放的。后续其他主流 AI 企业能否跟进,咱们说不准。但是咱们现在就可以用 Claude 来体验一下 MCP 带来的数据交互好处。


咱们得实践上手一番。官方的 参考资料有快速上手指南,我们先沿着这个指南操作一下。


放心,指南非常简洁,步骤清晰。跟着做并不难。


设定

官方教程给出了一个最简单的数据操作样例,是一个 SQLite 数据库。

SQLite 设置非常简单,单文件即可运行。我讲数据库课程超过 10 年,一直用的就是 SQLite。学生不用一上来就去学习架设服务器、权限管理,而是直接拿过来就可以学习 SQL 查询语句。对文科生来说,这都是一个非常简单的界面。

在上手教程里,我们会操作一个本地 SQLite 文件,与 Claude 进行交互。我们需要预先安装一些软件,不过很简单,你照着指南里面这个命令拷贝到终端执行就行。


下面是在我电脑上执行过程截图。

当然别忘了,你需要 下载 Claude Desktop 应用的最新版本,这是咱们执行后续操作的前提。

之后,你需要建立一个 SQLite 的数据库样例文件。咱们先按照官方的设定来操作。你复制页面上的这段代码,直接在终端执行,就能搞定。

只要没有报错,你就拥有一个本地的 SQLite 样例数据了。



它存储在你的用户目录下,叫做 test.db .


下面你需要做的,是本次教程里最为不方便的操作 —— 修改 Claude 配置文件。

我相信在未来的版本当中,这个操作是能够通过图形化的界面来拖拽完成的。不过现在还是原型系统,你暂且忍耐一下。

教程里明确告诉你设定文件的路径,你照着这个来执行就好。



你可以用 Visual Studio Code 或者类似的编辑器打开指定的配置文件路径。我这里用的是 Cursor 。打开该文件后,你需要把教程代码段里的内容填进去。

不过这里有一个注意事项——你需要把原先代码中的 username换成你自己在macOS上实际的用户名 。这个很重要,不然连不上数据,会耽误你很多宝贵时间查错……别问我怎么知道的。

之后注意,你需要在macOS上 重启 你的Claude Desktop的app。

到此,设定就算完成了。

上手

下面,咱们实际看看 Claude 是如何与 test.db 这个数据文件交互。官网给出的流程图是这样的:



如图所示,Claude 先要和我们刚刚搭建的 SQLite MCP 服务之间建立连接,然后可以执行查询的操作。

首先,我们先用提示词来把这二者连接起来。这里的提问我是直接从人家官方的快速开始教程里面照抄的 ——「你能不能连接我的 SQLite 这个数据库,然后告诉我哪些商品现在可售,以及他们的售价?」

Can you connect to my SQLite database and tell me what products are available, and their prices?


Claude 立即就会明白需要和 SQLite MCP 沟通。

然后它就找我们要权限。我选择这一整次对话都可以给它开放权限(Allow for This Chat)。注意,这就是我刚刚跟你提到的安全性 —— 大模型要做什么操作,找我们要什么样的权限,权限开放的时间范围多大…… 我们都可以自己来控制。

大模型开始与 MCP 通讯,执行一系列的 SQL 语句,通过查询返回结果。

注意,Claude 不像 SQLite 简单给你返回一个表格作为结果,而是用自然语言回答你的问题。这个样例中,它把现在可售商品都给你列出来,并且后面都标上价格。这种交互就显得非常自然。

下面我们来继续提出另一个样例问题 ——「在你的数据库中,商品平均价格是多少?」

What's the average price of all products in the database?

这次大模型没有找我们再要权限。因为刚刚已经说明,整轮对话,它都可以获得 MCP 服务数据的操作权限。

执行后,Claude 告诉我们,平均值为 82.14 美元。

你会发现我们刚刚一直用英文来提问,这是因为教程是英文的,咱们为了方便拷贝了问题。但对 Claude 来说,中文完全不是问题。

下面咱们用中文来问:「你能分析价格分布并提出任何定价的优化建议吗?」

你用中文来问,Claude 就会用中文来答。当然,背后还是连接 MCP 服务,调用 SQL 进行查询。

当查询遇到问题时,Claude 会自动反思,并且重组查询式,依照 MCP 服务返回的 SQLite 查询表格结果,告诉你不同的价格分布。

基于这些分析结果,它会给出优化建议,如价格策略、产品组合、促销策略和定价心理学应用等。


注意这是你单独用 SQLite 查询数据库无法直接给出的结果,SQLite 只能给出表格。而根据背景知识对查询结果表格进行解读,才是 大模型的能力体现

测试

既然跑通了官网给出的样例,我们接下来换上我讲数据库课程时常用的样例数据集,叫做 colleges。


这个数据集来自斯坦福大学的一门 MOOC,包含学生申请大学的模拟数据。

数据集包括三个表格:apply(谁申请了哪个学校的哪个专业,是否被录取)、colleges(所有大学的列表)和 students(所有学生的信息)。

平时上课时,我在这几个表之间来回操作,教学生如何跨越表格综合信息返回正确的结果。

这次,咱们不用任何的 SQL 命令撰写,而是直接用自然语言来提问。

首先,你要确保 MCP 连接成功。注意你需要修改配置文件里,数据库文件的路径,指向 colleges.db

对了,之后别忘了重启 Claude Desktop。

我的问题为:「你能否连接我的 SQLite 数据库,并告诉我里面有什么?」

Can you connect to my SQLite database and tell me what's in it?

还是索要了一系列权限后,Claude 告诉我们有三个表:college、student、apply。

之后,通过进一步查询,Claude 为我们介绍 college 表中有哪些字段,student 和 apply 表又分别有哪些字段。至此意味着 MCP 数据连接成功。

Claude 会给出一些建议,告诉你可以问哪些问题。

不过我还是用自己的问题好了:「哪些同学报考了 Stanford 并且被录取?」

Claude 通过 MCP 执行查询,告诉我 Amy、Fay、Jay、Helen 这几个学生被斯坦福大学录取,并且说明了他们的 GPA 和专业信息。

Claude 特别指出,「 有意思的是 」被录取的学生中,两名被计算机科学专业录取,两名被历史专业录取,大多数学生 GPA 都很高,3.7 以上,但也有一位学生 GPA 较低,仍被历史专业录取。

嗯,2.9 的 GPA 也能被斯坦福录取,这确实「很有意思」。

接下来咱们问它第二个问题:「哪些学生没有被任何学校录取,是因为分数太低吗?」

Claude 返回了两个学生的信息,并且说明 Bob 申请了 Berkeley 的生物专业,而 Craig 申请了 MIT 的计算机科学专业。

它总结说,这些没被录取的学生 GPA 其实不低,这表明 GPA 其实不是唯一的录取标准。然后 Claude 甚至还专门给出了报考大学的方法建议。

如果单单使用 SQL 查询,你不可能获得这些建议,这也是利用大模型做数据分析的有趣之处。Claude 通过 MCP 把当前的 SQL 查询结果与申请美国大学的背景知识有机地联系起来,厉害不?

但实际上, 它的回答是错的

我教了十多年数据库课,对这个数据集非常熟悉。这里有一个陷阱 —— 这个数据库里,有的学生没有申请任何一所大学。你不申请大学,当然不可能被任何一所大学录取,对吧?因此,在回答这个问题的时候,你的查询不能只看那些全部申请都被拒的学生。

所以我进一步提示它:

注意被所有申请的学校拒绝和没有被任何一所学校录取是不一样的。

我只提示到这,并没有说「有的学生没有申请学校」。但 Claude 很聪明,马上反应过来。它依然先找出所有提交过申请但没被录取的学生状况。

后来它说,「让我们看看数据库中还有哪些学生是完全没有提交任何申请的」。注意这个查询,是它自己总结出来的。

综合分析后,它的答案是:刚才答案中那两个没有问题,是申请后却被所有申请的学校拒绝的学生;但还有若干完全没有提交申请的学生,分别是 Doris、Amy、Gary 和 Edward。

它还补充道,「这确实是两种完全不同的情况。谢谢您的纠正」。

很懂礼貌嘛,孺子可教。

限制

Claude MCP 给我们带来的,绝不只是查询更简单、结果更全面、数据更安全这样的优势。至少,它 打破了 Claude 处理数据长度和类型的限制

在 Claude 对话里,你想上传文件,就会看到限制 —— 最多五个文件,每个文件不得超过 30 兆。


我找了一个上课时用到的数据库叫 movie.db。这个数据库包含了若干年的电影信息,虽然只有 246.7 兆,但这样的文件想在现在的 Claude 对话当中使用,那断然是不可能的。


你上传不上去,不仅仅是因为它体积太大,更是由于这种 .db 格式 Claude 就不允许上传,你连选择它都没有机会。








请到「今天看啥」查看全文