Skip to content

什么是提示词模板?如何设计可复用的提示词模板? ​

  • 标签:Prompt、提示词模板

🏛 业务架构师 ​

提示词模板是把提示词中"固定部分"与"可变部分"分离的机制——固定写死(角色、规则、格式),变量占位({user_question}、{retrieved_docs}),运行时填充。LangChain 的 PromptTemplate、Java 侧 Spring AI 的 PromptTemplate 同理。

核心价值(业务视角):提示词从"散落在代码里的字符串"变成可管理、可复用、可测试的资产——一次定义多处调用;非工程师(业务、运营)可在受控范围内调模板文案;变更可评审可回滚。

设计可复用模板的要点:

  1. 结构标准化:角色→背景/上下文→任务→约束→输出格式→示例→变量注入,段落清晰并用分隔符(XML 标签)标界——结构稳定,模型遵循更稳;
  2. 变量最小化与防御:只暴露真正变化的字段;变量值要消毒(防注入——用户输入不能混入指令区);缺失变量的默认值策略要定义;
  3. 输出契约固定:输出格式(JSON Schema/Markdown 结构)写死在模板里,下游解析程序才有稳定接口;
  4. 示例与规则外置:Few-shot 示例、业务规则做成可配置引用(不同场景换不同示例包),模板本体保持简洁;
  5. 版本与评测绑定:模板变更跑评测集回归,线上走灰度。

一个实践模板骨架:

text
你是{role}。背景:{context}。
任务:{task}。约束:{constraints}。
输出格式:{format_spec}。示例:{examples}。
用户输入:{input}

提醒:模板是"提示词工程化的入口"——团队规模超过 5 人就该建模板库统一管理,否则半年后就是一堆没人敢动的祖传字符串。

🏗 系统架构师 ​

提示词模板 = 把 Prompt 结构固化为"变量 + 布局",实现复用、维护与迭代标准化。设计要点:

模板结构(我的标准字段):

text
角色定义:你是{domain}专家…
任务描述:{task}
上下文/资料:{context}
约束条件:{constraints}
输出格式:{output_format}
示例(可选):{examples}
异常处理:无法满足时{fallback}

设计原则(架构师视角):

  • 变量显式化:用模板引擎(Jinja2/f-string/LangChain PromptTemplate)注入变量,禁止字符串拼接散落代码——模板是"代码",要有单一权威来源;
  • 稳定前缀 + 动态后缀(缓存经济学):不变内容(角色、格式说明、示例)放前缀吃 Prompt Cache,变量内容放后面——同一模板的缓存命中率就是成本优化的核心;
  • 输出契约内置:输出格式说明写进模板而不是调用方各自约定;配 OutputParser 做结构化校验,模板与解析器成对维护;
  • 版本管理:模板进 Git,语义化版本,变更跑回归评测集——线上灰度(1% → 10% → 全量),出问题秒回滚;
  • 组合而非巨型模板:复杂任务拆成模板链(改写模板 → 检索模板 → 生成模板),每个模板短小可测;不要做一个 3000 token 的万能模板(维护灾难 + 指令稀释);
  • 安全边界:用户输入变量要转义/包裹分隔符,防注入穿透模板结构。

价值总结:模板化让 Prompt 从"个人手艺"变成"团队资产"——可评审、可测试、可回滚、可复用。

💻 全栈开发专家 ​

提示词模板 = 固定骨架 + 变量槽位,让 prompt 成为可版本管理、可复用的工程资产。

设计要素(我的模板结构):

python
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system",
     "你是{company}的{domain}专家。规则:\n{rules}"),
    ("placeholder", "{history}"),          # 动态历史
    ("human",
     "参考资料:\n{context}\n\n问题:{question}")
])
final = prompt.invoke({"company": "XX", "domain": "电商售后",
                       "rules": RULES_V3, "context": docs,
                       "question": q})

设计要点:

  1. 分区清晰:角色/规则/上下文/问题各自独立变量——修改互不影响,测试可单独替换;
  2. 变量校验:启用 validate_template,漏传变量启动期报错而不是线上出空段;
  3. 不可信内容隔离:用户输入、检索文档用明确分隔(标签包裹),防注入且解析清晰;
  4. 规则外置:RULES 做成常量/配置版本化管理,业务改规则不动代码;
  5. 示例槽位:few-shot 示例独立变量,方便 A/B 不同示例集。

管理实践:模板进 Git(和代码一起 code review);语义化版本+changelog;每个版本绑定评测集跑回归;前缀稳定性——不变的部分(system/规则)放前面吃 prompt caching,变量拼后面。

何时升级:单模板塞超过 3 个职责(分类+抽取+生成)就该拆成链式多模板——模板是函数,一个函数别干三件事。