为什么要做Prompt模板?
如果每次都从零写Prompt,有三个问题:效率低、质量不稳定、无法迭代。模板化之后:同一个任务每次输出格式一致;改一个地方可以影响所有调用;可以做版本管理,追踪哪个版本效果最好。
变量插值设计
用占位符标记需要动态替换的部分:
TEMPLATE = """
你是一位{role},专注于{domain}领域。
请分析以下内容:
{content}
输出格式:
- 核心观点:...
- 风险提示:...
- 操作建议:...
"""
def render(role, domain, content):
return TEMPLATE.format(role=role, domain=domain, content=content)模板的分层结构
# 基础模板(通用规则)
BASE = "你是一个AI助手,总是用中文回答,输出简洁清晰。"
# 场景模板(继承基础)
STOCK_ANALYST = BASE + "\n你还是专业的A股分析师,分析时给出明确买卖建议。"
# 实例(填入具体数据)
prompt = STOCK_ANALYST + f"\n请分析以下股票:{stock_data}"完整Prompt模板系统示例
from dataclasses import dataclass
from typing import Dict
@dataclass
class PromptTemplate:
name: str
version: str
template: str
variables: list[str]
def render(self, **kwargs) -> str:
missing = [v for v in self.variables if v not in kwargs]
if missing:
raise ValueError(f"缺少变量: {missing}")
return self.template.format(**kwargs)
# 定义模板
templates = {
"stock_analysis_v2": PromptTemplate(
name="stock_analysis",
version="2.0",
template="""你是专业A股分析师。
分析股票:{ticker} ({name})
数据:{data}
给出:技术面分析、操作建议、止损价位。""",
variables=["ticker", "name", "data"]
)
}
# 使用
t = templates["stock_analysis_v2"]
prompt = t.render(ticker="002472", name="双环传动", data="收盘价36.67...")
Prompt版本管理
- 给每个模板加版本号(v1/v2/v3)
- 记录每个版本的评估指标(准确率、格式合规率)
- 修改时新增版本,保留旧版本便于回滚
- A/B测试:同一批数据跑新旧两个版本,对比效果
Prompt模板是AI工程化的基础。没有模板管理,AI功能会像"黑盒子"——每次结果不一样,也不知道为什么变了。