MCP 提示模板 (Prompts)
Prompts 是 MCP 服务器提供的一组预定义的交互模板。它们帮助用户或宿主快速、结构化地向 LLM 提供上下文,类似于“快捷指令”或“智能模板”。
1. 核心作用
提示模板解决了两个问题:
- 引导 LLM 进入角色:例如“你是一个资深代码审计员”。
- 结构化上下文注入:自动将文件内容、系统状态与用户的输入结合。
2. 提示词定义与参数
Prompt 通过参数化的方式提供灵活性。
{
"name": "audit_code",
"description": "对指定的代码文件进行安全审计",
"arguments": [
{
"name": "filename",
"description": "待审计的文件路径",
"required": true
},
{
"name": "language",
"description": "编程语言类型(如 rust, ts)",
"required": false
}
]
}
参数的作用
- 动态填充:宿主(Host)会根据用户输入或上下文填充这些变量。
- 自动搜索:如果参数是
required: true,宿主会自动引导用户提供或自动填充该值。
3. 生成多消息结果
Prompt 调用 prompts/get 后返回一个消息列表 (Message List),而不是单段文本。
{
"messages": [
{
"role": "user",
"content": {
"type": "text",
"text": "你是一个资深审计专家。请审计以下文件:"
}
},
{
"role": "user",
"content": {
"type": "resource",
"resource": {
"uri": "file:///src/main.rs",
"text": "fn main() { ... }" // 自动拉取的资源内容
}
}
}
]
}
多轮对话能力
Prompt 还可以返回 assistant 角色的消息,用于设置 Few-shot(少样本提升) 示例:
user: 这是一个示例 bug。assistant: 这是一个对应的修复建议。user: 这里是我的实际代码,请参照修复。
4. 与资源的联动 (Prompt-Resource Binding)
这是 MCP 最强大的特性之一。Prompt 返回的结果可以直接包含 resource 类型的片段。
- 服务器收到
prompts/get请求。 - 服务器读取相关数据库或本地文件。
- 服务器将内容动态装载进
resource片段返回给宿主。
这使得 LLM 可以获得最新的、带有源元数据的实时上下文。
5. 开发建议:动态提示列表
服务器可以根据开发进度动态增加或修改 Prompt。当检测到 Prompt 定义变化时,应当发送更新通知:
{
"jsonrpc": "2.0",
"method": "notifications/prompts/list_changed"
}
小结
- ✅ 预设工作流:Prompt 是业务逻辑的“快捷入口”。
- ✅ 支持多角色消息:可以注入 user, assistant 的消息。
- ✅ 自动整合资源:Prompt 是资源展现的最直接形式。
练习
- 设计一个
explain_concept提示词模板,包含一个concept(概念)参数和一个detail_level(详细程度)可选参数。 - 试着编写一个返回包含 Few-shot 示例的消息列表。