当前位置: 首页 > news >正文

MCP 系列(05):Resources 和 Prompts 进阶——动态数据、参数化 URI 与多轮模板

Resources 和 Tools 的本质区别

第 04 篇主要演示了 Tools。Resources 和 Tools 的分工需要先说清楚:

Tools → LLM 主动执行的操作(动词) LLM 决定什么时候调用,调用会产生副作用 示例:create_issue、update_status Resources → LLM 可读取的数据(名词) Host 决定何时注入到上下文,只读,无副作用 示例:当前 Sprint 状态、项目统计

"读取某个状态"用 Resource,"执行某个操作"用 Tool。同一个数据可以两种都实现:get_issue作为 Tool(LLM 控制何时调用),jira://issue/PROJ-101作为 Resource(Host 在需要时自动注入)。


模式 1:动态 Resource

Static Resource 每次返回相同的数据(如项目列表)。Dynamic Resource 每次读取返回当前最新状态,内容随时间变化。

Sprint 状态资源:每次读取都是实时数据

_sprint_progress_pct=65# 模拟随时间推进的进度@server.read_resource()# type: ignore[arg-type]asyncdefread_resource(uri:str)->str:ifstr(uri)=="jira://sprint/current":global_sprint_progress_pct _sprint_progress_pct=min(100,_sprint_progress_pct+random.randint(0,3))returnjson.dumps({"sprint_name":"Sprint 42","progress_pct":_sprint_progress_pct,# ← 每次不同"last_updated":datetime.now(timezone.utc).isoformat(),# ← 时间戳变化"days_remaining":5,"p0_open":count_p0_open(),# ← 随 issue 状态变化},indent=2)

测试结果:

Read 1: progress=65% last_updated=...62+00:00 Read 2: progress=67% last_updated=...04+00:00 → ✓ data changed between reads

Dynamic Resource 让 LLM 始终读到最新数据,适合监控类信息(Sprint 健康、队列深度、服务状态)。把这类数据硬编码在 Prompt 里,LLM 会用过时的数据做决策。

Resource 描述里标注动态性,LLM 就知道何时需要重读:

Resource(uri="jira://sprint/current",name="Current Sprint Status",description=("Live status of the active sprint: progress, issue counts. ""Read this when the user asks about sprint health or velocity. ""Re-read if you need up-to-date data — content changes over time."# ↑ 明确告知 LLM 这是动态数据,必要时重新读取),)

模式 2:参数化 URI

一种 Resource 类型对应多个具体实例时,用参数化 URI——list_resources()枚举所有实例,read_resource()用一个 handler 处理所有。

每个项目有自己的统计资源:

@server
http://www.jsqmd.com/news/1183223/

相关文章:

  • 自动化微型模组降本方案,微型压力传感器品牌推荐,广东犸力性价比替代海外产品 - 品牌速递
  • 如何选择最适合你的AI模型:Qwen2.5-7B-Instruct_rai_1.7.1_npu_4K与其他主流LLM模型全面对比指南
  • 亨得利官方钟表服务中心|全部地址与客服热线权威信息公示(2026年7月更新) - 亨得利官方
  • ModelSim 仿真记录:基于地址帧 UART 的 FPGA 多外设控制系统
  • Claude API构建Shopify智能客服与退货自动化系统实战
  • 计算机毕业设计之基于springboot药房药品管理系统的设计与实现
  • 2026年长春阳光房如何选?这份靠谱攻略助你选到心仪款! - 优选新闻
  • RouterOS DDNS 方案对比:原生Cloud、脚本API与3大服务商适配
  • 智搜 GEO 对比传统 SEO、竞价,三大核心优势解析
  • 2026 年 7 月昆山屋顶外墙防水测评|正规工程防水商家实力排名 - 苏易房屋修缮
  • Arduino UNO硬件设计原理深度解析:从芯片选型到PCB布局
  • Playnite游戏库管理器:一站式管理您所有的PC游戏
  • Mac鼠标增强工具终极指南:让10美元鼠标超越Apple触控板的5个实用技巧
  • 2026汕头房产中介推荐:了解值得信赖的中介公司! - 企业品牌
  • Power BI 视觉对象深度对比:折线图、仪表、切片器等5种核心图表应用场景与性能分析
  • OpenClaw架构详解:一只“龙虾”如何征服10万+GitHub Stars
  • OBS Studio输出模块架构设计与RTMP流媒体实现原理深度解析
  • Davinci Developer的Port Interfaces
  • 退房委托书公证办理流程及相关注意事项,2026 年汇总 - 跑政通
  • OmegaFold实战:从零部署到精准预测蛋白三维结构
  • Dart之数据类型
  • 银行业务分析中的七种生产级pandas多维聚合模式
  • ChatGPT服务不可用?OpenAI官方状态页不会告诉你的5个隐藏信号——从CDN缓存击穿到Rate Limit动态阈值突变(含实时监控Dashboard模板)
  • PyCharm 报错 ‘No Interpreter’ 深度排查:3类根因分析与5步修复流程
  • Unity UGUI事件穿透进阶:从新手引导到复杂UI交互的完整解决方案
  • 非线性规划WebApp求解:AI驱动的智能建模优化全过程平台
  • LuaJIT字节码反编译终极指南:5分钟快速恢复Lua源代码
  • 2026版AI大模型行业风口解析+零基础入门实战全攻略
  • mlx-community/Qwen3.5-2B-OptiQ-4bit架构深入分析:混合精度量化实现原理
  • linux基础预先指令