提示词模板与工作流

第三种原语 Prompts 与"系统提示词"不是一回事:它把高频操作沉淀成参数化模板,由用户主动触发,成为工作流的入口。本章讲模板写法、与系统提示词的关系,以及宿主如何触发。

Prompts 解决什么

聊天时每次都要手打"请以资深工程师身份审查下面代码……"很啰嗦。服务器提供命名模板(如 code-review),用户点一下就生成一段高质量引导,再补上真实代码即可开始。模板可带参数:

{"jsonrpc": "2.0", "id": 1, "method": "prompts/get",
 "params": {"name": "code-review", "arguments": {"language": "python"}}}
{"jsonrpc": "2.0", "id": 1, "result": {"messages": [
  {"role": "user", "content": {"type": "text",
   "text": "请作为资深 Python 工程师审查待提交代码:关注正确性、可读性、安全性……"}}]}}

用 FastMCP 注册提示词

装饰器 + 参数 + 返回模板文本即可;返回内容会由客户端组装成消息:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("team-server")

@mcp.prompt
def code_review(code: str, language: str = "python") -> str:
    """代码审查引导:把待审查代码与语言传进来"""
    return (
        f"请作为资深 {language} 工程师审查下面这段待提交代码。\n"
        "请按正确性、可读性、安全性三方面给出意见,并给出修改建议。\n\n"
        f"{code}"
    )

@mcp.prompt
def write_release_note(version: str, changes: str) -> str:
    """发布说明引导:给定版本号与变更要点,生成发布说明"""
    return (
        f"请根据本次变更要点撰写 v{version} 的发布说明,"
        f"用面向用户的语言组织为 新功能/优化/修复 三节。\n变更要点:{changes}"
    )

提示词与系统提示词的关系

  • 系统提示词:由宿主在会话开始时统一注入,定义模型的全局角色与规矩,通常用户不可见、不可选。
  • MCP Prompts:服务器侧的能力,可参数化、可枚举(prompts/list),用户按需挑选,客户端把返回消息拼进当前对话。 一句话:系统提示词管"底色",Prompts 管"起手式";前者是一次性的,后者是可复用可组合的。

工作流编排:把常用操作串起来

Prompts 也是工作流入口:把"多步但套路固定"的操作包成一个模板。例如发布流程 = 审查变更 → 更新版本号 → 生成发布说明 → 打标签,模板只负责生成引导语,实际动作仍由模型调用工具完成;甚至可在模板消息里明确指示模型依次调用哪些工具。模板文案写得越具体,流程越可复现。

宿主如何触发

  1. 宿主调用 prompts/list 得到模板清单并展示给用户;
  2. 用户选中某个模板(可能还要填参数,如语言、版本号);
  3. 宿主调用 prompts/get 取回 messages;
  4. 宿主把取回的消息与用户补充的真实内容合并后发给模型。 注意:触发权在用户/宿主,不在模型——Prompts 不会像工具那样被模型自主调用。

小结

Prompts 把高频话术与固定流程沉淀成参数化模板,由用户触发、客户端组装,与系统提示词互补。至此三种原语全部讲完,下一章进入客户端视角:用 Python 写客户端连服务器。

笔记加载中…