链载Ai

标题: MCP:跨越AI模型与现实的桥梁 [打印本页]

作者: 链载Ai    时间: 5 小时前
标题: MCP:跨越AI模型与现实的桥梁


一、引言

AI 技术近年来取得了显著进展,从最初的文本生成和简单问答工具,逐步演变为能够与现实世界互动的执行者。这种转变得益于大模型的增强能力,特别是 Anthropic 的 Claude 3.7 模型,它在逻辑推理和代码生成方面表现卓越。
早期用户对 Claude 3.7 Sonnet 的反馈:

Claude 3.7 Sonnet是 AI 技术的重要里程碑,它们通过深度推理、自主工作和有效协作的能力,不仅辅助人类完成任务,还扩展了人类的可能性,预示了一个 AI 与人类深度合作的未来。

参考:

二、Claude 3.7:技术突破与能力提升

官方研究报告地址:https://assets.anthropic.com/m/785e231869ea8b3b/original/claude-3-7-sonnet-system-card.pdf
2025 年 2 月 25 日,Anthropic 宣布推出 Claude 3.7 Sonnet,这是其迄今最智能的 AI 模型,同时推出了 Claude Code,一款用于代理编码的命令行工具。这一发布标志着 AI 技术在混合推理和实际任务执行方面的重大进步,特别是在编码和网络开发领域。
报告详细探讨系统卡的核心内容,包括模型能力、安全措施和责任扩展政策(RSP)评估。


模型概述

根据 Claude 3.7 Sonnet 系统卡,Claude 3.7 Sonnet 是 Claude 3 系列的混合推理模型,首次引入“扩展思考”模式。它是 Anthropic 迄今最智能的模型,特别擅长编码任务,并具有 200K 的上下文窗口。以下是关键技术亮点:


各种安全评估

根据《Claude 3.7 Sonnet System Card》(Anthropic, 2025),Claude 3.7 模型通过全面的安全性评估,确保其在复杂任务中的无害性和可靠性。报告中详细探讨了儿童安全、偏见、恶意使用和提示注入等风险,并在责任扩展政策(RSP)框架下评估了 CBRN、自主性及网络安全领域的潜在威胁。例如,模型在 SWE-bench Verified 测试中得分 70.3%,在减少不必要拒绝方面提升了 45%,同时通过扩展思考模式的优化,保持了推理的忠实性和透明度(Anthropic, 2025, p. 12-41)。这种对安全的重点关注,体现了 Anthropic 致力于负责任 AI 发展的承诺。

安全与无害性评估
系统卡详细描述了 Claude 3.7 Sonnet 的安全测试,涵盖多个方面:

责任扩展政策(RSP)评估
系统卡还包括 RSP 评估,涵盖 CBRN、自主性和网络安全领域:



网络安全与未来风险
系统卡还评估了网络操作和潜在未来风险:

为什么这么多的安全评估?

