Prompts原语:标准化提示词模板
摘要MCP Prompts原语提供标准化提示词模板支持参数化注入和组合调用。本文详解提示定义、消息构建、客户端调用流程和提示与工具的联动设计。Prompts原语标准化提示词模板前阵子我给团队维护一坨提示词散落在十几个Python文件里每人写法都不一样有人把system prompt硬编码有人用f-string拼改一个变量得全局搜一遍。后来我把这些提示词迁移到MCP的Prompts原语里统一用参数化模板管理客户端能自动发现并填参数团队再也没为谁的提示词版本对吵过架。这篇我把Prompts原语的设计理念和用法讲透。Prompts原语的设计理念MCP规范里Prompts原语让Server定义可复用的提示词模板和工作流客户端能直接展示给用户和模型。它的核心定位是user-controlled由用户主动选择使用这点和Resources一样和Tools的model-controlled不同。Prompts的设计目标是标准化和共享。你在Server端定义好模板参数化加描述任何MCP客户端连上来都能发现这些模板用户像选斜杠命令一样选用填几个参数就能生成一段完整的对话消息。团队共享提示词这件事从复制粘贴代码变成了连同一个Server。一个Prompt的定义包含这些字段。name是唯一标识description是人可读的描述arguments是可选的参数列表每个参数有name、description和required。客户端拿这些信息自动生成输入表单。参数化提示模板参数化是Prompts最实用的特性。你定义一个函数参数就是模板变量客户端调用时传参函数返回组装好的消息。下面是规范里analyze-code这个prompt的参数定义。{name:analyze-code,description:Analyze code for potential improvements,arguments:[{name:language,description:Programming language,required:true}]}用FastMCP定义参数化prompt非常直观函数参数就是模板参数有默认值的算可选没默认值的算必填。FastMCP还会解析docstring自动提取每个参数的描述省得你手动写。我发现一个隐藏好处参数化模板天然防注入。以前用f-string拼提示词用户输入直接插进去容易被prompt injection。现在参数走JSON Schema校验我在函数里做转义和校验安全性好很多。多消息组合与嵌入资源Prompts不只能返回单条消息它能返回一整个消息序列模拟一段多轮对话。每条消息有role可以是user或assistant。这让你能预设对话上下文模型接手时已经有了开场白。更强大的能力是嵌入资源。Prompt的消息内容可以是text类型也可以是resource类型直接把一个Resource的内容塞进消息里。这样你能把日志文件、代码文件和提问组合在一起模型一次拿到完整上下文。我做过一个debug-error的prompt模板第一条user消息放错误描述第二条assistant消息预设回应我来帮你分析第三条user消息嵌入日志资源。模型接手时对话已经有了结构分析质量明显比单条消息高。完整代码下面是完整的Prompts示例包含单消息模板、多消息组合和嵌入资源的模板。客户端测试脚本调用这些prompt。server.py# server.py MCP Prompts原语完整示例# 运行方式 python server.py# 依赖安装 pip install fastmcpfromfastmcpimportFastMCP,Contextfromfastmcp.promptsimportMessage# 创建服务器实例mcpFastMCP(namePromptTemplatesServer)# ---------- 简单的单消息prompt ----------mcp.promptdefcode_review(code:str,language:strpython)-str:生成代码审查请求的提示词. Args: code: 要审查的代码片段. language: 代码的编程语言, 默认python. # 拼装提示词, 参数已经被FastMCP校验过return(f请审查以下{language}代码, 重点关注潜在bug、f性能问题和可读性.\n\nf\n{code}\n)# ---------- 多消息组合prompt ----------mcp.promptdefdebug_workflow(error:str)-list[Message]:生成调试工作流的多轮对话. Args: error: 遇到的错误描述. # 返回多条消息, 模拟一段预设的对话开场return[# 第一条, 用户描述问题Message(f我遇到了这个错误, 请帮我分析{error}),# 第二条, assistant预设回应, 引导用户继续Message(好的, 我来帮你分析这个错误. 请问你之前尝试过什么方法?,roleassistant),]# ---------- 带上下文的prompt, 读取资源嵌入 ----------mcp.promptasyncdefanalyze_with_context(question:str,file_path:str,ctx:Context,)-list[Message]:结合文件内容生成分析请求. Args: question: 要分析的问题. file_path: 要参考的文件路径. # 通过Context读取服务器上的资源, 获取文件内容# 这里复用上一篇Resources里的思路, 直接read_resourcecontentsawaitctx.read_resource(ffile:///{file_path})file_contentcontents[0].contentifcontentselse文件为空# 组合问题和文件内容, 让模型同时看到两者return[Message(f请基于以下文件内容回答我的问题.\n\n问题{question}),Message(f以下是文件{file_path}的内容\n\n{file_content}),]# ---------- 返回PromptResult, 带元数据 ----------mcp.promptdefsummarize_text(text:str)-str:生成文本摘要请求. Args: text: 需要摘要的长文本. returnf请用三句话总结以下内容的核心要点.\n\n{text}if__name____main__:mcp.run()client_test.py# client_test.py Prompts客户端测试# 运行方式 python client_test.pyimportasynciofromfastmcpimportClientasyncdefmain():asyncwithClient(server.py)asclient:# 第一步, 列出所有可用prompt, 相当于发prompts/listpromptsawaitclient.list_prompts()print( 可用Prompt列表 )forpinprompts:print(f 名称{p.name})print(f 描述{p.description})print()# 第二步, 调用单消息prompt, 相当于发prompts/getprint( 调用 code_review )resultawaitclient.get_prompt(code_review,{code:def add(a, b): return a b,language:python},)# result.messages 是返回的消息列表formsginresult.messages:print(f 角色{msg.role})print(f 内容{msg.content.text})print()# 第三步, 调用多消息promptprint( 调用 debug_workflow )resultawaitclient.get_prompt(debug_workflow,{error:TypeError unsupported operand type(s) for int and str},)formsginresult.messages:print(f 角色{msg.role})print(f 内容{msg.content.text})print()# 第四步, 调用摘要promptprint( 调用 summarize_text )resultawaitclient.get_prompt(summarize_text,{text:MCP是一个开放协议, 让大模型连接外部工具和数据源. 它定义了统一的通信标准.},)formsginresult.messages:print(f 角色{msg.role})print(f 内容{msg.content.text})if__name____main__:asyncio.run(main())效果验证装好fastmcp后跑client_test.py输出大致如下。 可用Prompt列表 名称 code_review 描述 生成代码审查请求的提示词. 名称 debug_workflow 描述 生成调试工作流的多轮对话. 名称 analyze_with_context 描述 结合文件内容生成分析请求. 名称 summarize_text 描述 生成文本摘要请求. 调用 code_review 角色 user 内容 请审查以下python代码, 重点关注潜在bug、性能问题和可读性.def add(a, b): return a b 调用 debug_workflow 角色 user 内容 我遇到了这个错误, 请帮我分析 TypeError unsupported operand type(s)... 角色 assistant 内容 好的, 我来帮你分析这个错误. 请问你之前尝试过什么方法?客户端list到四个prompt再分别get调用拿到组装好的消息序列。在真实MCP客户端里这些prompt会变成斜杠命令或快捷操作用户点一下填参数就能用。与普通Prompt工程的区别很多人觉得Prompts原语就是换了个地方写提示词其实区别挺大。我做了个对比。维度MCP Prompts普通Prompt工程存储位置集中在Server端管理散落在代码或配置文件发现方式客户端自动prompts/list发现手动维护文档或代码参数化协议级参数校验和描述自己写f-string或模板引擎共享范围任何MCP客户端连上就能用绑定特定应用代码多消息原生支持多轮对话序列手动拼接消息数组嵌入资源直接把Resource嵌入消息自己读文件再拼字符串最实际的区别在团队协作。普通Prompt工程里提示词改了得改代码、发版本、通知所有人。用Prompts原语提示词在Server端维护改了客户端自动发现新版本零成本同步。我团队之前有个code-review的提示词三个人各自维护了一份参数名都不一样。迁到Prompts原语后统一成一个code_review模板参数叫code和language所有人用的都是同一份再也没出过版本不一致的问题。常见问题与避坑坑1必填参数没传导致get失败。Prompt的required参数客户端必须传漏传一个prompts/get直接报错。FastMCP里没默认值的参数就是必填的定义模板时想清楚哪些参数真的必填能给默认值的就给。坑2多消息prompt的role用错。Message默认role是user预设assistant回应时忘了传role“assistant”模型把预设回应也当成用户输入对话逻辑就乱了。多消息场景每条消息都要确认role对不对。坑3嵌入资源时URI写错读不到内容。Prompt里嵌入resource消息时URI要和Resources里定义的一致。我之前模板里写了file:///notes.txt但实际资源URI是file:///{path}模板read的时候传错了路径拿空内容。嵌入资源前先确认URI能read成功。坑4提示词里直接拼接用户输入被注入。参数化模板降低了风险但如果直接把用户输入拼进提示词文本还是有prompt injection的风险。对用户输入做长度限制和必要的转义特别是code这种可能包含特殊内容的参数。坑5docstring格式不规范导致描述丢失。FastMCP靠解析docstring提取参数描述格式不对就提取不到。用Google或NumPy风格的docstringArgs段落写清楚每个参数FastMCP会自动填充到协议的argument description里。小结Prompts原语把提示词模板标准化了。核心要点有三个参数化模板让提示词可复用可校验多消息组合支持预设对话上下文嵌入资源让模型一次拿到完整背景。和普通Prompt工程相比Prompts原语的优势在集中管理、自动发现和团队共享。下一篇我们进入一个相对反直觉的原语Sampling它让Server反过来请求Client的LLM能力。相关推荐MCP三大原语初体验Tools、Resources、Prompts一个都不少提示模板开发参数化提示与组合提示Tools原语深度解析从定义到调用全流程

