第18期 - 参加AI技术分享会

封面图来源于周末去了Trae技术分享会,氛围很好,听了大佬们对现AI的一些见解,受益匪浅。

学习笔记-AI相关

MCP (Model Context Protocol)

MCP(模型上下文协议)是一种将 AI 应用程序连接到外部系统的开源标准,为 AI 模型连接各种数据源和工具提供了标准化的接口。使用 MCP,Claude 或 ChatGPT 等 AI 应用程序可以连接到数据源(例如本地文件、数据库)、工具(例如搜索引擎、计算器)和工作流,使它们能够访问关键信息并执行任务

MCP 客户端与 MCP 服务器一对一 Visual Studio Code 充当 MCP 主机,建立与 MCP 服务器的连接,运行时会实例化一个 MCP 客户端对象,用于维护与 Sentry MCP 服务器的连接。当 Visual Studio Code 随后连接到另一个 MCP 服务器(例如本地文件系统服务器)时,Visual Studio Code 运行时会实例化另一个 MCP 客户端对象来维护此连接,从而保持 MCP 客户端与 MCP 服务器之间的一对一关系。

“本地” MCP 服务器与远程 MCP 服务器 MCP 服务器提供上下文数据的程序,无论其运行在何处。当 Claude Desktop 启动文件系统服务器时,由于使用 STDIO 传输,该服务器在同一台机器上本地运行。这通常被称为“本地” MCP 服务器。官方 Sentry MCP 服务器运行在 Sentry 平台上,并使用 Streamable HTTP 传输。这通常被称为“远程” MCP 服务器。

MCP组成

数据层

定义基于 JSON-RPC 的客户端-服务器通信协议,包括生命周期管理,以及核心原语,如工具、资源、提示和通知。数据层实现了基于JSON-RPC 2.0 的交换协议,定义了消息结构和语义,MCP 使用JSON-RPC 2.0作为其底层 RPC 协议。客户端和服务器之间可以互相发送请求并进行响应。该层包括:

生命周期管理:处理客户端和服务器之间的连接初始化、功能协商和连接终止 服务器功能:使服务器能够提供核心功能,包括用于 AI 操作的工具、用于上下文数据的资源以及来自客户端和向客户端的交互模板提示 客户端功能:使服务器能够要求客户端从主机 LLM 进行采样,从用户那里获取输入,并将消息记录到客户端 实用功能:支持附加功能,例如实时更新通知和长期运行操作的进度跟踪

JSON-RPC 2.0

JSON-RPC 2.0 就是一套 “用 JSON 说话的远程调用标准”—— 它规定了 “客户端怎么问、服务器怎么答”,让不同系统之间的远程调用变得 “简单、统一、跨平台”。不管是本地进程间通信(比如 MCP 的 STDIO 管道),还是跨网络的服务调用(比如前端调后端),只要需要 “像调用本地函数一样调用远程方法

传输层

传输层管理客户端和服务器之间的通信通道和身份验证。它处理 MCP 参与者之间的连接建立、消息传输和安全通信。 MCP 支持两种传输机制: Stdio 传输:使用标准输入/输出流在同一台机器上的本地进程之间进行直接进程通信,提供最佳性能且无网络开销。 可流式传输的 HTTP 传输:使用 HTTP POST 协议发送客户端到服务器的消息,并可选地使用服务器发送事件来实现流式传输功能。此传输协议支持远程服务器通信,并支持标准 HTTP 身份验证方法,包括持有者令牌、API 密钥和自定义标头。MCP 建议使用 OAuth 获取身份验证令牌

MCP 原语

MCP(Model Context Protocol)原语是 MCP 协议中服务器向客户端暴露信息的基本方式。定义了客户端和服务器可以相互提供的功能,原语指定了可以与 AI 应用程序共享的上下文信息类型以及可以执行的操作范围

MCP 定义了服务器可以公开的三个核心原语: 工具 AI 应用程序可以调用以执行操作的可执行函数(例如文件操作、API 调用、数据库查询) 资源(Resources) 向 AI 应用程序提供上下文信息的数据源(例如文件内容、数据库记录、API 响应) 提示(Prompts) 可重复使用的模板,有助于构建与语言模型的交互(例如,系统提示、少量示例)

