提示词工程工具与迭代
课程简介
提示词版本管理、自动化测试、性能评估工作流。
🎬 本课程视频:Prompt Engineering — 提示词工程
提示词工程工具与迭代
一、为什么需要工具链?
提示词开发如果只靠手写、复制、粘贴、肉眼观察效果,很快会遇到瓶颈:
- 版本混乱:修改了几个版本后分不清哪个版本最好
- 效果不可复现:昨天觉得好的版本今天忘了改了什么地方
- 缺乏定量评估:凭感觉说「这个版本更好」,没有数据支撑
- 团队协作困难:多人编辑提示词,互相覆盖
系统化的提示词工具链是解决这些问题的方法。它包含三个核心环节:版本管理、自动化测试和性能评估。
二、版本管理
2.1 提示词即代码
将提示词视为代码,使用代码版本管理的方式来管理提示词的变更。
# prompt_template.yaml
version: 2.3.1
created: 2026-07-27
author: user_team
description: 知识问答系统的主提示词
change_log:
- version: 2.3.1
date: 2026-07-27
author: user_team
change: 优化了角色描述,增加了知识边界约束
eval_result: faithfulness +3%, relevance +2%, tokens +5%
- version: 2.3.0
date: 2026-07-20
author: user_team
change: 新增了工具使用示例
eval_result: tool_accuracy +8%, tokens +10%
2.2 Prompt Template 系统
使用模板系统管理提示词中的变量部分。
from string import Template
class PromptTemplate:
'''提示词模板管理'''
def __init__(self, template_text):
self.template = Template(template_text)
self.version = "1.0.0"
self.metadata = {}
def render(self, **kwargs):
'''填充模板变量'''
return self.template.safe_substitute(**kwargs)
def save_version(self, version, author, change_log):
'''保存版本记录'''
self.version = version
self.metadata[version] = {
"author": author,
"date": datetime.now(),
"change_log": change_log
}
# 使用示例
template = PromptTemplate('''
你是一位{role}。请基于以下{context_type}回答问题。
{context}
用户问题:{question}
回答约束:
- {constraint_1}
- {constraint_2}
''')
rendered = template.render(
role="金融分析师",
context_type="财务报告",
context="...",
question="...",
constraint_1="只基于提供的数据回答",
constraint_2="如果有不确定的数据,标注置信度"
)
2.3 Git 管理提示词
# 提示词仓库结构
prompts/
├── versions/
│ ├── v1.0.0_prompt.txt
│ ├── v1.1.0_prompt.txt
│ └── v2.0.0_prompt.txt
├── templates/
│ ├── qa_template.txt
│ ├── summary_template.txt
│ └── classification_template.txt
├── evals/
│ ├── eval_set_v1.json
│ └── eval_results_v2.json
└── config.yaml
# 每次提示词变更使用 git commit
git add prompts/versions/v2.0.0_prompt.txt
git commit -m "feat: 新增多轮对话上下文管理"
三、自动化测试
3.1 测试类型
格式检测——检查输出是否符合预期的格式要求:
def test_format_compliance(output, expected_schema):
'''测试输出格式是否符合要求'''
try:
# JSON 格式检查
parsed = json.loads(output)
# Schema 校验
validate(instance=parsed, schema=expected_schema)
return {"pass": True, "errors": []}
except json.JSONDecodeError as e:
return {"pass": False, "errors": [f"JSON parse error: {e}"]}
except ValidationError as e:
return {"pass": False, "errors": [f"Schema error: {e}"]}
内容检测——检查输出是否包含了关键信息:
def test_content_quality(output, required_elements):
'''测试输出内容质量'''
results = []
for element in required_elements:
if element["type"] == "keyword":
found = element["value"] in output
results.append({
"check": f"包含关键词 '{element['value']}'",
"pass": found
})
elif element["type"] == "length":
meets = len(output) >= element["min"]
results.append({
"check": f"长度不少于 {element['min']} 字",
"pass": meets
})
return results
鲁棒性测试——测试输入微小变化时输出的稳定性:
def test_robustness(base_input, variations, prompt_func):
'''鲁棒性测试'''
base_output = prompt_func(base_input)
results = []
for var in variations:
# 对输入做微小的扰动
perturbed = apply_perturbation(base_input, var)
output = prompt_func(perturbed)
# 检查输出是否稳定
similarity = compute_similarity(base_output, output)
results.append({
"variation": var.description,
"similarity": similarity,
"is_stable": similarity > 0.8
})
return results
3.2 测试管道自动化
class PromptTestPipeline:
'''提示词测试管道'''
def run_test_suite(self, prompt_version, eval_set):
'''运行完整测试套件'''
results = {
"version": prompt_version,
"timestamp": datetime.now(),
"format_tests": [],
"content_tests": [],
"robustness_tests": [],
"performance_tests": []
}
for test_case in eval_set:
output = self._execute_prompt(prompt_version, test_case.input)
# 格式测试
format_result = test_format_compliance(output, test_case.schema)
results["format_tests"].append(format_result)
# 内容测试
content_result = test_content_quality(output, test_case.requirements)
results["content_tests"].append(content_result)
# 鲁棒性测试
robustness_result = test_robustness(...)
results["robustness_tests"] = robustness_result
return results
四、性能评估与 A/B 测试
4.1 核心评估指标
| 指标 | 定义 | 测量方式 |
|---|---|---|
| 任务完成率 | 任务成功完成的比例 | 端到端评估 |
| Token 消耗 | 每次任务消耗的 Token 数 | API 返回统计 |
| 响应延迟 | 端到端响应时间 | P50/P95/P99 |
| 用户满意度 | 用户对输出的评价 | 人工评分 / 隐式反馈 |
4.2 A/B 测试框架
class ABTestFramework:
'''提示词 A/B 测试框架'''
def __init__(self):
self.variants = {}
self.results = {}
def register_variant(self, name, prompt_version, traffic_percent):
'''注册一个测试变体'''
self.variants[name] = {
"prompt": prompt_version,
"traffic": traffic_percent
}
def route_request(self, request):
'''路由请求到不同的测试变体'''
# 基于流量比例分配
import random
r = random.random()
cumulative = 0
for name, variant in self.variants.items():
cumulative += variant["traffic"]
if r <= cumulative:
return name, variant["prompt"]
return None
def record_result(self, variant_name, metrics):
'''记录测试结果'''
if variant_name not in self.results:
self.results[variant_name] = []
self.results[variant_name].append(metrics)
def analyze_results(self):
'''分析 A/B 测试结果'''
analysis = {}
for name, metrics_list in self.results.items():
analysis[name] = {
"avg_task_completion": sum(m["completion"] for m in metrics_list) / len(metrics_list),
"avg_tokens": sum(m["tokens"] for m in metrics_list) / len(metrics_list),
"avg_latency": sum(m["latency"] for m in metrics_list) / len(metrics_list),
"sample_size": len(metrics_list)
}
return analysis
五、反馈闭环
5.1 用户反馈收集
def collect_feedback(response, user_action):
'''收集用户隐式反馈'''
feedback = {
"response_id": response.id,
"user_action": user_action, # copy / regenerate / thumbs_up / thumbs_down
"timestamp": datetime.now(),
"prompt_version": response.prompt_version
}
# 正反馈:用户复制或点赞
if user_action in ["copy", "thumbs_up"]:
feedback["positive"] = True
# 负反馈:用户要求重新生成或点踩
elif user_action in ["regenerate", "thumbs_down"]:
feedback["positive"] = False
return feedback
5.2 迭代优化流程
收集反馈 → 分析失败模式 → 修改提示词 → 运行评估 → 部署 → 继续收集
六、推荐工具
- LangSmith/LangFuse:LLM 应用全生命周期管理,提示词版本控制 + 追踪 + 评估
- Prompt Flow:微软推出的提示词开发和评估工具
- Weights & Biases Prompts:提示词管理和实验追踪
- 自建工具链:对合规要求高的企业,推荐基于 Git + CI/CD 自建
七、总结
提示词工程工具链将提示词开发从「凭感觉的手艺活」升级为「有数据支撑的系统工程」。版本管理确保每次变更都可追溯,自动化测试保障质量不退化,性能评估和 A/B 测试为优化方向提供数据支撑,反馈闭环形成持续改进的循环。这些工具和流程的组合应用,是构建高质量、可维护的 LLM 应用的必要条件。
七、A/B 测试与实验管理
7.1 为什么需要 A/B 测试?
提示词的效果因人因场景而异。主观判断不可靠,需要有数据支撑的决策。
7.2 A/B 测试流程
- 定义指标:确定衡量提示词效果的关键指标
- 创建变体:编写提示词的 A 版本和 B 版本
- 分流测试:将流量随机分配给两个版本
- 收集数据:收集两个版本的指标数据
- 统计分析:判断差异是否统计显著
- 采纳优胜者:选择效果更好的版本
7.3 关键指标
- 任务完成率:是否成功完成任务
- 准确率:答案的准确性
- 格式合规率:是否遵循输出格式
- 用户满意度:用户对输出的评价
- Token 消耗:平均每次调用的成本
八、提示词工程的工作流总结
一个成熟的提示词工程工作流:
- 需求分析:明确任务目标和评估标准
- 初稿编写:基于最佳实践编写初版提示词
- 本地测试:在小样本上测试和调试
- 版本管理:将提示词纳入版本控制
- 自动化测试:建立回归测试集
- A/B 实验:对比不同版本的效果
- 生产部署:将优胜版本部署到生产环境
- 持续监控:监控生产环境的效果和退化
九、总结
提示词工程不是一蹴而就的,而是一个工程化的持续改进过程。
关键要点回顾:
- 版本管理是提示词工程的基础设施
- 自动化测试确保提示词变更不会引入回归
- A/B 测试用数据驱动决策代替主观判断
- 提示词评估需要综合多维度指标
- 建立从开发到生产到监控的完整工作流
七、A/B 测试与实验管理
7.1 为什么需要 A/B 测试?
提示词的效果因人因场景而异。主观判断不可靠,需要有数据支撑的决策。
7.2 A/B 测试流程
- 定义指标:确定衡量提示词效果的关键指标
- 创建变体:编写提示词的 A 版本和 B 版本
- 分流测试:将流量随机分配给两个版本
- 收集数据:收集两个版本的指标数据
- 统计分析:判断差异是否统计显著
- 采纳优胜者:选择效果更好的版本
7.3 关键指标
- 任务完成率:是否成功完成任务
- 准确率:答案的准确性
- 格式合规率:是否遵循输出格式
- 用户满意度:用户对输出的评价
- Token 消耗:平均每次调用的成本
八、提示词工程的工作流总结
一个成熟的提示词工程工作流:
- 需求分析:明确任务目标和评估标准
- 初稿编写:基于最佳实践编写初版提示词
- 本地测试:在小样本上测试和调试
- 版本管理:将提示词纳入版本控制
- 自动化测试:建立回归测试集
- A/B 实验:对比不同版本的效果
- 生产部署:将优胜版本部署到生产环境
- 持续监控:监控生产环境的效果和退化
九、总结
提示词工程不是一蹴而就的,而是一个工程化的持续改进过程。
关键要点回顾:
- 版本管理是提示词工程的基础设施
- 自动化测试确保提示词变更不会引入回归
- A/B 测试用数据驱动决策代替主观判断
- 提示词评估需要综合多维度指标
- 建立从开发到生产到监控的完整工作流
七、A/B 测试与实验管理
7.1 为什么需要 A/B 测试?
提示词的效果因人因场景而异。主观判断不可靠,需要有数据支撑的决策。
7.2 A/B 测试流程
- 定义指标:确定衡量提示词效果的关键指标
- 创建变体:编写提示词的 A 版本和 B 版本
- 分流测试:将流量随机分配给两个版本
- 收集数据:收集两个版本的指标数据
- 统计分析:判断差异是否统计显著
- 采纳优胜者:选择效果更好的版本
7.3 关键指标
- 任务完成率:是否成功完成任务
- 准确率:答案的准确性
- 格式合规率:是否遵循输出格式
- 用户满意度:用户对输出的评价
- Token 消耗:平均每次调用的成本
八、提示词工程的工作流总结
一个成熟的提示词工程工作流:
- 需求分析:明确任务目标和评估标准
- 初稿编写:基于最佳实践编写初版提示词
- 本地测试:在小样本上测试和调试
- 版本管理:将提示词纳入版本控制
- 自动化测试:建立回归测试集
- A/B 实验:对比不同版本的效果
- 生产部署:将优胜版本部署到生产环境
- 持续监控:监控生产环境的效果和退化
九、总结
提示词工程不是一蹴而就的,而是一个工程化的持续改进过程。
关键要点回顾:
- 版本管理是提示词工程的基础设施
- 自动化测试确保提示词变更不会引入回归
- A/B 测试用数据驱动决策代替主观判断
- 提示词评估需要综合多维度指标
- 建立从开发到生产到监控的完整工作流
延伸阅读
- 📺 B 站播放列表:Prompt Engineering — 提示词工程
- 📚 更多学习资源,请访问 deeplearning.ai 官网