用多模态大模型做裁判:Strands Evals 里的图像-文本评估实践

2026-05-21 18 预计阅读时间:1 分钟
来源:aws.amazon.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:12 分钟

你做了一个发票识别模型,它返回"总金额:¥12,580"。数字看着合理,格式也没问题——但你怎么知道它真的从图片里读出来的,而不是"猜"的?

文本评估器回答不了这个问题。它只能比对输出和参考答案的字符串相似度,无法判断模型输出是否忠实于源图像。这正是 Strands Evals 引入 MLLM-as-a-judge(多模态大模型做裁判)的原因:让评估器本身也能"看见"图片,从而对图像到文本的任务做出有依据的评判。

文本评估器的盲区

传统 LLM-as-a-judge 的工作方式是:接收模型输出和参考答案(都是文本),然后判断质量。这在纯文本任务上效果不错,但遇到图像到文本的场景就力不从心:

  • 图片描述(captioning):评估器只看到模型生成的描述文本,无法核实描述是否与图片内容一致。模型说"一只黑猫坐在红色沙发上",评估器无法确认猫的颜色和沙发颜色。
  • 文档信息提取:模型从发票图片中提取出供应商名称和总金额,评估器只能比对提取结果与标注数据的文本匹配度,无法判断模型是否真的从对应位置读到了这些信息。
  • 图表分析:模型声称"Q3 收入同比增长 15%",评估器无法验证这个百分比是否来自图表上的数据点。

核心问题只有一个:评估器缺少图像输入,就没有"事实依据"。它只能做文本层面的形式判断,无法做内容层面的真伪判断。

MLLM-as-a-judge 的思路

解决方案直观:给评估器也配上视觉能力。多模态大模型(MLLM)同时接收图像和文本,就能判断模型输出是否"扎根"于图像内容。

Strands Evals 把这个思路落地为可配置的评估组件。一个多模态评估调用的大致流程:

  1. 源图像模型输出文本一起传给 MLLM 评估器。
  2. 评估器根据预设的评判标准(如"描述是否忠实于图像"、"提取数值是否与图中一致")生成评判结果。
  3. 返回结构化的评分和理由。

与纯文本评估相比,关键差异在于评估器的输入多了一个图像维度。这让评判从"输出看起来对不对"升级为"输出和图片对不对得上"。

用 Strands Evals 搭建多模态评估

下面是一个可运行的示例,展示如何用 Strands SDK 的 Evals 模块配置一个多模态评估器,对图像描述任务做"忠实度"评判。

安装依赖

pip install strands-evals

Strands Evals 支持多种模型后端,多模态评估需要使用具备视觉能力的模型(如 Claude 3.5 Sonnet、GPT-4o 等)。以下示例以 Claude 为后端。

定义评估器并运行

import boto3
from strands_evals.evaluators import MLLMAsJudgeEvaluator
from strands_evals.datasets import EvalDataset, EvalSample

# 1. 准备评估数据集
# 每个 sample 包含:源图像(本地路径或 URL)、模型输出、可选的参考答案
samples = [
    EvalSample(
        image_path="./test_images/invoice_001.png",   # 源图像
        model_output="供应商:华为技术有限公司,总金额:¥12,580.00",
        reference="供应商:华为技术有限公司,总金额:¥12,580.00",  # 可选
        metadata={"task_type": "document_extraction"},
    ),
    EvalSample(
        image_path="./test_images/chart_revenue.png",
        model_output="Q3 收入同比增长 15%,主要增长来自云服务板块",
        reference=None,  # 没有参考答案时,评估器完全依赖图像判断
        metadata={"task_type": "chart_analysis"},
    ),
]

dataset = EvalDataset(name="image_to_text_v1", samples=samples)

# 2. 配置多模态评估器
# judging_prompt 定义评估器要回答的问题
evaluator = MLLMAsJudgeEvaluator(
    model_id="us.anthropic.claude-3-5-sonnet-20241022-v2:0",  # Bedrock 模型 ID
    judging_prompt=(
        "你是一个多模态评估裁判。请同时查看提供的图像和模型的文本输出。\n"
        "判断以下维度,每项给出 1-5 分及简要理由:\n"
        "1. 忠实度(faithfulness):输出内容是否与图像中的实际信息一致?\n"
        "2. 完整性(completeness):输出是否覆盖了图像中的关键信息?\n"
        "3. 准确性(accuracy):输出的具体数值、名称等是否与图中完全匹配?\n"
        "请以 JSON 格式返回:{\"faithfulness\": {\"score\": N, \"reason\": \"...\"}, "
        "\"completeness\": {\"score\": N, \"reason\": \"...\"}, "
        "\"accuracy\": {\"score\": N, \"reason\": \"...\"}}"
    ),
    client=boto3.client("bedrock-runtime", region_name="us-east-1"),
)