每种基元类型都有相关的方法,用于发现(/list)、检索(/get),以及在某些情况下执行(tools/call)。MCP 客户端将使用这些*/list方法来发现可用的基元。例如,客户端可以先列出所有可用的工具(tools/list),然后执行它们。这种设计允许列表动态化。

客户端可以公开的原语: 采样 允许服务器向客户端的 AI 应用程序请求语言模型补全。 当服务器的作者想要访问语言模型,但又希望保持模型独立性,并且不在其 MCP 服务器中包含语言模型 SDK 时,此功能非常有用。他们可以使用此sampling/complete方法向客户端的 AI 应用程序请求语言模型补全。

启发式(Elicitation) 允许服务器向用户请求更多信息。当服务器开发者想要从用户那里获取更多信息,或者请求用户确认某个操作时,此功能非常有用。他们可以使用此elicitation/request方法向用户请求更多信息。

日志记录 使服务器能够向客户端发送日志消息以进行调试和监控。

通知

MCP 协议支持实时通知,以实现服务器和客户端之间的动态更新。例如,当服务器的可用工具发生变化(例如新功能可用或现有工具被修改)时,服务器可以发送工具更新通知,告知连接的客户端这些变化。通知以 JSON-RPC 2.0 通知消息的形式发送(无需响应),使 MCP 服务器能够向连接的客户端提供实时更新

MCP 通知的主要功能 无需响应id:请注意,通知中没有任何字段。这遵循 JSON-RPC 2.0 通知语义,即无需响应,也不会发送响应。 基于能力:此通知仅由在初始化期间在其工具能力中声明的服务器发送”listChanged”: true(如步骤 1 所示)。 事件驱动:服务器根据内部状态变化决定何时发送通知,使 MCP 连接动态且响应迅速。

客户端对通知的响应 收到此通知后,客户通常会请求更新工具列表。 服务器的推送只负责 “告知‘有变动’”,至于 “变动的具体数据是什么、是否需要这些数据”,由客户端根据自己的需求决定 —— 如果需要,就主动发请求去拿;如果暂时用不上,也可以不请求。

MCP 服务器

MCP 服务器是通过标准化协议接口向 AI 应用程序公开特定功能的程序。

核心服务器功能

服务器通过三个构建块提供功能:

工具:你的 LLM 可以主动调用的函数,并根据用户请求决定何时使用它们。工具可以写入数据库、调用外部 API、修改文件或触发其他逻辑。(例如:搜索航班发送消息创建日历事件)-模型控制 资源:被动数据源提供对上下文信息的只读访问,例如文件内容、数据库模式或 API 文档。(例如:检索文档访问知识库、阅读日历)-应用控制 提示:预先构建的指令模板,告诉模型使用特定的工具和资源(例如:计划假期、总结我的会议、起草电子邮件)-用户控制

工具

工具是 LLM 可以调用的模式定义接口。MCP 使用 JSON Schema 进行验证。每个工具执行单个操作,并明确定义输入和输出。工具在执行前可能需要用户同意,这有助于确保用户对模型执行的操作拥有控制权。

协议操作: tools/list 发现可用的工具,返回带有模式的工具定义数组 tools/call 执行特定工具,返回工具执行结果

使用API示例: 航班搜索 searchFlights(origin: “NYC”, destination: “Barcelona”, date: “2024-06-15”) 日历阻止 createCalendarEvent(title: “Barcelona Trip”, startDate: “2024-06-15”, endDate: “2024-06-22”) 电子邮件通知 sendEmail(to: “team@work.com”, subject: “Out of Office”, body: ”…“)

用户交互模型,可实现: -在 UI 中显示可用的工具,使用户能够定义是否应在特定交互中提供工具 -单个工具执行的批准对话框 -预先批准某些安全操作的权限设置 -活动日志显示所有工具执行及其结果 -… …

资源

资源提供对信息的结构化访问,AI 应用程序可以检索这些信息并将其作为上下文提供给模型。