问题:为什么Claude要这么大费周章地做安全性的评估?这说明AI真的已经开始在威胁到人类了?里面关于安全的篇幅为什么这么多?
Grok3:Claude之所以大费周章地进行安全性评估,不是因为AI已经威胁人类,而是为了预防潜在风险、满足监管和用户需求、应对技术复杂性,并体现伦理责任。安全篇幅多是因为评估的系统性、透明性和全面性,覆盖了从基础功能到高风险应用的各个方面。这种做法表明Anthropic致力于负责任的AI开发,确保Claude 3.7 Sonnet在广泛应用中安全可靠,而非AI威胁的证据。
Claude 3.7:安全评估之所以成为Claude等AI系统开发过程中的重要环节,并非因为AI已经对人类构成实际威胁,而是出于负责任的技术发展考虑。
重视安全评估主要有以下几个原因:
1.预防性原则 - 在技术发展初期就建立安全框架,比等问题出现后再解决更为明智。
2.社会责任 - 开发强大工具的企业有责任确保其产品不会造成意外伤害。
3.复杂性管理 - AI系统越来越复杂,可能出现开发者无法预见的行为。
4.建立信任 - 透明的安全评估有助于建立公众和监管机构对AI技术的信任。
5.防范错误使用 - 即使AI本身无害,也可能被错误使用或滥用。
大量关于安全的内容反映了行业对这一问题的重视,以及努力确保AI发展朝着有益于人类的方向前进的决心,而非暗示AI已经成为威胁。这更像是一种技术成熟度的体现,就像其他任何重要技术(如医药、航空、核能)都需要严格的安全标准一样。
O3 Mini:从某种角度看,Claude(以及其他类似的先进 AI 系统)在安全性评估上花费大量篇幅,其实是一种负责任研发和部署技术的表现,而不必然意味着 AI 已经在“威胁到人类”。下面几点可以解释这种现象:
1.预防和控制风险
高级 AI 系统拥有强大的生成能力和决策潜力,这也意味着在特定场景下可能会产生不可预见的行为或被错误地利用。通过系统化的安全评估,开发者可以提前识别和缓解潜在风险,确保系统在各种情况下都能遵循设定的伦理和安全标准。
2.负责任的技术开发
如今的 AI 研究环境越来越重视“对齐”问题,即如何使 AI 的目标和行为与人类的价值观保持一致。Claude 在开发过程中增加安全性评估和相关措施,正是在体现这份对技术社会影响的谨慎态度。很多机构都在提前进行大量测试和理论验证,以防止可能出现的问题。
3.避免滥用和误解
安全性评估不仅仅是为了防止 AI 自身出现问题,也包括防范外部恶意使用情况。通过设定详细的安全策略和限制,开发者希望能减少 AI 被错误利用或造成人为损害的可能性。
4.前瞻性安全设计
高度复杂的系统通常需要层层防护,就像现代工业中的其他高风险领域(比如航空、核能等),AI 技术的发展也需要稳妥而缜密的安全设计。篇幅较多的安全部分说明相关团队在项目前期就投入大量精力,确保系统在实际运行中具备足够的稳定性和安全保障。
因此,Claude 要进行如此详尽的安全性评估,并不是说明 AI 已经构成了直接威胁,而是开发者认识到随着技术不断进步,潜在风险也在增加,从而主动采取措施以确保技术“向善”发展。这样的做法反而体现了整个行业对安全和伦理问题高度重视的态度。


案例

天气动画卡片

创建一个包含 CSS 和 JavaScript 的单一 HTML 文件,以生成一个动画天气卡。该卡片应通过不同的动画直观地展示以下天气条件: 风:(例如,移动的云、摇摆的树木或风线) 雨:(例如,落下的雨滴、形成的水坑) 晴:(例如,闪耀的光线、明亮的背景) 雪:(例如,落下的雪花、积雪) 所有天气卡应并排显示。卡片应具有深色背景。在这个单一文件中提供所有的 HTML、CSS 和 JavaScript 代码。JavaScript 应包含一种切换不同天气条件的方法(例如,一个函数或一组按钮),以展示每种天气的动画效果。


生成SVG图

详细阅读我下面的文章内容,帮我基于文章的内容重点,绘制一张SVG图,用图说话,方便我快速获取信息;
====
MCP相关的内容...


设计风格对比(内容对比)

请为我创建一个 HTML 页面,展示多种主流设计风格的视觉示例和效果,以便我能直观了解每种风格的样貌。请包含现代主义、极简主义、工业风格等,确保页面简洁易懂。


教学动画

这个是让模型帮我写的一个提示词,看其它地方讲可以用来做动画试一下效果。
生成一个动画,讲解如何计算由参数曲线和x轴围成的面积。参数曲线由函数 ( x(t) ) 和 ( y(t) ) 定义,( t ) 从 0 到 1。动画需逐步展开,视觉清晰,帮助学生理解计算过程。
视觉元素:
\text{Area} = \int_{0}^{1} y(t) \cdot x'(t) \, dt
动画序列: 动画需按以下步骤逐步呈现,确保观众能跟随理解:

1.从黑色背景开始,绘制并标注坐标系(x轴和y轴)。

2.逐一绘制并标注点 A、B、C、D,使用各自的颜色。

3.用浅蓝色线条连接四点,绘制矩形正方形。

4.缓慢绘制黄色半圆形曲线,强调其为参数曲线。

5.用青色填充曲线下的区域,突出显示待计算的面积。

6.在阴影区域内显示公式

\text{Area} = \int_{0}^{1} y(t) \cdot x'(t) \, dt
风格与设计:
额外要求:



小结

三、MCP:模型与现实世界的连接


什么是 MCP?