# 3. 运行评估
results = evaluator.evaluate(dataset)

# 4. 查看结果
for result in results:
    print(f"--- Sample: {result.sample_id} ---")
    print(f"模型输出: {result.model_output}")
    print(f"评估结果: {result.judgment}")
    print(f"综合分数: {result.aggregate_score}")
    print()

运行前需要确保:

  • AWS 凭证已配置(aws configure 或环境变量)。
  • Bedrock 区域已启用对应模型。
  • 测试图片放在正确路径。

自定义评判维度

不同任务需要不同的评判标准。图表分析侧重数值准确性,图片描述侧重忠实度和细节覆盖,OCR 侧重字符级正确率。通过修改 judging_prompt 就能适配:

# 图表分析专用评判 prompt
chart_evaluator = MLLMAsJudgeEvaluator(
    model_id="us.anthropic.claude-3-5-sonnet-20241022-v2:0",
    judging_prompt=(
        "你是一个图表分析评估裁判。请查看图表图像和模型的分析文本。\n"
        "逐一核实模型提到的每个数据点:\n"
        "- 数值是否与图表中对应位置一致?\n"
        "- 趋势描述(上升/下降/持平)是否与图表走势吻合?\n"
        "- 对比结论(同比/环比百分比)是否可从图表数据推算得出?\n"
        "对每个数据点标注 correct / incorrect / unverifiable,并给出总体可信度评分(1-5)。\n"
        "返回 JSON:{\"data_points\": [{\"claim\": \"...\", \"verdict\": \"...\", \"detail\": \"...\"}], "
        "\"overall_credibility\": N}"
    ),
    client=boto3.client("bedrock-runtime", region_name="us-east-1"),
)

三个典型场景的评估策略

场景一:视觉购物——商品图片描述

电商场景中,模型需要根据商品图片生成描述文本。评估重点:颜色、材质、款式等视觉属性是否准确。

评判 prompt 应要求评估器逐一核对模型提到的每个视觉属性与图片是否匹配,而不是笼统地给一个"描述质量"分数。

场景二:文档理解——发票/合同信息提取

信息提取任务的核心是字段级准确性。评估器需要逐字段比对:供应商名称、日期、金额、税号等,每个字段是否与图中对应区域的内容一致。

没有参考答案时,评估器完全依赖图像做事实判断——这正是 MLLM-as-a-judge 的独特价值。

场景三:图表/截图分析

图表分析的难点在于模型可能"编造"数据点。评估器需要逐条核实模型声称的每个数值和趋势,标注哪些可验证、哪些与图表矛盾。

采纳建议与注意事项

什么时候该用多模态评估器?

  • 你的任务涉及图像到文本的转换(描述、提取、分析)。
  • 你需要判断模型输出是否忠实于图像内容,而非仅判断文本质量。
  • 你没有完整的参考答案,或参考答案本身也可能有错。

什么时候不需要?

  • 纯文本任务(摘要、翻译、问答)——传统 LLM-as-a-judge 足够。
  • 你有精确的标注数据且只需做字符串匹配——规则评估更便宜更快。

需要注意的代价和风险:

维度 考量
成本 多模态评估每次调用都包含图像 token,费用高于纯文本评估。建议先在小样本集上验证评判质量,再扩展到全量。
评估器偏差 MLLM 本身也可能对图像理解出错。对高风险场景,建议用多个模型交叉评估,或辅以规则校验(如金额字段的数值范围检查)。
评判一致性 同一输入多次评估结果可能波动。可通过固定 temperature=0 和明确评分 rubric 来提升稳定性。
隐私 图像可能包含敏感信息(身份证、医疗记录)。确保评估调用走私有端点,不经过公共 API。

快速上手清单:

  1. 从 10-20 个典型样本开始,覆盖正常情况和常见错误模式。
  2. 先用人工标注验证评估器的评判质量——评估器本身也需要评估。
  3. 评判 prompt 越具体越好:要求逐字段/逐属性核实,而非笼统打分。
  4. 把评估纳入 CI 流程,模型更新后自动跑评估集,拦截忠实度下降的情况。

多模态评估器不是银弹,但它填补了文本评估器在视觉任务上的结构性盲区。当你需要回答"模型说的和图片里的是不是同一件事"时,让评估器也能看见图片,是最直接的路径。


相关推荐