当我们朝着构建能够推理、计划和自主行动的智能系统前进时,模型上下文协议 (MCP) 在构建 AI 模型如何与外部工具和数据交互方面扮演着关键角色。在采用 MCP 时,一个容易混淆的常见问题是——什么时候使用资源,什么时候使用工具。
如果希望零基础快速入门基于MCP的AI 应用开发,感谢大家阅读一个本人写的入门读物
在这里,老码农尝试对这些概念进行区分,提供一些实际的示例,并总结要点,以便有效地应用它们。
假设我们正在开发一个自动化业务工作流的数字助手。例如,当一个新客户签订合同时,助手应该:
我们希望 AI 以最少的人工干预来处理这个端到端的过程。
MCP 中的工具是模型可以调用的操作ーー执行任务的操作。
例如:
@mcp.tool()
def send_email(to: str, subject: str, body: str) -> str:
“””发送电子邮件到一个给定的地址s”””
...
MCP工具的主要特点:
・模型控制: 人工智能模型决定何时调用它们。
・自动列出: 它们出现在 /tools 端点中。
・自主调用: 模型可以确定使用哪种工具,并在必要时请求缺少的参数。
在我们的业务工作流示例中,像add_client_to_crm
、send_email
和 notify_sales_team
这样的操作应该作为工具实现,因为它们需要执行操作,而且模型必须自主决定调用它们。
一般地,资源是由后端公开的只读数据。可以把它们想象成:
例如:
@mcp.resource(“clients://{client_id}”)
def get_client(client_id: str) -> dict:
“““指定ID,返回客户端的详细资料”””
...
MCP资源的主要特点:
在我们的工作流中,使用list_clients
, get_client_details
和 list_account_managers
这样的资源是合适的。
假设公开了 5000 个操作作为MCP工具 (例如,不同的 CRM 系统,api 等等) ,如果这些都是工具:
相反,可以将 list_crm_systems,list_available_actions
或者 list_departments
公开为资源。这有助于客户端根据用户输入或身份验证获取相关的上下文片段,从而优化性能和可伸缩性。
MCP工具和MCP资源的选择依据:
资源有助于管理身份验证和授权:
此策略确保用户只能看到他们拥有权限的资源和工具,并且可以与它们进行交互,从而增强安全性和用户体验。
如果希望 AI 模型自主地识别有缺失的输入并请求它们,那么必须使用工具。工具是模型控制的,允许模型:
资源将不会触发此行为,除非客户端应用程序添加了相关逻辑。将数据拉入并将其注入上下文。
虽然 AI 模型本身并不将 tool:// 或 resource:// 解析为协议,但是采用这样的命名约定可以增强可读性和结构。一致的 URI 模式 (如 tool://crm/add-client 或 resource://clients/{ id}) 使生态系统可预测,并且在一些工具框架中能够得到支持。
当构建自动化工作流程的智能助手时,在 MCP 工具和资源之间进行选择至关重要:
对于动态且自动化的Agentic系统,工具是动力,对于管理广泛的参考数据,资源可以帮助我们安全地扩展。
-------------------------------------------------------------------------------------