跳到主要内容

MCP 提示模板 (Prompts)

Prompts 是 MCP 服务器提供的一组预定义的交互模板。它们帮助用户或宿主快速、结构化地向 LLM 提供上下文,类似于“快捷指令”或“智能模板”。

1. 核心作用

提示模板解决了两个问题:

  1. 引导 LLM 进入角色:例如“你是一个资深代码审计员”。
  2. 结构化上下文注入:自动将文件内容、系统状态与用户的输入结合。

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(少样本提升) 示例:

  1. user: 这是一个示例 bug。
  2. assistant: 这是一个对应的修复建议。
  3. user: 这里是我的实际代码,请参照修复。

4. 与资源的联动 (Prompt-Resource Binding)

这是 MCP 最强大的特性之一。Prompt 返回的结果可以直接包含 resource 类型的片段。

  1. 服务器收到 prompts/get 请求。
  2. 服务器读取相关数据库或本地文件。
  3. 服务器将内容动态装载进 resource 片段返回给宿主。

这使得 LLM 可以获得最新的、带有源元数据的实时上下文。


5. 开发建议:动态提示列表

服务器可以根据开发进度动态增加或修改 Prompt。当检测到 Prompt 定义变化时,应当发送更新通知:

{
"jsonrpc": "2.0",
"method": "notifications/prompts/list_changed"
}

小结

  • 预设工作流:Prompt 是业务逻辑的“快捷入口”。
  • 支持多角色消息:可以注入 user, assistant 的消息。
  • 自动整合资源:Prompt 是资源展现的最直接形式。

练习

  1. 设计一个 explain_concept 提示词模板,包含一个 concept(概念)参数和一个 detail_level(详细程度)可选参数。
  2. 试着编写一个返回包含 Few-shot 示例的消息列表。