杠精派
派聪明
0/512

热门评论

xcx0103 2026年06月09日 23:06
引用原文:MCP 的 resources 是什么,和 tools 有什么区别
@派聪明 详细讲一下
点赞
回复1 取消回复
派聪明 2026年06月09日 23:06
MCP中的 Resources 和 Tools 是两个核心概念,简单来说:**Tools 是“用来干活的”,而 Resources 是“用来读取数据的”**。 你可以把它们类比为开发中的接口:Tools 相当于 `POST`端点,它接收输入参数,并且**会改变系统状态**(例如执行点击按钮、修改文件等操作);Resources 相当于 `GET`端点,它通过 URI 进行访问,只返回内容,**只读不写**。 虽然概念明确,但在实际应用中有一个关键痛点:**当前的 LLM(大语言模型)并不能直接调用 `resources/read`**。因为现有的 Function Calling协议里只有“工具”的概念,并没有“资源”。 为了解决这个限制,PaiCLI采用了两种巧妙的处理方式来实现数据访问: 1. **将 Resources 包装成 Tools**: 系统会为每个支持 Resources 的 MCP Server 自动注册两个虚拟工具——`list_resources` 和 `read_resource`。这样一来,LLM 就可以像调用普通工具一样去调用它们。LLM 先查有哪些资源,再按 URI读取具体内容。这种方式非常适合 LLM 需要**主动探索数据**的场景。 2. **支持用户通过 `@`符号直接指定**: 用户可以在输入框里直接写 `@server:protocol://path`。PaiCLI 在把请求提交给 Agent之前,会自动把该资源的内容展开并塞进提示词里,整个过程完全不需要 LLM去决策。这种方式适用于**用户已经明确知道要读取什么资源**的场景。
点赞
回复 取消回复

4 条评论

xcx0103 2026年06月09日 23:15
引用原文::tools/list_changed 工具列表变了、resources/list_changed 资源列表变了、resources/updated 某个资源的内容更新了。
@派聪明 这几个有什么区别吗
点赞
回复1 取消回复
派聪明 2026年06月09日 23:15
这三者虽然都属于 MCP 的通知机制,但职责和触发的场景完全不同,具体区别如下: **1. `tools/list_changed`(工具列表变了)** * **含义**:MCP Server提供的**工具能力**发生了变化。 * **场景**:原本 Server 只能“查数据”,现在新增了“发邮件”或“删文件”的技能。Host(宿主程序)收到这个通知后,会重新拉取工具清单,让 LLM知道自己多了一个可以用的新工具。 **2. `resources/list_changed`(资源列表变了)** * **含义**:MCP Server提供的**数据源列表**发生了变化。 * **场景**:相当于目录或“菜单”更新了。比如原本只能读取 A 文件夹的数据,现在增加了对 B 文件夹的访问权限,或者某个数据库接口下线了。Host 收到通知后会更新资源目录,但此时并不代表具体文件的内容改了。 **3. `resources/updated`(资源内容更新了)** * **含义**:某个**具体资源内部的数据**发生了更新。 * **场景**:列表没变,但里面的东西变了。比如 Server提供了一个读取“系统日志”的资源,当系统日志里新写入了一条报错信息时,Server 就会推送这个通知。Host 收到后会清掉该资源的旧缓存,以便 LLM 下次读取时能拿到最新的文本内容。 **简单总结**: `tools/list_changed`管的是**“能执行什么动作”**的更新;`resources/list_changed`管的是**“有哪些数据可读”**的目录更新;`resources/updated`管的是**“具体读到的内容”**的变动。
点赞
回复 取消回复
xcx0103 2026年06月09日 23:06
引用原文:MCP 的 resources 是什么,和 tools 有什么区别
@派聪明 详细讲一下
点赞
回复1 取消回复
派聪明 2026年06月09日 23:06
MCP中的 Resources 和 Tools 是两个核心概念,简单来说:**Tools 是“用来干活的”,而 Resources 是“用来读取数据的”**。 你可以把它们类比为开发中的接口:Tools 相当于 `POST`端点,它接收输入参数,并且**会改变系统状态**(例如执行点击按钮、修改文件等操作);Resources 相当于 `GET`端点,它通过 URI 进行访问,只返回内容,**只读不写**。 虽然概念明确,但在实际应用中有一个关键痛点:**当前的 LLM(大语言模型)并不能直接调用 `resources/read`**。因为现有的 Function Calling协议里只有“工具”的概念,并没有“资源”。 为了解决这个限制,PaiCLI采用了两种巧妙的处理方式来实现数据访问: 1. **将 Resources 包装成 Tools**: 系统会为每个支持 Resources 的 MCP Server 自动注册两个虚拟工具——`list_resources` 和 `read_resource`。这样一来,LLM 就可以像调用普通工具一样去调用它们。LLM 先查有哪些资源,再按 URI读取具体内容。这种方式非常适合 LLM 需要**主动探索数据**的场景。 2. **支持用户通过 `@`符号直接指定**: 用户可以在输入框里直接写 `@server:protocol://path`。PaiCLI 在把请求提交给 Agent之前,会自动把该资源的内容展开并塞进提示词里,整个过程完全不需要 LLM去决策。这种方式适用于**用户已经明确知道要读取什么资源**的场景。
点赞
回复 取消回复

目录