MCP,全称是“模型上下文协议”(Model Context Protocol),是Anthropic开源的一个标准协议。打个比方,它就像是AI世界的“USB-C”接口。你知道USB-C吧?一根线就能连接手机、电脑、充电器,超级方便。MCP的作用也差不多,它让AI模型(比如Anthropic的Claude)可以轻松地跟外部的数据源和工具连接起来,比如数据库、文件系统、API等等。
以前,如果想让AI访问你的数据库或者调用某个工具,得专门写一堆代码,特别麻烦。现在有了MCP,就像是插上USB-C线那么简单,AI模型通过这个标准协议就能直接获取数据或执行操作,不用每次都重新开发连接方式。这样,开发AI应用就变得更快、更省事了。


MCP怎么工作?

MCP用的是客户端-服务器的模式,简单来说:
它们之间用一种标准的消息格式(基于JSON-RPC)交流,AI模型可以通过这些消息:

1.获取数据:比如从数据库里查东西、从文件里读内容。

2.执行操作:比如调用API发个消息、管理代码仓库。

3.理解指令:通过一些提示模板,AI知道怎么用这些数据和工具。


MCP有什么好处?

MCP之所以厉害,主要有这几点:

1.标准化:就像USB-C成了通用接口,MCP让AI跟外部世界的连接有了统一标准,省去了重复开发的麻烦。

2.安全性:服务器管着访问权限,不用担心数据被乱用。

3.灵活性:不管是数据库、文件还是API,MCP都能支持,而且还能根据需要扩展。

4.跨平台:不管你用什么系统、什么编程语言(目前有Python和TypeScript的支持),都能用。

MCP能干啥?

举几个例子你就明白了:
Anthropic已经开源了MCP,还提供了几个现成的示例服务器,比如连接Google Drive、Slack、GitHub等。社区也在开发更多服务器,未来能干的事会越来越多。
简单来说,MCP就是AI的“万能接口”。有了它,AI模型就能像插上USB-C线一样,轻松连接到各种外部数据源和工具,变得更聪明、更实用。不管是开发者还是普通用户,都能通过MCP让AI干更多事,而且过程简单又安全。未来随着MCP的普及,我们可能会看到更多酷炫的AI应用冒出来!


如何开发MCP Server?

MCP(模型上下文协议)服务器提供三种主要能力:资源、工具和提示词:


安装与设置

安装MCP Python SDK,可以选择以下两种方式安装MCP Python SDK:
curl-LsSfhttps://astral.sh/uv/install.sh|shuvadd"mcp[cli]"

创建简单服务器

创建一个名为server.py的文件,内容如下:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Simple Server")
@mcp.tool()def add(a: int, b: int) -> int: """Add两个数字""" return a + b
@mcp.resource("greeting://{name}")def get_greeting(name: str) -> str: """获取个性化问候""" return f"Hello, {name}!"
运行服务器,使用以下命令在开发模式下运行服务器:
mcpdevserver.py

