Resources、Tools 与 Prompts 的分工提示在基于大语言模型的智能体开发中如何合理划分知识供给、动作执行与任务指引是决定系统效率与准确性的核心。本文将深度解析 MCP 协议中的三大原语——Resources、Tools 与 Prompts并结合 CrewAI 框架给出完整的企业级实现方案。特别针对“静态数据 vs 动态数据”的选型难题提出可落地的决策标准助你构建既省钱又聪明的 AI 应用文章目录Resources、Tools 与 Prompts 的分工前言一、核心概念总览二、Resources资源—— 应用控制的静态知识供给2.1 定义与用途2.2 何时优先使用 Resource —— “静态数据金标准”2.3 如何实现2.4 建议包含的内容三、Tools工具—— 模型控制的动态操作3.1 定义与用途3.2 何时优先使用 Tool —— “动态数据必用 Tool”3.3 如何实现3.3.1 服务端定义FastMCP3.3.2 CrewAI 自动集成mcps 字段3.3 工具过滤安全管控3.4 建议包含的内容四、Prompts提示词—— 用户控制的快捷模板4.1 MCP 的设计哲学用户控制User-Controlled4.2 如何在 MCP 中定义 Prompt4.3 与 CrewAI 的关系及实际使用4.4 注意事项五、三者的分工与协作 —— 架构师决策树5.1 何时用 Resource何时用 Tool —— 决策流程图5.2 协作模式Resource 提供背景Tool 执行检索5.3 Prompts 的位置六、企业级最佳实践清单前言随着 MCPModel Context Protocol的普及越来越多的企业选择将业务能力封装为 MCP 服务并集成到 CrewAI 等多智能体框架中。然而许多开发者对于 “什么时候该用 Resource什么时候该用 Tool” 感到困惑对于 “MCP 中的 Prompts 到底给谁用” 也存在误解。本文将逐一澄清这些核心问题并给出可直接落地的代码示例。一、核心概念总览概念本质控制方触发时机典型内容Resources资源只读数据名词应用代码开发者控制任务执行前主动加载合规文档、产品手册、历史案例库、静态配置Tools工具可执行操作动词LLMAgent模型自主决策Agent 推理过程中按需调用实时查询、数据库更新、发送邮件、计算Prompts提示词对话模板快捷指令人类用户UI 控制用户手动点选 / 应用上层逻辑触发预设的分析任务模板、斜杠命令二、Resources资源—— 应用控制的静态知识供给2.1 定义与用途定义Resources 是 MCP 中用于暴露只读数据的接口不产生副作用类似 RESTful 的 GET 端点。用途将不变的或变化极慢的背景知识提前注入 Agent 的上下文避免 LLM 做不必要的决策。降低 Token 消耗省去 Agent 调用 Tool 获取固定信息的往返开销。作为 RAG 的标准化补充。2.2 何时优先使用 Resource —— “静态数据金标准”金标准如果数据是静态的或准静态的且不需要 Agent 实时感知变化请优先封装为 Resource。适合 Resource 的数据广告法合规要点、公司品牌规范、产品技术参数表、固定的定价策略、历史成功的文案模板摘要。不适合 Resource 的数据实时库存、当日汇率、用户会话状态、动态排行榜。核心逻辑将不变的数据提前“喂”给模型既能减少推理轮次又能节省 Token是降本增效的关键2.3 如何实现# 服务端定义FastMCPfrommcp.server.fastmcpimportFastMCP mcpFastMCP(EcommerceKnowledge)# 静态资源固定 URImcp.resource(knowledge://compliance/general)defget_general_compliance()-str:return通用广告法须知禁止虚假宣传需标明广告...# 动态资源URI 模板—— 可根据参数返回不同内容但依然由应用控制读取时机mcp.resource(knowledge://compliance/{category})defget_compliance_by_category(category:str)-str:# 可从数据库读取但建议缓存returnf这是{category}类目的特殊合规要求...# 二进制资源如图片、PDF但注入文本时需转化mcp.resource(file://reports/sales_q1.pdf)defget_q1_report()-bytes:withopen(sales_q1.pdf,rb)asf:returnf.read()由于 CrewAI 的 mcps 字段只自动导入 Tools对于 Resources我们需要在代码中显式读取然后拼接到 Agent 的backstory或 Task 的description中。# 客户端读取并注入 CrewAIFastAPI 异步读取importasynciofrommcpimportClientSession,StdioServerParametersfrommcp.client.stdioimportstdio_clientfromcrewaiimportAgent,Task,Crewasyncdeffetch_resource(uri:str)-str:通用的 MCP 资源读取函数server_paramsStdioServerParameters(commandpython,args[mcp_server.py]# 你的服务端文件)asyncwithstdio_client(server_params)as(read,write):asyncwithClientSession(read,write)assession:awaitsession.initialize()resultawaitsession.read_resource(uri)returnresult.contents[0].textasyncdefcreate_agent_with_context():# 读取两个静态资源complianceawaitfetch_resource(knowledge://compliance/general)product_manualawaitfetch_resource(knowledge://products/manual)agentAgent(role合规营销专家,goal撰写符合法规的产品文案,backstoryf 你是一位资深的电商营销专家熟悉以下背景知识 --- 合规指南 ---{compliance}--- 产品手册 ---{product_manual}请结合这些信息确保文案合法合规。 ,# 注意这里不包含 mcps因为 Tools 通过其他方式注入见后文)taskTask(description为新品撰写营销文案,expected_outputMarkdown文案,agentagent)crewCrew(agents[agent],tasks[task])returncrew.kickoff()2.4 建议包含的内容以下类型的静态或准静态数据非常适合封装为 Resource在任务开始前注入 Agent 上下文法律法规与公司政策如广告法合规要点、数据安全规范、品牌使用指南等为 Agent 提供明确的合规边界。产品技术参数与规格说明详细的产品特性、性能指标、使用限制等确保生成内容的技术准确性。历史成功案例摘要过往优秀的营销文案、解决方案或设计案例的精华总结为 Agent 提供可借鉴的范本。用户画像静态快照目标用户群体的典型特征、偏好与行为模式帮助 Agent 进行更具针对性的创作。数据库 Schema 定义表结构、字段含义及关系说明辅助 Agent 理解业务数据模型生成更合理的查询或分析。三、Tools工具—— 模型控制的动态操作3.1 定义与用途定义Tools 是 MCP 中用于执行动作的接口具有副作用如修改数据、调用外部 API。用途实时数据获取让 Agent 能够实时获取变化的数据如库存、价格、汇率等。写操作执行执行创建订单、更新记录等数据修改操作。外部系统交互与外部系统进行交互如发送邮件、调用第三方服务等。3.2 何时优先使用 Tool —— “动态数据必用 Tool”金标准凡是实时性要求高、结果依赖查询参数、需要 Agent 自主决定调用时机的数据操作请封装为 Tool。适合 Tool 的操作搜索商品关键词动态、查询库存、获取今日汇率、计算折扣价、发送验证码等。不适合 Tool 的场景固定不变的合规条款应用 Resource 更省。核心逻辑将动态的、需要实时交互的操作交给 Agent 自主决策调用既能保证数据的时效性又能充分发挥 Agent 的推理能力。3.3 如何实现3.3.1 服务端定义FastMCPmcp.tool()defsearch_products(keyword:str,limit:int10)-str:根据关键词搜索商品返回名称和价格列表# 模拟实时数据库查询returnf找到{limit}个与 {keyword} 相关的商品...mcp.tool()defget_inventory(product_id:str)-dict:查询某商品的实时库存# 调用库存微服务return{product_id:product_id,stock:100,updated_at:2025-01-01T12:00:00}mcp.tool()asyncdefplace_order(product_id:str,quantity:int)-dict:下单返回订单 ID# 异步执行订单创建return{order_id:ORD-123,status:success}3.3.2 CrewAI 自动集成mcps 字段CrewAI 通过mcps字段自动发现 MCP 服务器中的所有 Tools并转化为 Agent 可调用的工具。fromcrewaiimportAgentfromcrewai.mcpimportMCPServerHTTP agentAgent(role电商运营专员,goal高效处理客户订单,backstory你可以查询商品、库存并下单。,mcps[MCPServerHTTP(urlhttp://localhost:8000/mcp,# 服务端地址headers{Authorization:Bearer token},streamableTrue,# 推荐开启cache_tools_listTrue,# 缓存工具列表提升性能# tool_filter... # 可选工具过滤)])# Agent 现在拥有 search_products, get_inventory, place_order 等工具3.3 工具过滤安全管控fromcrewai.mcp.filtersimportcreate_static_tool_filter MCPServerHTTP(url...,tool_filtercreate_static_tool_filter(allowed_tool_names[search_products,get_inventory]# 只允许查询不允许下单))3.4 建议包含的内容以下类型的动态操作非常适合封装为 Tool由 Agent 在推理过程中按需调用实时查询类商品搜索、库存查询、价格查询、汇率查询等。更新类创建订单、更新用户信息、修改配置等。计算类折扣计算、税费计算、运费计算等。通知类发送邮件、短信、推送通知等。四、Prompts提示词—— 用户控制的快捷模板4.1 MCP 的设计哲学用户控制User-ControlledMCP 中的 Prompts 并非为 Agent 自动调用而设计其真正角色是为终端用户或上层应用提供可复用的对话模板。它类似于聊天软件中的斜杠命令Slash Commands用户输入/即可选择预设任务填写参数后发送。客户端如 Claude Desktop通过prompts/list发现可用模板通过prompts/get获取填充后的完整消息。4.2 如何在 MCP 中定义 Promptfrommcp.server.fastmcpimportFastMCP mcpFastMCP(EcommerceAssistant)mcp.prompt()defanalyze_sales(product_category:str)-str:生成销售分析报告模板用户可调用returnf请分析{product_category}类目最近30天的销售数据包括趋势、Top 5 热卖品和滞销品。mcp.prompt()defdraft_marketing_copy(product_name:str,target_audience:str)-str:撰写营销文案模板returnf请为 {product_name} 撰写针对 {target_audience} 的营销文案需突出核心卖点并包含行动呼吁。4.3 与 CrewAI 的关系及实际使用CrewAI 目前不自动消费 MCP Prompts因此你不能指望 Agent 在运行时自动选择调用。正确的用法是在 UI 层如 FastAPI 前端通过 MCP 客户端列出所有 Prompts并呈现给用户选择。当用户选择一个模板并填写参数后应用代码将该模板的内容拼接到 CrewAI 的 Task 的description或 Agent 的goal中再由 Agent 执行。# 应用层代码示例FastAPIapp.post(/run_task)asyncdefrun_task(prompt_name:str,params:dict):# 1. 通过 MCP 客户端获取对应的 Prompt 内容prompt_textawaitget_prompt(prompt_name,params)# 假设已实现# 2. 创建 CrewAI Agent 和 Task将 prompt_text 作为任务描述的一部分taskTask(descriptionprompt_text,expected_output...)# 3. 执行resultcrew.kickoff()returnresult4.4 注意事项不要试图让 Agent 自动调用 Prompts这不是 MCP 的设计目标。Prompts 是给人类使用的便捷工具帮助用户充分利用 MCP 服务的能力。五、三者的分工与协作 —— 架构师决策树5.1 何时用 Resource何时用 Tool —— 决策流程图数据是否需要 Agent 实时感知变化 │ ├─ 否静态/准静态→ 数据量是否过大超过上下文窗口 │ ├─ 否 → 封装为 **Resource**启动时注入 │ └─ 是 → 拆分为Resource摘要/方法论 Tool按需检索 │ └─ 是动态/实时→ 必须封装为 **Tool**由 Agent 自主调用5.2 协作模式Resource 提供背景Tool 执行检索对于大型知识库如历史案例 10 万条建议组合使用Resource提供“如何撰写案例”的方法论模板几百字。Tool提供“根据关键词搜索案例”的功能让 Agent 带条件去向量库检索。5.3 Prompts 的位置Prompts 不与 Resources/Tools 直接协作它们作用于用户交互层为用户提供快捷入口。在后台Prompts 填充的内容最终会转化为 Task 描述引导 Agent 使用对应的 Resources 和 Tools。六、企业级最佳实践清单实践点说明降本增效静态数据用 Resource省去不必要的 Tool 调用和 Token 消耗时效性保障动态数据必须用 Tool确保 Agent 在关键时刻拿到最新值大知识库处理Resource 提供结构Tool 提供检索避免上下文溢出权限控制使用tool_filter限制 Agent 可调用的工具范围缓存策略启用cache_tools_listTrue减少工具发现延迟监控与日志记录 Agent 调用了哪些 Tools便于优化提示词Prompt 管理将常用任务模板定义为 MCP Prompts提升用户交互体验