相关新闻

终极免费替代Photoshop指南:PhotoGIMP完整安装教程,3分钟把GIMP变成熟悉界面

终极免费替代Photoshop指南:PhotoGIMP完整安装教程,3分钟把GIMP变成熟悉界面

终极免费替代Photoshop指南:PhotoGIMP完整安装教程,3分钟把GIMP变成熟悉界面 【免费下载链接】PhotoGIMP A Patch for GIMP 3 for Photoshop Users 项目地址: https://gitcode.com/GitHub_Trending/ph/PhotoGIMP 深夜11点,自由设计师小…

2026/10/12 10:38:20 阅读更多 →
云端自主智能体:重新定义企业业务运营

云端自主智能体:重新定义企业业务运营

摘要:自主 AI 智能体正成为企业数字化转型的核心驱动力。它依托云计算、机器学习与大语言模型,实现工作流自动化、实时智能决策与弹性扩展,显著提升运营效率并降低成本。本文系统阐述自主 AI 智能体如何变革业务运营、其云原生架构优势、各行…

2026/10/16 15:14:53 阅读更多 →
TypeScript快速上手:用Node.js写你的第一个MCP Server

TypeScript快速上手:用Node.js写你的第一个MCP Server

摘要:使用TypeScript和Node.js开发MCP Server的完整教程,涵盖modelcontextprotocol/sdk安装、工具定义、传输配置和调试技巧,适合前端和Node开发者进入MCP生态。 TypeScript快速上手用Node.js写你的第一个MCP Server 我第一次写MCP Server用…