一个复杂一点的TODO MCP服务;
importsqlite3fromfastapiimportHTTPExceptionfrommcp.server.fastmcpimportFastMCPimportatexitdb_conn=Nonedefinit_db():globaldb_conndb_conn=sqlite3.connect("todo.db")cursor=db_conn.cursor()cursor.execute("CREATETABLEIFNOTEXISTStasks(idINTEGERPRIMARYKEY,descriptionTEXTNOTNULL,completedINTEGERDEFAULT0);")db_conn.commit()init_db()defclose_db():ifdb_conn:db_conn.close()atexit.register(close_db)mcp=FastMCP("To-DoListServer")@mcp.tool()defadd_task(description:str)->int:ifnotdescription.strip():raiseValueError("Taskdescriptioncannotbeempty")cursor=db_conn.cursor()cursor.execute("INSERTINTOtasks(description)VALUES(?);",(description,))task_id=cursor.lastrowiddb_conn.commit()returntask_id@mcp.tool()defmark_task_completed(task_id:int)->bool:cursor=db_conn.cursor()cursor.execute("UPDATEtasksSETcompleted=1WHEREid=?;",(task_id,))rows_affected=cursor.rowcountdb_conn.commit()returnrows_affected>0@mcp.tool()defdelete_task(task_id:int)->bool:cursor=db_conn.cursor()cursor.execute("DELETEFROMtasksWHEREid=?;",(task_id,))rows_affected=cursor.rowcountdb_conn.commit()returnrows_affected>0@mcp.tool()defupdate_task_description(task_id:int,new_description:str)->bool:ifnotnew_description.strip():raiseValueError("Taskdescriptioncannotbeempty")cursor=db_conn.cursor()cursor.execute("UPDATEtasksSETdescription=?WHEREid=?;",(new_description,task_id))rows_affected=cursor.rowcountdb_conn.commit()returnrows_affected>0@mcp.resource("tasks://all")defget_all_tasks()->list[dict]:cursor=db_conn.cursor()cursor.execute("SELECTid,description,completedFROMtasks;")tasks=[]forrowincursor.fetchall():tasks.append({"id":row[0],"description":row[1],"completed":bool(row[2])})returntasks@mcp.resource("task_status://{task_id}")defget_task_status(task_id:int)->dict:cursor=db_conn.cursor()cursor.execute("SELECTdescription,completedFROMtasksWHEREid=?;",(task_id,))row=cursor.fetchone()ifrowisNone:raiseHTTPException(status_code=404,detail="Tasknotfound")return{"description":row[0],"completed":bool(row[1])}@mcp.resource("task_counts://{dummy}")defget_task_counts(dummy:str="all")->dict:cursor=db_conn.cursor()cursor.execute("SELECTCOUNT(*)FROMtasksWHEREcompleted=0;")incomplete_count=cursor.fetchone()[0]cursor.execute("SELECTCOUNT(*)FROMtasksWHEREcompleted=1;")completed_count=cursor.fetchone()[0]return{"incomplete":incomplete_count,"completed":completed_count}@mcp.prompt()deftodo_list_prompt()->str:return"""Youhaveaccesstoato-dolistserver.Youcanusethefollowingtoolsandresources:-Tool:add_task(description)->int-AddsanewtaskwiththegivendescriptionandreturnsthetaskID.-Tool:mark_task_completed(task_id)->bool-MarksthetaskwiththegivenIDascompletedandreturnsTrueifsuccessful,Falseotherwise.-Tool:delete_task(task_id)->bool-DeletesthetaskwiththegivenIDandreturnsTrueifsuccessful,Falseotherwise.-Tool:update_task_description(task_id,new_description)->bool-UpdatesthedescriptionofthetaskwiththegivenIDandreturnsTrueifsuccessful,Falseotherwise.-Resource:tasks://all-Returnsalistofalltasks,eachwiththeirID,description,andcompletionstatus.-Resource:task_status://{task_id}-ReturnsthestatusofthetaskwiththegivenID,includingitsdescriptionandcompletionstatus.-Resource:task_counts://{dummy}-Returnsadictionarywiththecountofincompleteandcompletedtasks.Youcanusethesetomanageyourto-dolist."""

调试服务器





部署MCP服务

sudomcpinstallserver.py
部署成功之后,可以看到Claude Desktop多了一个MCP的服务;
如果出现问题,可以在控制台中看到一些错误日志,然后进行修复。


问题与修复

1、错误与修复:uv命令找不到;
2025-03-01T13:15:43.231Z[To-DoListServer][info]Initializingserver...2025-03-01T13:15:43.246Z[To-DoListServer][error]spawnuvENOENT{"context":"connection","stack":"Error:spawnuvENOENT\natChildProcess._handle.onexit(node:internal/child_process:285:19)\natonErrorNT(node:internal/child_process:483:16)\natprocess.processTicksAndRejections(node:internal/process/task_queues:82:21)"}2025-03-01T13:15:43.246Z[To-DoListServer][error]spawnuvENOENT{"stack":"Error:spawnuvENOENT\natChildProcess._handle.onexit(node:internal/child_process:285:19)\natonErrorNT(node:internal/child_process:483:16)\natprocess.processTicksAndRejections(node:internal/process/task_queues:82:21)"}2025-03-01T13:15:43.248Z[To-DoListServer][info]Servertransportclosed2025-03-01T13:15:43.248Z[To-DoListServer][info]Clienttransportclosed
安装全局的uv
brewinstalluv
2、依赖包没有找到

