配音

提示词工程工具与迭代

课程简介

提示词版本管理、自动化测试、性能评估工作流。

🎬 本课程视频:Prompt Engineering — 提示词工程


提示词工程工具与迭代

一、为什么需要工具链?

提示词开发如果只靠手写、复制、粘贴、肉眼观察效果,很快会遇到瓶颈:

  1. 版本混乱:修改了几个版本后分不清哪个版本最好
  2. 效果不可复现:昨天觉得好的版本今天忘了改了什么地方
  3. 缺乏定量评估:凭感觉说「这个版本更好」,没有数据支撑
  4. 团队协作困难:多人编辑提示词,互相覆盖

系统化的提示词工具链是解决这些问题的方法。它包含三个核心环节:版本管理、自动化测试和性能评估。

二、版本管理

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 迭代优化流程

收集反馈 → 分析失败模式 → 修改提示词 → 运行评估 → 部署 → 继续收集

六、推荐工具

七、总结

提示词工程工具链将提示词开发从「凭感觉的手艺活」升级为「有数据支撑的系统工程」。版本管理确保每次变更都可追溯,自动化测试保障质量不退化,性能评估和 A/B 测试为优化方向提供数据支撑,反馈闭环形成持续改进的循环。这些工具和流程的组合应用,是构建高质量、可维护的 LLM 应用的必要条件。

七、A/B 测试与实验管理

7.1 为什么需要 A/B 测试?

提示词的效果因人因场景而异。主观判断不可靠,需要有数据支撑的决策。

7.2 A/B 测试流程

  1. 定义指标:确定衡量提示词效果的关键指标
  2. 创建变体:编写提示词的 A 版本和 B 版本
  3. 分流测试:将流量随机分配给两个版本
  4. 收集数据:收集两个版本的指标数据
  5. 统计分析:判断差异是否统计显著
  6. 采纳优胜者:选择效果更好的版本

7.3 关键指标

八、提示词工程的工作流总结

一个成熟的提示词工程工作流:

  1. 需求分析:明确任务目标和评估标准
  2. 初稿编写:基于最佳实践编写初版提示词
  3. 本地测试:在小样本上测试和调试
  4. 版本管理:将提示词纳入版本控制
  5. 自动化测试:建立回归测试集
  6. A/B 实验:对比不同版本的效果
  7. 生产部署:将优胜版本部署到生产环境
  8. 持续监控:监控生产环境的效果和退化

九、总结

提示词工程不是一蹴而就的,而是一个工程化的持续改进过程。

关键要点回顾:
- 版本管理是提示词工程的基础设施
- 自动化测试确保提示词变更不会引入回归
- A/B 测试用数据驱动决策代替主观判断
- 提示词评估需要综合多维度指标
- 建立从开发到生产到监控的完整工作流

七、A/B 测试与实验管理

7.1 为什么需要 A/B 测试?

提示词的效果因人因场景而异。主观判断不可靠,需要有数据支撑的决策。

7.2 A/B 测试流程

  1. 定义指标:确定衡量提示词效果的关键指标
  2. 创建变体:编写提示词的 A 版本和 B 版本
  3. 分流测试:将流量随机分配给两个版本
  4. 收集数据:收集两个版本的指标数据
  5. 统计分析:判断差异是否统计显著
  6. 采纳优胜者:选择效果更好的版本

7.3 关键指标

八、提示词工程的工作流总结

一个成熟的提示词工程工作流:

  1. 需求分析:明确任务目标和评估标准
  2. 初稿编写:基于最佳实践编写初版提示词
  3. 本地测试:在小样本上测试和调试
  4. 版本管理:将提示词纳入版本控制
  5. 自动化测试:建立回归测试集
  6. A/B 实验:对比不同版本的效果
  7. 生产部署:将优胜版本部署到生产环境
  8. 持续监控:监控生产环境的效果和退化

九、总结

提示词工程不是一蹴而就的,而是一个工程化的持续改进过程。

关键要点回顾:
- 版本管理是提示词工程的基础设施
- 自动化测试确保提示词变更不会引入回归
- A/B 测试用数据驱动决策代替主观判断
- 提示词评估需要综合多维度指标
- 建立从开发到生产到监控的完整工作流

七、A/B 测试与实验管理

7.1 为什么需要 A/B 测试?

提示词的效果因人因场景而异。主观判断不可靠,需要有数据支撑的决策。

7.2 A/B 测试流程

  1. 定义指标:确定衡量提示词效果的关键指标
  2. 创建变体:编写提示词的 A 版本和 B 版本
  3. 分流测试:将流量随机分配给两个版本
  4. 收集数据:收集两个版本的指标数据
  5. 统计分析:判断差异是否统计显著
  6. 采纳优胜者:选择效果更好的版本

7.3 关键指标

八、提示词工程的工作流总结

一个成熟的提示词工程工作流:

  1. 需求分析:明确任务目标和评估标准
  2. 初稿编写:基于最佳实践编写初版提示词
  3. 本地测试:在小样本上测试和调试
  4. 版本管理:将提示词纳入版本控制
  5. 自动化测试:建立回归测试集
  6. A/B 实验:对比不同版本的效果
  7. 生产部署:将优胜版本部署到生产环境
  8. 持续监控:监控生产环境的效果和退化

九、总结

提示词工程不是一蹴而就的,而是一个工程化的持续改进过程。

关键要点回顾:
- 版本管理是提示词工程的基础设施
- 自动化测试确保提示词变更不会引入回归
- A/B 测试用数据驱动决策代替主观判断
- 提示词评估需要综合多维度指标
- 建立从开发到生产到监控的完整工作流

延伸阅读