FASTMCP中的Resources和Templates

Resources = 给 MCP 客户端/LLM 读取的数据端点(只读、按 URI 索引、像“虚拟文件系统”或“HTTP GET”);
Templates = 可带参数的资源路由(URI 里占位符 → 运行函数动态生成内容)。

快速要点
• 用途:把文件、配置、数据库查询结果、运行时状态、动态生成的文本/JSON/二进制等,按需提供给 LLM(通过 resources/read 而不是塞进提示词里),减少 token 压力。
• 只读:资源的定位是“读取数据”。涉及改变状态/执行动作的,应该用 Tool(RPC)而不是 Resource。
• URI 是钥匙:@mcp.resource(“scheme://path”) 把函数注册为一个资源;客户端用这个 URI 来取数据。
• 动态/静态都行:
• 动态:用 @mcp.resource 装饰函数,读取时才执行(Lazy)。
• 静态:用 mcp.add_resource(TextResource/FileResource/DirectoryResource/HttpResource …) 直接挂现成内容或文件夹索引。
• 模板(Templates):URI 里写占位符(如 user://{name}、path://{filepath*}),请求时把路径参数传给函数,动态生成资源。
• 返回类型:str→text/plain,dict/list/model→自动 JSON,bytes→Blob(要给合适 mime_type),None→空内容。
• 元数据与提示:mime_type / tags / meta / annotations(readOnlyHint,idempotentHint) 用于客户端展示、缓存与安全提示(不强制,仅提示)。
• 启用/禁用:可在装饰器或运行时 enable()/disable();变更时会向客户端发 resources/list_changed 通知。
• 上下文:签名里加 ctx: Context 可拿到 request_id 等(做审计、多租户、鉴权等)。
• 错误处理:抛标准异常会被转为 MCP 错误;想隐藏细节可开 mask_error_details=True 或抛 ResourceError 精准控制对外消息。
• 重复注册策略:on_duplicate_resources 控制重复 URI 的处理(warn/error/replace/ignore)。

和 Tool/Prompt 的区别(记这个表就行)

能力 Resource Tool
语义 读取数据(GET) 执行动作/有副作用(POST/PUT/DELETE)
触发 resources/read tools/call
适合 文件/配置/查询结果/日志/监控视图 写库、发送消息、下单、触发流程
可参数化 通过 URI 模板 {param}/{param*} 通过函数参数(JSON-RPC)
缓存/幂等 天然适合缓存(idempotentHint) 需谨慎,可能有副作用

设计建议(结合你的场景)
• RAG/知识库:
• kb://doc/{id} 返回单文档;kb://search/{query} 返回检索结果(只读→Resource,若要写入索引→Tool)。
• 大结果可分页:kb://search/{query}?page=1&page_size=20(FastMCP 侧解析查询串或用 {page} 模板)。
• 短期记忆/Redis(只读视图):
• memory://session/{sid} 返回当前会话摘要;写入或清空记忆则走 Tool(如 memory.clear)。
• 监控/状态面板:
• status://app/current、metrics://{name},给 mime_type=“application/json”,加 annotations={“readOnlyHint”: true} 方便客户端缓存与展示。
• 文件系统/日志:
• file://…/DirectoryResource 暴露目录清单;敏感路径用 mask_error_details 或做白名单。
• 命名与稳定性:URI 要稳定可书签化(避免把会频繁变动的细节放进路径),必要时用 meta 携带版本等信息。
• 性能:昂贵的动态资源(例如深度检索)要么缓存、要么限制参数范围,并在 description 里写清语义,便于 LLM 正确选择。

小例子(动态模板 + 静态文件)

from fastmcp import FastMCP, Context
from fastmcp.resources import FileResource
from pathlib import Pathmcp = FastMCP(name="KB")

动态模板:会话记忆只读视图

@mcp.resource("memory://session/{sid}")
def session_view(sid: str, ctx: Context) -> dict:"""Return chat memory snapshot for a session (read-only)."""return {"sid": sid, "summary": "...", "messages": []}

暴露 README.md 作为静态资源

readme = Path("./README.md").resolve()
if readme.exists():mcp.add_resource(FileResource(uri=f"file://{readme.as_posix()}",path=readme,name="Project README",mime_type="text/markdown",tags={"docs"}))

记住:读 = Resource,写/动作 = Tool;固定 = 资源,带参数 = 模板。把需要“让 LLM 随取随用”的上下文做成资源 URI,客户端用 resources/list 发现、用 resources/read 获取,就能把大量上下文从提示词里“移出来”,按需加载、可缓存、更稳更省。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95687.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenBMC之编译加速篇

加快 OpenBMC 的编译速度是一个非常重要的话题,因为完整的构建通常非常耗时(在高性能机器上也需要数十分钟,普通电脑上可能长达数小时)。以下是从不同层面优化编译速度的详细策略,您可以根据自身情况组合使用。 一、核心方法:利用 BitBake 的缓存和共享机制(效果最显著…

Kafka面试精讲 Day 8:日志清理与数据保留策略

【Kafka面试精讲 Day 8】日志清理与数据保留策略 在Kafka的高吞吐、持久化消息系统中,日志清理与数据保留策略是决定系统资源利用效率、数据可用性与合规性的关键机制。作为“Kafka面试精讲”系列的第8天,本文聚焦于日志清理机制(Log Cleani…

基于Hadoop的网约车公司数据分析系统设计(代码+数据库+LW)

摘 要 本系统基于Hadoop平台,旨在为网约车公司提供一个高效的数据分析解决方案。随着网约车行业的快速发展,平台上产生的数据量日益增加,传统的数据处理方式已无法满足需求。因此,设计了一种基于Hadoop的大规模数据处理和分析方…

Python反向迭代完全指南:从基础到高性能系统设计

引言:反向迭代的核心价值在数据处理和算法实现中,反向迭代是解决复杂问题的关键技术。根据2024年Python开发者调查报告:85%的链表操作需要反向迭代78%的时间序列分析依赖反向处理92%的树结构遍历需要后序/逆序访问65%的加密算法使用反向计算P…

ClickHouse使用Docker部署

OLTP和OLAP介绍基本业务量到达分库分表量级,则离不开数据大屏、推荐系统、画像系统等搭建,需要搭建以上系统,则离不开海量数据进行存储-分析-统计。 而海量数据下 TB、PB级别数据存储,靠Mysql进行存储-分析-统计无疑是灾难。所以就…

Python 算数运算练习题

计算数字特征值题目描述 编写一个程序,接收用户输入的两个整数 a 和 b(a > b > 0),计算并输出以下结果:a 与 b 的和的平方a 除以 b 的商和余数a 与 b 的平均数(保留 2 位小数)示例请输入整…

【物种分布模型】R语言物种气候生态位动态量化与分布特征模拟——气候生态位动态检验、质心转移可视化、适生区预测等

R语言是一种广泛用于统计分析和图形表示的编程语言,强大之处在于可以进行多元数据统计分析,以及丰富的生态环境数据分析的方法,在生态学领域得到广泛应用。本次教程将通过R语言多个程序包与GIS融合应用,提升物种气候生态位动态量化…

【算法速成课2 | 题单】背包问题

专栏指路:《算法速成课》 前导: 动态规划问题中最入门、也最多变的,当属背包问题。 简单来说,就是在有限的空间,(花费最小的代价)达成最大的收益。 本文会讲一些常见的背包问题(可…

计算机视觉与深度学习 | 深度学习图像匹配算法在不同纹理复杂度场景下的鲁棒性和计算效率评估方法

如何评估深度学习图像匹配算法在不同纹理复杂度场景下的鲁棒性和计算效率? 文章目录 如何评估深度学习图像匹配算法在不同纹理复杂度场景下的鲁棒性和计算效率? 一、评估框架概述 1.1 核心评估维度 1.2 评估流程 二、纹理复杂度场景分类方法 2.1 纹理特征量化指标 2.2 场景分…

AI 提示词工程与上下文工程:从入门到深入的系统实践指南

前言近年来,随着大语言模型(LLM,Large Language Model)的快速发展,提示词工程(Prompt Engineering)与上下文工程(Context Engineering)逐渐成为 AI 应用开发中至关重要的…

救火!Linux服务器慢如蜗牛:一套从根源到应用的性能问题诊断全攻略

前言:从“玄学”到“科学” “服务又卡了!” 这是我们每个Linux运维/SRE工程师最不想听到,却又最常听到的一句话。随之而来的,往往是开发、产品、甚至老板的连环追问。此时,一个经验不足的工程师可能会立刻登录服务器&…

BYOFF (Bring Your Own Formatting Function)解析(80)

BYOFF (Bring Your Own Formatting Function)解析(80) 看起来不错!要注意的是,我们并没有真正使用任何自定义的特殊标记。其中 “Question”(问题)、“Answer”(答案)、井号(#)以及 EOS 标记,都是分词器词汇表中常见的条目。在本节后续内容中,我们将探讨自定义特…

秋招|MCU+RTOS技术栈——面试八股文整理3:STM32

目录 1.单片机启动流程 2.看门狗 3.最小系统 4.ROM、RAM、Flash 5.EPROM、EEPROM 6.Bootloader与OTA 1.单片机启动流程 单片机的启动流程是指从上电或复位开始到应用用户主程序执行的一系列自动操作过程,不同架构的单片机流程略有差异,但核心逻辑…

在 CentOS 9 上安装 Docker 的完整指南

1.准备安装环境(1)禁用防火墙与SELinux[rootlocalhost ~]# systemctl disable --now firewalld.service Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service". Removed "/etc/systemd/system/dbus-org.fedoraproj…

如何实现外语播客的中文同传?

Bayt播客可以将任何语言的外语播客(英文播客、日文播客、韩文播客等)转换成中文音频收听,实现同声传译。并且还提供中文和原文的双语字幕。帮助你跨越语言障碍,收听高质量外语内容 核心功能: 1、所有语言的播客均可转…

Spring Cloud ------ Gateway

一、什么是网关 经常面试的人肯定知道,在去公司面试时,通常不会直接去面试官那里面试,而是先去前台进行询问面试官的所在地,并进行一些相关登记。而网关对于一个微服务项目来说,就类似于一个前台,打到微服…

Go初级之九:Select 与并发控制

在Go语言中,select语句是处理并发编程的核心工具之一。它让我们能够优雅地管理多个通道操作,实现高效的并发控制。 1. Select 语句基础 1.1 Select 的基本语法 package mainimport ("fmt""time" )func main() {ch1 : make(chan stri…

使用 Acme.sh 获取和管理免费 SSL 证书

Acme.sh 是一个开源的 Shell 脚本工具,支持从 Let’s Encrypt 等证书颁发机构获取免费的 SSL/TLS 证书。它支持多种验证方式,并能自动续期证书,适合个人网站或企业使用。 目标 同时支持,主域名和泛域名 安装 Acme.sh获取源码 git …

docker-compose跨节点部署Elasticsearch 9.X集群

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一、环境准备 二、遇到的问题与分析 三、配…

【面试场景题】spring应用启动时出现内存溢出怎么排查

文章目录一、定位 OOM 类型二、基础排查:调整 JVM 参数与日志三、堆内存溢出(Heap Space)排查1. 分析堆转储文件2. 典型场景与解决四、元空间溢出(Metaspace)排查1. 分析类加载情况2. 典型场景与解决五、直接内存溢出&…