方法 1:安装时指定依赖包
mcpinstallserver2.py--withfastapi
mcpinstallserver2.py--withfastapi,uvicorn
方法 2:在代码中声明依赖包
python
from fastmcp import FastMCP
mcp = FastMCP("To-Do List Server", dependencies=["fastapi", "uvicorn"])
3、说无法打开数据库目录

修改代码中可以打开的数据库目录;
db_conn = sqlite3.connect("/Users/aihe/Desktop/Claude_MCP_3D_Demo/todo.db")


如何集成MCP Server?

在这里可以看到支持MCP Server的客户端列表:
https://modelcontextprotocol.io/clients

Claude Desktop

sudomcpinstallserver.py
然后就可以看到这个服务安装到了Claude Desktop的配置文件中;

然后可以使用我们配置的MCP服务


Cursor&Windsurf

配置在cursor和Windsurf也是可以的;


集成外部Mcp Server

比如我看到了一个playweight的mcp 服务;

然后在本地做一下配置:
{"mcpServers":{"playwright":{"command":"npx","args":["-y","@executeautomation/playwright-mcp-server"]}}}

然后本地可以使用这个对应的服务和工具;


客户端SDK集成

参考:https://github.com/modelcontextprotocol/python-sdk
#!/usr/bin/env python3"""简单的 MCP 客户端示例连接到 server2.py 并演示 MCP 的基本功能"""import asyncioimport osimport jsonfrom mcp import ClientSession, StdioServerParametersfrom mcp.client.stdio import stdio_clientfrom typing import Optional, List, Dict, Any
# 创建连接到 server2.py 的参数server_params = StdioServerParameters(command="python", args=[os.path.join(os.path.dirname(os.path.abspath(__file__)), "server2.py")],env=None# 使用当前环境变量)
async def run():"""演示 MCP 客户端功能的主函数"""print("正在连接到 MCP 服务器...")async with stdio_client(server_params) as (read, write):async with ClientSession(read, write) as session:# 1. 初始化连接await session.initialize()print("✓ 已成功初始化连接")# 2. 获取可用的提示词try:prompts = await session.list_prompts()print(f"可用的提示词: {prompts}")if prompts and prompts.prompts:# 3. 获取提示词内容try:prompt = await session.get_prompt(prompts.prompts[0].name)print(f"\n服务器提示词:\n{prompt}\n")except Exception as e:print(f"获取提示词内容时出错: {e}")except Exception as e:print(f"获取提示词列表时出错: {e}")# 4. 列出可用资源try:resources = await session.list_resources()print(f"可用的资源: {resources}")except Exception as e:print(f"获取资源列表时出错: {e}")resources = []# 5. 列出可用工具try:tools = await session.list_tools()print(f"可用的工具: {tools}")except Exception as e:print(f"获取工具列表时出错: {e}")tools = []
if __name__ == "__main__":try:asyncio.run(run())except KeyboardInterrupt:print("\n程序已被用户中断")except Exception as e:print(f"\n发生错误: {e}")finally:print("演示完成")


四、MCP 的未来畅想

想象一下未来的场景:
你只需轻声对 AI 说几句话,生活中的大小事务便能轻松搞定。比如:
MCP 就像一个“AI 界的超级连接器”,把技术门槛拉低,让每个人都能玩转智能生活。
过去,使用软件需要复杂的下载、安装和配置,普通用户常常感到困难。
如今,MCP让这一切变得简单,只需几行配置就能完成。
这些场景的实现,只需与 AI 简单对话,MCP 就会像一个无形的桥梁,连接起各种服务,让繁琐的操作彻底消失。
AI 将成为你的“生活管家”,从日常购物到健康管理、旅行安排、美食享受,再到学习与工作,样样都能轻松应对。

五、总结

Claude 3.7 Sonnet 和 MCP,标志着 AI 从单纯的对话工具迈向了现实世界的执行者。
它不仅在编码、推理和任务执行上表现出色,还通过 MCP 这个“AI 万能接口”,让开发者快速构建应用,让普通人轻松调用服务,甚至让传统服务商无缝融入 AI 生态。
技术门槛的降低和功能的增强,正在为我们打开一个 AI 无处不在的未来...
MCP 可能不是完美的协议,但在大模型时代,它就像 AI 的“万能插头”,让模型能连上现实世界。未来,这种连接方式肯定会越来越聪明,让更多普通人轻松感受到 AI 的强大和便利。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5