每个资源都有一个唯一的 URI(例如file:///path/to/document.md),并声明其 MIME 类型以便进行适当的内容处理。它们声明 MIME 类型以便进行适当的内容处理

支持两种模式查询数据: 直接资源- 指向特定数据的固定 URI。例如:calendar://events/2024返回 2024 年日历上的可用房源 资源模板- 带有参数的动态 URI,用于灵活查询。例如: travel://activities/{city}/{category}- 按城市和类别返回活动 travel://activities/barcelona/museums- 返回巴塞罗那所有博物馆 资源模板包括标题、描述和预期的 MIME 类型等元数据,使其可被发现和自我记录。

提示

提示提供了可重复使用的模板。它们允许 MCP 服务器作者为域名提供参数化的提示,或展示如何最佳地使用 MCP 服务器。 ​

提示如何工作

提示是定义预期输入和交互模式的结构化模板。由用户控制,需要显式调用而非自动触发。提示可以感知上下文,引用可用的资源和工具来创建全面的工作流程。与资源类似,提示支持参数补全,以帮助用户发现有效的参数值。

prompts/list 发现可用的提示 返回提示描述符数组 prompts/get 检索提示详细信息 返回带有参数的完整提示定义

服务器整合协同

当多台服务器协同工作并通过统一的界面结合它们的专门功能时,MCP 的真正威力就会显现出来 ​用户通过多台 MCP 服务器提示引导 AI 将资源与跨不同服务器的工具相结合,收集上下文并执行

MCP 客户端

MCP(Model Context Protocol)客户端是由宿主应用(如 Claude.ai、IDE)实例化的协议级组件,用于与特定 MCP 服务器通信,宿主应用负责管理整体用户体验并协调多个客户端,每个客户端仅处理与一个服务器的直接通信

MCP 客户端作为连接宿主应用与 MCP 服务器的关键组件,能为服务器提供三大核心功能支持

Sampling(AI 调用代理功能)

客户端可充当服务器与 LLM(大语言模型)的中间桥梁,让服务器无需直接集成。服务器只需向客户端发送 AI 任务请求(如分析数据、生成推荐),客户端会全权负责用户权限验证、AI 模型调用(可按服务器建议选择模型,也结合用户偏好调整),并将 AI 生成结果反馈给服务器。同时,客户端会通过 “用户审批” 机制保障安全,用户可查看 AI 请求内容、模型选择及生成结果,确认无误后再让服务器使用。

Roots (文件范围界定功能)

指 客户端能为服务器明确文件系统的操作边界,通过提供 “file://” 格式的根目录 URI,告知服务器可访问的目录范围,帮助服务器聚焦目标文件、理解工作空间结构。当用户切换工作项目,客户端还会动态更新根目录列表并通知服务器,确保服务器操作范围与当前任务匹配。

Elicitation(信息引导收集功能)

客户端可协助服务器在交互中 “按需” 向用户收集关键信息,解决服务器 “信息前置要求过高” 或 “缺数据中断流程” 的问题。服务器发起信息请求后,客户端会以结构化 UI(如复选框、下拉菜单)呈现请求,明确告知用户 “哪个服务器请求、为何需要该信息”,并验证用户输入是否符合格式要求。用户提供信息后,客户端将合规数据反馈给服务器,让服务器继续推进流程。

MCP 开发

连接本地 MCP 服务器

MCP(Model Context Protocol)本地服务器连接,是指将 MCP 客户端(如 Claude Desktop、自定义宿主应用)与部署在本地网络环境(而非公网)的 MCP 服务器建立通信,实现 “客户端 - 本地服务器” 的闭环交互,适用于需保障数据隐私(如敏感文件处理)、低延迟操作(如实时文件分析)或离线使用的场景。 服务器需符合 MCP 协议规范(参考MCP 官方协议文档),支持 Elicitation(信息引导)、Roots(根目录界定)、Sampling(AI 调用代理)三大核心能力;

连接远程 MCP 服务器

通过连接远程 MCP 服务器,您可以将 AI 助手从实用工具转变为能够处理复杂、多步骤项目的智能助手,并实时访问外部资源。

自定义连接器 自定义连接器是 Claude 与远程 MCP 服务器之间的桥梁。