每日 Prompt 技巧

Prompt 评估与优化:用数据衡量 Prompt 质量,告别'感觉还行'

2026-08-11
分析
Claude / GPT-4
Prompt技巧评估优化Prompt工程数据驱动

技巧摘要

Prompt 工程最大的痛点是'凭感觉调'——改了一个词,不知道是变好还是变差。Prompt 评估用量化指标(准确率/忠实度/相关性/延迟)替代主观判断,用 A/B 测试与回归测试保证迭代可控。本文拆解四类评估指标、评估数据集构建、自动化评估流程与常见误区,帮你建立数据驱动的 Prompt 优化闭环。

Prompt 模板

请对以下 Prompt 的输出质量做评估:

## 原 Prompt
{{prompt}}

## 测试输入
{{input}}

## 实际输出
{{output}}

## 期望输出(参考答案)
{{expected}}

## 评估维度(每项 1-5 分)
1. 准确性:输出是否与期望答案一致
2. 忠实性:是否基于给定信息(无幻觉)
3. 完整性:是否覆盖所有要点
4. 简洁性:是否无冗余信息
5. 格式性:是否符合要求格式

## 输出
- 各维度评分与理由
- 总分(满分 25)
- 改进建议(3 条)
- 优化后的 Prompt

为什么需要 Prompt 评估

我们已经讲了 Role PromptingInstruction Engineering模板化。但一个尴尬的现实:

大多数 Prompt 优化靠"感觉"。

开发者:我改了一个词,感觉输出好了一点
同事:怎么证明?
开发者:……凭感觉

这导致三个问题:

  1. 不可复现:今天"感觉好",明天可能"感觉差"
  2. 不可比较:A 版本和 B 版本哪个更好?无数据支撑
  3. 不可回归:改了 A 优化了,但 B 退步了吗?不知道

Prompt 评估的目标:用数据替代感觉,建立可量化的优化闭环。

四类评估指标

1. 准确性(Accuracy)

输出是否与标准答案一致:

问题:2+2=?
输出:4 → 准确
输出:5 → 不准确

适合:有唯一解的任务(数学、事实问答、分类)。

度量

  • 精确匹配(Exact Match)
  • F1 分数(部分匹配)
  • BLEU/ROUGE(文本相似度)

2. 忠实性(Faithfulness)

输出是否基于给定信息,无幻觉:

给定资料:北京人口 2189 万
问题:北京人口多少?
输出:北京人口 2189 万 → 忠实
输出:北京人口 3000 万 → 幻觉

适合:RAG、摘要、翻译。

度量

  • 引用覆盖率(每个事实是否有来源)
  • 幻觉率(无来源的事实占比)

3. 相关性(Relevance)

输出是否回答了问题:

问题:如何优化 SQL?
输出:SQL 是结构化查询语言... → 不相关(答非所问)
输出:优化 SQL 的 5 个方法... → 相关

适合:问答、咨询、建议。

度量

  • 语义相似度(输出与问题的向量相似度)
  • LLM 评分(让 GPT-4 判断 1-5 分)

4. 格式性(Format Compliance)

输出是否符合格式要求:

要求:输出 JSON
输出:{"name":"张三"} → 符合
输出:张三的姓名是张三 → 不符合

适合:程序化处理场景。

度量

  • JSON 可解析率
  • 字段完整率
  • 字段类型正确率

评估数据集构建

数据来源

来源质量数量适合
真实用户问题生产评估
人工标注基准测试
历史日志回归测试
LLM 生成快速起步
公开数据集通用对比

数据集结构

{
  "test_cases": [
    {
      "id": "001",
      "input": "总结这篇文章",
      "context": "(文章内容)",
      "expected": "(期望摘要)",
      "tags": ["摘要", "中文"],
      "difficulty": "easy"
    },
    {
      "id": "002",
      "input": "提取合同金额",
      "context": "(合同文本)",
      "expected": "50000",
      "tags": ["抽取", "数字"],
      "difficulty": "medium"
    }
  ]
}

数据集规模

阶段数量说明
开发期20-50快速迭代
测试期100-200回归测试
上线期500+持续监控

经验:20 个高质量测试用例 > 200 个低质量用例。

评估方法

方法 1:人工评估

最准确但最贵:

评估员看输出 → 打分(1-5)→ 统计平均分

适合:最终验收、主观质量评估。 要求:至少 3 个评估员,计算评分一致性(Cohen's Kappa)。

方法 2:LLM-as-Judge

用 GPT-4 评估输出质量:

你是评估专家。请评估以下输出质量:

问题:{question}
期望输出:{expected}
实际输出:{actual}

评分(1-5):
- 准确性:?
- 忠实性:?
- 相关性:?
理由:?

适合:大规模自动化评估。 注意:LLM 评估有偏差,需与人工评估校准。

方法 3:程序化评估

用代码计算客观指标:

def evaluate(output, expected):
    # 精确匹配
    exact_match = output.strip() == expected.strip()

    # 字符相似度
    similarity = SequenceMatcher(None, output, expected).ratio()

    # 关键词覆盖
    keywords = extract_keywords(expected)
    coverage = sum(1 for k in keywords if k in output) / len(keywords)

    return {
        "exact_match": exact_match,
        "similarity": similarity,
        "coverage": coverage
    }

适合:格式化输出、事实抽取、分类任务。

方法 4:A/B 测试

对比两个 Prompt 版本:

100 个测试用例
→ Prompt A 跑一遍 → 得分 85
→ Prompt B 跑一遍 → 得分 88
→ B 更优,但需检查是否有退步的用例

适合:迭代优化、版本决策。

自动化评估流程

┌──────────────────────────────────────────┐
│           Prompt 评估闭环                 │
│                                          │
│  1. 测试数据集                            │
│       ↓                                  │
│  2. 运行 Prompt(对每个用例)              │
│       ↓                                  │
│  3. 评估(人工/LLM/程序)                  │
│       ↓                                  │
│  4. 生成报告(分数+问题用例)              │
│       ↓                                  │
│  5. 分析瓶颈(哪类用例失败)               │
│       ↓                                  │
│  6. 优化 Prompt                           │
│       ↓                                  │
│  7. 回归测试(确保没退步)                 │
│       ↓                                  │
│  8. 上线(若优于当前版本)                 │
└──────────────────────────────────────────┘

代码示例

import json
from openai import OpenAI

client = OpenAI()

def run_eval(prompt, test_cases):
    results = []
    for case in test_cases:
        # 运行 Prompt
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {"role": "system", "content": prompt},
                {"role": "user", "content": case["input"]}
            ]
        )
        output = response.choices[0].message.content

        # 评估
        score = llm_judge(case["input"], output, case["expected"])
        results.append({
            "id": case["id"],
            "score": score,
            "output": output
        })

    # 汇总
    avg_score = sum(r["score"] for r in results) / len(results)
    failures = [r for r in results if r["score"] < 3]

    return {
        "avg_score": avg_score,
        "total": len(results),
        "failures": len(failures),
        "failure_cases": failures
    }

def llm_judge(question, actual, expected):
    """用 GPT-4 做评估员"""
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "user",
            "content": f"""评估输出质量(1-5 分):
问题:{question}
期望:{expected}
实际:{actual}
只输出数字。"""
        }]
    )
    return int(response.choices[0].message.content.strip())

优化策略

策略 1:分析失败模式

失败用例分类:
- 30%:格式不符 → 加强格式约束
- 25%:信息遗漏 → 增加"必须包含"指令
- 20%:幻觉 → 添加"不确定时说明"
- 15%:冗余 → 添加"简洁"约束
- 10%:其他

按失败模式针对性优化,比盲目调 Prompt 高效 10 倍。

策略 2:迭代优化

v1:平均分 72 → 主要问题:格式
v2(加格式约束):78 → 主要问题:幻觉
v3(加忠实性约束):83 → 主要问题:遗漏
v4(加完整性约束):87 → 收益递减,停止

策略 3:回归测试

每次改 Prompt 后,全量跑测试集,确保:

  • 改进的目标维度提升了
  • 其他维度没退步
  • 没有新的失败用例

策略 4:成本优化

评估还需考虑:

  • 延迟:响应时间是否达标
  • Token 消耗:输入/输出 token 数
  • API 费用:单次调用成本

工具推荐

工具特点适合
LangSmithLangChain 生态,可视化LangChain 用户
Promptflow微软出品,企业级企业级评估
Promptfoo开源 CLI 工具开发者
OpenAI EvalsOpenAI 官方GPT 评估
DeepEvalPython 单元测试风格测试工程师
自建灵活可控定制需求