2026/10/10 20:18:20 阅读更多 →

最新新闻

双串锂电主动均衡设计:MP2642GR-Z与ATmega324P工程实践

双串锂电主动均衡设计:MP2642GR-Z与ATmega324P工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 15:43:10 阅读更多 →
量化交易入门:CANSLIM模型N要素如何捕捉股价创新高的买入时机

量化交易入门:CANSLIM模型N要素如何捕捉股价创新高的买入时机

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 15:43:10 阅读更多 →
指令系统详解:从指令格式、寻址方式到CISC与RISC架构博弈

指令系统详解:从指令格式、寻址方式到CISC与RISC架构博弈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 15:43:10 阅读更多 →
IndexedDB实战:从localStorage迁移到浏览器内置数据库的完整指南

IndexedDB实战:从localStorage迁移到浏览器内置数据库的完整指南

1. 为什么你的项目需要IndexedDB:从localStorage的局限说起在聊IndexedDB之前,先说说我为什么在几个项目里坚决地把数据存储方案从localStorage换成了它。很多人在做前端数据持久化的时候,第一个想到的就是localStorage,毕竟API简…

2026/10/17 15:43:10 阅读更多 →
用Python和Pygame实现Boulder Dash:网格地图、重力与碰撞详解

用Python和Pygame实现Boulder Dash:网格地图、重力与碰撞详解

简介:这是一款用JavaScript实现的简易版《宝石迷阵》游戏源码包,面向初学前端游戏开发的读者,适合用来理解网页游戏从地图搭建、角色控制到碰撞反馈的完整流程。压缩包共20个文件,囊括HTML入口、CSS样式、3个JS逻辑文件以及多张GI…

2026/10/17 15:43:10 阅读更多 →
Qt界面美化实战:基于JSON主题配置的通用UI架构设计

Qt界面美化实战:基于JSON主题配置的通用UI架构设计

简介:本资源是一套基于Qt开发的高颜值、跨平台通用界面示例工程,面向Qt初学者与中阶开发者,聚焦GUI设计实战,解决传统界面风格单一、适配性差、代码复用率低等常见痛点。压缩包共41个文件(294KB)&#xff0…

2026/10/17 15:42:09 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →