多模态提示(Multimodal Prompting)
通过组合图像、文本等多种信息形式来引导多模态模型完成视觉理解与推理任务的提示技术
用科学的指标体系和对比实验方法量化提示词质量的完整评估方法论
内容摘要
提示词评估(Prompt Evaluation)是一套用来量化"提示词到底好不好用"的科学方法。它把原本凭感觉判断的"这个提示词效果不错"变成可以用数字说话的"这个提示词在 200 个测试样本上准确率 87%、可读性评分 4.2/5"。
提示词评估(Prompt Evaluation)是一套用来量化"提示词到底好不好用"的科学方法。它把原本凭感觉判断的"这个提示词效果不错"变成可以用数字说话的"这个提示词在 200 个测试样本上准确率 87%、可读性评分 4.2/5"。
为什么需要它?因为 LLM 的输出具有非确定性——同一个提示词跑 10 次可能得到 10 个不同的回答。如果只凭人眼看几个案例就做决策,很容易犯"以偏概全"的错误:提示词 A 在你随手测的 3 个问题上表现好,但面对真实用户的 1000 种问法时可能一塌糊涂。
提示词评估在 Agent/AI 系统中扮演"质量检测员"的角色。它贯穿提示词的整个生命周期:开发阶段用评估来选最优版本,上线后用评估来监控性能退化,模型升级时用评估来验证兼容性。没有评估体系的提示词优化就像蒙眼开车——你不知道自己是在前进还是在倒退。
提示词评估由三根支柱撑起,缺一不可:
| 结构 | 作用 | 说明 |
|---|---|---|
| 评估指标(Metrics) | 定义"好"的标准 | 确定用什么数字来衡量提示词质量 |
| 基准数据集(Benchmark Dataset) | 提供"考试题" | 一组代表真实场景的标准化测试样本 |
| 评估方法(Evaluation Method) | 决定"谁来打分" | 自动评估、LLM-as-a-Judge、人工评估三种路径 |
评估指标分两大类:
自动指标——机器算出来的分数,不需要人参与:
人工指标——需要人来判断的分数:
基准数据集就是提示词的"模拟考试卷"。一份合格的数据集要满足:
三种评估路径,适用场景不同:
提示词评估的核心逻辑是"控制变量的对比实验":
其中,LLM-as-a-Judge 是当前最重要的评估方法。它的工作方式是:给一个"评委模型"(通常是 GPT-4 或 Claude 等能力较强的模型)一段结构化的评估提示(Evaluation Prompt),包含评估标准(Rubric)、原始输入、参考答案和待评输出,让评委模型按评分维度逐项打分并给出理由。研究显示,GPT-4 作为评委与人类专家的判断一致性约为 80%,已经接近人类评估者之间的一致性水平。
2025 年的新进展包括:RocketEval(ICLR 2025)通过三阶段框架(生成逐条核查清单 -> 轻量模型逐项评分 -> 汇总计算),让 Mistral-Nemo 级别的小模型也能达到与 GPT-4o 相当的评估质量,Spearman 相关性达到 0.986。G-Eval 让 LLM 先通过链式思考(Chain-of-Thought)生成评估步骤,再按步骤打分,提高了评估的可解释性和一致性。
图解要点:
以下示例展示用 LLM-as-a-Judge 方法评估两个提示词版本的核心逻辑。
基于 openai==1.3.0 验证(截至 2026-03)
from openai import OpenAI
from pydantic import BaseModel
client = OpenAI()
class EvaluationScore(BaseModel):
accuracy: int
completeness: int
readability: int
avg: float
# 两个候选提示词
prompts = {
"v1_基础版": "你是一个客服机器人。用友善的语气回答用户的问题。",
"v2_结构化版": (
"你是一个专业的客服机器人。请:\n"
"1. 准确理解用户的问题\n"
"2. 提供具体的解决方案或信息\n"
"3. 使用清晰、专业的语言\n"
"4. 如果无法完全解决,提供进一步的联系方式"
),
}
# 基准测试样本(实际应有 100+ 条)
test_cases = [
{"input": "请问你们的退货流程是什么?", "reference": "14天无理由退货,登录账户选择商品申请即可"},
{"input": "订单显示已发货但没有物流信息", "reference": "物流信息通常有2-4小时延迟,建议稍后刷新"},
]
# LLM-as-a-Judge 评估函数
def judge_response(user_input: str, reference: str, response: str) -> EvaluationScore:
"""用 LLM 对单条回复进行多维度评分"""
judge_prompt = f"""请评估以下客服回复的质量。
【用户问题】{user_input}
【参考答案】{reference}
【待评回复】{response}
按以下维度打分(1-5 分):
- accuracy:回答是否准确
- completeness:信息是否完整
- readability:表述是否清晰易懂
请只返回 JSON 对象,字段为 accuracy、completeness、readability、avg。"""
completion = client.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=[{"role": "user", "content": judge_prompt}],
response_format=EvaluationScore,
temperature=0, # 评估时设为 0 以提高一致性
)
message = completion.choices[0].message
if not message.parsed:
raise ValueError(f"评委模型未返回结构化结果:{message.refusal}")
return message.parsed
# 对每个提示词版本执行评估
for name, prompt in prompts.items():
scores = []
for case in test_cases:
# 用候选提示词生成回复
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": case["input"]}
],
temperature=0.7
)
output = resp.choices[0].message.content or ""
# LLM-as-a-Judge 打分
score = judge_response(case["input"], case["reference"], output)
scores.append(score)
avg = sum(s.avg for s in scores) / len(scores)
print(f"{name}:平均分 {avg:.2f}/5")
代码对应的核心机制:每个候选提示词在相同的测试样本上生成回复,再由独立的评委模型按统一标准打分。temperature=0 用于评分环节以保证一致性,而生成环节保留 temperature=0.7 以模拟真实使用场景。实际生产中测试样本应扩展到 100+ 条,并加上按类别的分层分析。
| 概念 | 与提示词评估的区别 | 更适合关注的重点 |
|---|---|---|
| 模型评估(Model Evaluation) | 评估的是模型本身的能力(如 MMLU 跑分),不针对特定提示词 | 模型选型、版本对比 |
| 提示词优化(Prompt Optimization) | 优化是"改进提示词"的动作,评估是"衡量改进效果"的度量 | 修改策略、迭代方法 |
| A/B 测试(A/B Testing) | A/B 测试是在线上真实流量中对比效果,评估可以在离线数据集上进行 | 上线后的用户行为数据 |
| 基准测试(Benchmarking) | 基准测试通常用标准数据集评估模型通用能力,提示词评估关注特定提示词在特定任务上的表现 | 通用能力排名 |
核心区别:
| 常见误区 | 正确理解 |
|---|---|
| 一个指标就能评估提示词质量 | 不同指标衡量不同维度。一个提示词可能准确率高但可读性差,必须用多维度指标组合来评估 |
| LLM-as-a-Judge 的评分就是真理 | LLM 评估本身有偏差(长度偏差、风格偏差、自我偏好等),需要定期用人工评估来校准。不同 LLM 对同一输出的打分可能差异明显 |
| 基准数据集越大越好 | 关键是代表性和多样性,不是规模。100 个覆盖各类场景的高质量样本,比 1000 个同质化样本更有价值 |
| 评估指标高 = 用户体验好 | 典型的"代理指标陷阱"。必须同时收集真实用户反馈,评估分数只是参考,不是终审 |
| 人工评估一定比自动评估准 | 人工评估准确但贵、慢、且评估者之间的一致性难保证。最优方案是"自动批量筛选 + 人工关键抽检"的分级组合 |
参考答案:
三层评估指:自动指标(BLEU/ROUGE/准确率)、LLM-as-a-Judge(语义质量评分)、人工抽检(关键样本人工复核)。只用一层不够是因为各层有互补性:自动指标快但浅,只能比较词汇层面的匹配;LLM-as-a-Judge 能理解语义但有系统性偏差;人工评估最准确但无法覆盖全量样本。三层组合才能兼顾效率、深度和准确性。
参考答案:
这是 LLM-as-a-Judge 的"长度偏差"问题。应对方法包括:(1) 在评估提示中明确加入"长度不影响评分,冗余信息应扣分"的指令;(2) 在评估维度中单独加一项"简洁性"指标;(3) 将评估拆为多个独立维度(准确性、完整性、简洁性)分别打分,再加权汇总;(4) 用不同的评委模型(如 GPT-4 和 Claude)分别评估,交叉验证;(5) 对一定比例的样本做人工复核,校准 LLM 评委的偏差。
参考答案:
最可能的原因是"数据分布漂移":3 个月来用户的问法、关注点发生了变化(比如新促销活动带来新类型的咨询),但基准数据集还是旧的,评估覆盖不到新场景。应对方案:(1) 从生产日志中采样最近的用户问题,更新基准数据集;(2) 按时间维度对比评估分数变化趋势;(3) 对用户投诉的具体 case 做根因分析,识别是哪类问题出了问题;(4) 建立持续监控机制,每周自动从线上流量采样评估,设置性能告警阈值。
优先展示同分类且标签更接近的内容,方便继续串联学习。
通过组合图像、文本等多种信息形式来引导多模态模型完成视觉理解与推理任务的提示技术
像管理代码一样管理提示词的版本、环境和发布,保证线上可追溯、可回滚
通过结构化提示词策略引导 LLM 生成高质量、可运行的代码