常见误区

  • 误区 1:评估一次就够了。Prompt 优化是迭代过程,每次改动都需评估。
  • 误区 2:只看平均分。平均分可能掩盖某类用例的退步,需分类分析。
  • 误区 3:测试集太小。20 个用例的统计意义有限,至少 50+。
  • 误区 4:LLM 评估 100% 准确。LLM 评估有偏差,需定期人工校准。
  • 误区 5:只评估准确率。还需考虑延迟、成本、格式等多维度。
  • 误区 6:评估集与训练集混用。评估集必须独立,不能用来"调"Prompt。

与其他 Prompt 技巧的关系

技巧与评估的关系
Instruction Engineering评估"指令遵循度"
Few-shot评估"示例有效性"
Self-Consistency评估"多次采样稳定性"
模板化模板的版本评估

最佳实践:先建立评估集,再做优化,每次改动用数据说话。

进阶技巧

  • 对抗测试:故意构造刁钻输入,测试 Prompt 鲁棒性
  • 多模型评估:同一 Prompt 在 GPT-4/Claude/Gemini 上对比
  • 用户反馈闭环:收集线上"赞/踩",持续优化评估集
  • CI/CD 集成:Prompt 变更自动触发评估,不达标阻止上线
  • A/B 灰度:新 Prompt 灰度 10% 流量,对比效果

小结

Prompt 评估是 Prompt 工程的质量保证环节:从"凭感觉"进化到"数据驱动"。核心要点:

  • 四类指标:准确性、忠实性、相关性、格式性
  • 三种方法:人工、LLM-as-Judge、程序化
  • 闭环流程:测试集 → 运行 → 评估 → 分析 → 优化 → 回归
  • 工具辅助:LangSmith/Promptflow 提升效率

当你发现团队在"争论哪个 Prompt 更好"时,就是启动评估体系的信号。

Prompt 工程进阶系列至此完结。从 Role Prompting 到评估优化,5 篇文章覆盖了从"写好一个 Prompt"到"管理 Prompt 质量"的完整闭环。下一篇我们将开启新的主题系列。

相关推荐

查看更多 →
Prompt通用

Prompt 模板化与复用:把高频指令封装成可复用资产,团队效率提升 10 倍

团队里每个人都在重复写相似的 Prompt:运营写周报、销售写跟进邮件、客服写回复模板。Prompt 模板化把这些高频指令封装成可复用资产,通过变量替换实现一键复用。本文拆解 Prompt 模板的设计原则、变量抽象、版本管理与团队共享机制,帮你把个人经验沉淀为组织能力。

2026-08-10
#Prompt技巧#模板化
Prompt通用

Instruction Engineering 指令工程:写出精准无歧义 Prompt 的 8 条法则

LLM 指令遵循能力再强,也敌不过歧义 Prompt。'写得好一点'、'详细一些'这类模糊指令是输出跑偏的根源。Instruction Engineering 研究如何写出精准、无歧义、可验证的指令。本文拆解指令的六要素、八条法则、常见歧义模式与测试方法,帮你把 Prompt 从'差不多'变成'精确可控'。

2026-08-09
#Prompt技巧#Instruction Engineering
Prompt通用

Role Prompting 角色提示:一句'你是资深XX专家'如何让 LLM 输出质量提升 40%

在 Prompt 开头赋予 LLM 一个角色身份(如'你是资深数据分析师'),能让模型激活相关领域知识、调整语气风格、约束输出范围。本文拆解 Role Prompting 的心理学原理、角色设计四要素、五类经典角色模板,以及角色提示的适用边界与常见误区。

2026-08-08
#Prompt技巧#Role Prompting
Prompt分析

Self-Consistency 自洽性:让模型多次采样投票,把单次推理的准确率提升 20%

CoT 让模型线性推理,但单次推理可能走错路径。Self-Consistency 让模型对同一问题生成多条推理链,再对最终答案投票取多数,用'群体智慧'抵消单次偏差。本文拆解 Self-Consistency 与 CoT、ToT 的差异,给出采样参数调优、投票策略选择与适用场景判断。

2026-08-07
#Prompt技巧#Self-Consistency