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
英文地址,請注明出處:http://en.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. 典型場景與解決五、直接內存溢出&…