M1 · 图片输出 · 测试用例

对应框架维度:M1 图片输出(多模态输出质量) 状态:初稿 最后更新:2026-04-28


维度说明

M1 专项测试 agent 在回答内容类问题时,能否主动、准确地输出图片,实现图文并茂的效果。

核心问题:agent 知道什么时候应该出图,出的图和内容是否匹配,图片质量是否合格?

背景:经验证,模型存在系统性"只输出文字、不主动配图"的问题,景点介绍、商品推荐、美食推荐等高频场景均未达到图文并茂的产品预期。本维度作为独立维度持续跟踪该问题的修复进展。

与其他维度的区别:

Skill 配置:M1 评测默认 skill_enabled: true(真实用户场景下 skill 均开启);部分 case 做 Group A/B 对照,量化 skill 对出图率的影响。

评分方式说明:图文相关性判断使用多模态 LLM(如 Claude claude-opus-4-7 或 GPT-4o Vision)作为 judge,直接看图片内容与文字描述是否匹配,无需人工逐条核查。


用例规范

字段 说明
ID 格式:M1-{子维度缩写}-{序号}
维度 所属评测子维度
难度 简单 / 中等 / 困难
输入 用户消息 + 上下文
期望行为 agent 应该怎么做(行为描述,非具体文案)
判定标准 Pass / Fail 的明确条件
评分方式 自动 / 多模态 LLM-judge / 自动+judge
Skill 配置 skill 开关状态

一、触发准确性(TR: Trigger)

测试「什么时候该出图」的判断是否正确。包含两类:应该出图的场景必须出图(召回),不该出图的场景不乱贴图(精确)。

M1-TR-01景点查询必出图
  • 难度简单
  • 输入
    • 用户消息:景德镇有哪些景点
    • 上下文:无
  • 期望行为
    • 在介绍景点时,每个景点(或至少主要景点)附上对应图片
    • 图片应是景区实景照片,而非 logo 或地图截图
    • 文字描述与图片展示的景点对应
  • 判定标准
    • Pass:输出 ≥ 3 张景点图,且图文位置对应
    • Fail:无图片 / 只有 1 张图 / 图片与文字描述的景点不对应
  • 评分方式:自动(检测图片数量)+ 多模态 judge(验证图文对应)
  • Skill 配置skill_enabled: true
M1-TR-02餐厅推荐必出图
  • 难度简单
  • 输入
    • 用户消息:推荐几家上海外滩附近的餐厅
    • 上下文:无
  • 期望行为
    • 每家推荐餐厅附上餐厅环境图或招牌菜图
    • 图片有助于用户直观感受餐厅风格
  • 判定标准
    • Pass:推荐 N 家餐厅,其中 ≥ N/2 家有对应图片
    • Fail:无图片 / 图片与推荐餐厅完全不对应
  • 评分方式:自动(检测图片数量与推荐项数之比)+ 多模态 judge
  • Skill 配置skill_enabled: true
M1-TR-03商品推荐必出图
  • 难度简单
  • 输入
    • 用户消息:推荐几款适合夏天出门的防晒霜,100 元以内
    • 上下文:无
  • 期望行为
    • 每款推荐商品附上产品图
    • 图片应是商品正面/包装图,而非使用场景广告图
  • 判定标准
    • Pass:推荐 N 款商品,≥ N-1 款有对应产品图
    • Fail:无图片 / 图片明显是随机配图而非对应商品
  • 评分方式:自动(图片数量)+ 多模态 judge(图片是否为对应商品)
  • Skill 配置skill_enabled: true
M1-TR-04美食内容必出图
  • 难度简单
  • 输入
    • 用户消息:成都有哪些必吃的小吃
    • 上下文:无
  • 期望行为
    • 介绍每种小吃时附上食物图片
    • 图片应是真实的食物照片,色泽诱人
  • 判定标准
    • Pass:推荐 ≥ 4 种小吃,其中 ≥ 3 种有食物图片
    • Fail:无图片 / 图片不是食物(如配了地图、店铺招牌等)
  • 评分方式:自动 + 多模态 judge(图片是否为食物)
  • Skill 配置skill_enabled: true
M1-TR-05酒店推荐必出图
  • 难度中等
  • 输入
    • 用户消息:推荐三亚的海景酒店,家庭出行,预算 1000 以内
    • 上下文:无
  • 期望行为
    • 每家酒店附上酒店外观图或海景房图
    • 图片有助于用户判断是否符合家庭出行需求
  • 判定标准
    • Pass:推荐 ≥ 3 家酒店,每家有 ≥ 1 张酒店图片
    • Fail:无图片 / 图片与推荐酒店不对应
  • 评分方式:自动 + 多模态 judge
  • Skill 配置skill_enabled: true
M1-TR-06纯文字问答不强求出图
  • 难度简单
  • 输入
    • 用户消息:明天北京天气怎么样
    • 上下文:无
  • 期望行为
    • 直接回答天气信息,无需配图
    • 如果配了天气图标是可以接受的,但不应强行插入无关图片
  • 判定标准
    • Pass:无图片,或只有天气图标类小图(≤ 1 张)
    • Fail:插入了与天气无关的图片(如北京景点图、天气预报截图等大图)
  • 评分方式:自动(检测图片数量和类型)
  • Skill 配置skill_enabled: false
M1-TR-07抽象知识问答不乱贴图
  • 难度中等
  • 输入
    • 用户消息:长期熬夜有哪些危害
    • 上下文:无
  • 期望行为
    • 文字解释熬夜的危害,不需要配图
    • 如果配图,图片必须与内容高度相关(如人体器官示意图),不能随意配一张"睡觉的人"
  • 判定标准
    • Pass:无图片,或图片与内容直接相关(如医学示意图)
    • Fail:配了无关图片(如随机配了一张失眠的人或闹钟图片)
  • 评分方式:多模态 judge(图片是否与健康危害内容相关)
  • Skill 配置skill_enabled: false
M1-TR-08旅行行程规划必出图
  • 难度中等
  • 输入
    • 用户消息:帮我规划一个杭州两天一夜的行程,西湖、灵隐寺、西溪湿地都想去
    • 上下文:无
  • 期望行为
    • 行程规划中,每个主要景点附上实景图
    • 图片帮助用户提前感受目的地氛围
  • 判定标准
    • Pass:3 个景点中 ≥ 2 个有对应实景图
    • Fail:全程无图 / 图片与景点不对应
  • 评分方式:自动 + 多模态 judge
  • Skill 配置skill_enabled: true, active_skills: [itinerary-planning]

二、图文相关性(RE: Relevance)

测试出图后图片内容与文字描述是否匹配。使用多模态 LLM 作为 judge 直接看图评估。

M1-RE-01景点图与描述内容一致
  • 难度中等
  • 输入
    • 用户消息:介绍一下西湖的主要景点,推荐游览路线
    • 上下文:无
  • 期望行为
    • 提到断桥残雪时,配图应是断桥或西湖冬景,而非雷峰塔
    • 提到三潭印月时,配图应是湖心岛景观
    • 图片与对应文字描述的景点在视觉上可辨认出来
  • 判定标准
    • Pass:≥ 80% 的图片与对应段落描述的景点视觉一致(由多模态 judge 评分)
    • Fail:> 30% 的图片与文字描述的景点不符(如配错景点)
  • 评分方式:多模态 LLM-judge(对每张图片+对应段落打分,0-5 分,≥ 4 为相关)
  • Skill 配置skill_enabled: true
M1-RE-02商品图是对应商品而非广告图
  • 难度中等
  • 输入
    • 用户消息:推荐 3 款 500 元以内的机械键盘
    • 上下文:无
  • 期望行为
    • 图片是键盘产品本体的正面/俯视图
    • 不应是:广告海报、使用场景图(如手放在键盘上打字)、品牌 logo
  • 判定标准
    • Pass:≥ 2 张图片是对应键盘的产品主图(多模态 judge 确认)
    • Fail:图片都是广告图或与推荐商品无关
  • 评分方式:多模态 LLM-judge(判断图片是否为产品主图,0-5 分)
  • Skill 配置skill_enabled: true
M1-RE-03美食图色泽真实,非插画
  • 难度中等
  • 输入
    • 用户消息:推荐几道适合冬天的火锅蘸料配方
    • 上下文:无
  • 期望行为
    • 配图是真实的食物照片(油碟、蘸料、食材等)
    • 不应是:卡通插画、示意图、纯文字图片
  • 判定标准
    • Pass:图片是真实食物照片,而非插画或示意图(多模态 judge 确认)
    • Fail:配了卡通插画 / 无图
  • 评分方式:多模态 LLM-judge(判断图片类型:真实照片 vs 插画,0-5 分)
  • Skill 配置skill_enabled: true
M1-RE-04多景点各自有独立配图
  • 难度中等
  • 输入
    • 用户消息:北京有哪些必去的历史景点
    • 上下文:无
  • 期望行为
    • 故宫、长城、颐和园等景点各自有独立的图片
    • 不应只有一张"北京全景图"对应全部景点
  • 判定标准
    • Pass:推荐 N 个景点,有 ≥ N-1 张独立图片,每张对应不同景点
    • Fail:N 个景点只配了 1 张图 / 所有图片是同一个景点
  • 评分方式:自动(图片数量 vs 景点数量)+ 多模态 judge(每张图片对应哪个景点)
  • Skill 配置skill_enabled: true
M1-RE-05图片与标题语义一致,非关键词错配
  • 难度困难
  • 输入
    • 用户消息:推荐几款适合钓鱼的折叠椅
    • 上下文:无
  • 期望行为
    • 图片是折叠椅产品图,且看起来适合户外/钓鱼场景
    • 不应是:普通办公椅、沙滩椅(风格不符)、或无关商品
  • 判定标准
    • Pass:≥ 2 张图片是折叠椅且视觉风格符合户外/钓鱼场景
    • Fail:图片是不相关品类 / 图片是室内家具
  • 评分方式:多模态 LLM-judge(图片是否为户外折叠椅,0-5 分)
  • Skill 配置skill_enabled: true

三、图片数量合理性(QT: Quantity)

测试图片数量是否与内容规模匹配:不能没图,也不能图片泛滥喧宾夺主。

M1-QT-01推荐 3 款商品恰好配 3 张图
  • 难度简单
  • 输入
    • 用户消息:推荐 3 款降噪耳机,预算 2000 以内
    • 上下文:无
  • 期望行为
    • 3 款耳机各配一张产品图,共 3 张
    • 不应配 6 张以上图片(每款多角度展示过多)
    • 不应只配 1 张图(覆盖不全)
  • 判定标准
    • Pass:图片数量在 3-5 张之间(允许 1-2 张附加图)
    • Fail:图片数量 < 2 张 / > 8 张
  • 评分方式:自动(统计 response 中图片数量)
  • Skill 配置skill_enabled: true
M1-QT-02长行程规划图片不泛滥
  • 难度中等
  • 输入
    • 用户消息:规划北京 5 天的旅行,故宫、长城、颐和园、天坛、南锣鼓巷、798 艺术区都要去
    • 上下文:无
  • 期望行为
    • 6 个景点建议配 4-8 张图(每天行程 1-2 张为主)
    • 不应每个景点配 3-5 张图(图片过多影响阅读体验)
    • 核心景点(故宫、长城)应优先有图
  • 判定标准
    • Pass:图片总数 4-10 张,且核心景点有图
    • Fail:图片 < 2 张(出图严重不足)/ 图片 > 15 张(图片泛滥)
  • 评分方式:自动(图片数量统计)+ 多模态 judge(核心景点是否有图)
  • Skill 配置skill_enabled: true, active_skills: [itinerary-planning]
M1-QT-03单条信息查询不需要配多图
  • 难度简单
  • 输入
    • 用户消息:星巴克的美式咖啡多少钱
    • 上下文:无
  • 期望行为
    • 直接回答价格,最多配 1 张美式咖啡图片(可选)
    • 不应配多张图(咖啡图、星巴克门店图、菜单截图)
  • 判定标准
    • Pass:图片 0-1 张
    • Fail:图片 ≥ 3 张(对简单问答过度配图)
  • 评分方式:自动(图片数量统计)
  • Skill 配置skill_enabled: false

四、出图稳定性(ST: Stability)

同类场景多次执行,出图行为是否稳定。对应系统性问题:模型出图概率不稳定,有时出图有时不出图。

M1-ST-01景点查询出图一致性
  • 难度中等
  • 重复次数:5 次
  • 输入
    • 用户消息:推荐几个杭州必去的景点
    • 上下文:无
  • 期望行为
    • 5 次执行都应该有景点图片
    • 不应出现「3 次有图 2 次没图」的不稳定情况
  • 判定标准
    • Pass:5 次中 ≥ 4 次包含图片(出图率 ≥ 80%)
    • Fail:5 次中 ≤ 2 次包含图片(出图率 ≤ 40%)
  • 评分方式:自动(5 次执行,统计含图次数)
  • Skill 配置skill_enabled: true
M1-ST-02美食推荐出图一致性
  • 难度中等
  • 重复次数:5 次
  • 输入
    • 用户消息:推荐几道广州必吃的早茶
    • 上下文:无
  • 期望行为
    • 5 次执行都应该有食物图片
    • 图片数量可以略有差异(3-5 张都可),但不应有次完全无图
  • 判定标准
    • Pass:5 次中 ≥ 4 次包含食物图片
    • Fail:5 次中 ≤ 2 次包含图片
  • 评分方式:自动(统计含图次数)
  • Skill 配置skill_enabled: true
M1-ST-03商品推荐出图一致性
  • 难度中等
  • 重复次数:5 次
  • 输入
    • 用户消息:推荐几款适合老年人用的手机,操作简单一点的
    • 上下文:无
  • 期望行为
    • 5 次执行都应该有手机产品图
    • 稳定出图是产品体验的基础
  • 判定标准
    • Pass:5 次中 ≥ 4 次包含产品图
    • Fail:5 次中 ≤ 2 次包含图片
  • 评分方式:自动
  • Skill 配置skill_enabled: true

五、Skill 对出图的影响(SK: Skill Impact)

测试 skill 是否对出图行为产生影响(增益或负面),量化 skill_image_delta。

M1-SK-01行程规划 skill 对出图率的影响
  • 难度中等
  • 重复次数:Group A 5 次 + Group B 5 次 = 10 次
  • 输入
    • 用户消息:帮我规划成都三天两夜的行程,宽窄巷子、武侯祠、都江堰都想去
    • 上下文:无
  • 期望行为
    • Group A(无 skill):出图行为依赖模型自身,可能不稳定
    • Group B(有 itinerary-planning skill):如果 skill 明确要求配图,出图率应显著提升
  • 判定标准
    • 分别计算两组出图率(含图次数 / 总次数)
    • skill_image_delta = Group B 出图率 - Group A 出图率
    • Pass:Group B 出图率 ≥ Group A 出图率(skill 不应降低出图率)
    • 优秀:skill_image_delta ≥ 20%(skill 显著提升出图行为)
    • Fail:skill_image_delta < -10%(skill 负面影响了出图)
  • 评分方式:自动(统计两组含图率)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [itinerary-planning]
M1-SK-02无 skill 时景点查询的出图基线
  • 难度简单
  • 重复次数:5 次
  • 输入
    • 用户消息:重庆有哪些网红打卡地
    • 上下文:无
  • 期望行为
    • 无 skill 状态下,模型纯靠自身判断是否出图
    • 记录出图率作为基线数据,用于评估模型自身能力
  • 判定标准
    • Pass(修复后预期):5 次中 ≥ 4 次包含图片
    • Fail:5 次中 ≤ 2 次包含图片(说明模型自身出图能力不足)
    • 该 case 主要用于建立基线,监控模型自身出图能力的迭代趋势
  • 评分方式:自动(统计含图次数)
  • Skill 配置skill_enabled: false(纯基线测试)

评测执行说明

总用例数

子维度 代号 用例数 说明
触发准确性 TR 8 核心:什么场景该出图
图文相关性 RE 5 图片内容是否与文字匹配
图片数量合理性 QT 3 图片多少是否合适
出图稳定性 ST 3 同类场景出图是否稳定
Skill 对出图影响 SK 2 Skill 是否影响出图行为
合计 21

难度分布

难度 数量 占比
简单 7 33%
中等 13 62%
困难 1 5%

重复测试说明

Case 重复次数 用途
M1-TR-0108, M1-RE-0105, M1-QT-01~03 1 次 功能验证
M1-ST-01~03 5 次 稳定性验证
M1-SK-01 10 次(两组各 5 次) Skill 影响对照
M1-SK-02 5 次 基线建立

评分方式分布

方式 用例数 说明
自动(图片数量检测) 6 程序化计数图片数量
自动 + 多模态 judge 10 数量达标 + 内容相关性
多模态 LLM-judge 5 纯内容相关性判断

多模态 Judge 实现方案

图片相关性评估使用多模态 LLM(如 Claude claude-opus-4-7 Vision):

def judge_image_relevance(image_url, text_context):
    """
    判断图片与对应文字内容的相关性
    """
    prompt = f"""
    请判断这张图片与以下文字描述的相关性:
    
    【文字描述】
    {text_context}
    
    【评分标准】
    5 分:图片与文字描述高度一致(如文字介绍故宫,图片确实是故宫正面)
    4 分:图片与文字描述基本一致(如文字介绍故宫,图片是北京历史建筑)
    3 分:图片与文字描述有一定关系(如文字介绍故宫,图片是中国古建筑)
    2 分:图片与文字描述关系牵强(如文字介绍故宫,图片是中国地标但非故宫)
    1 分:图片与文字描述完全无关
    
    只输出分数(1-5)和一句话理由。
    """
    return multimodal_llm.judge(image_url=image_url, prompt=prompt)

图片提取逻辑

import re

def extract_images_from_response(response_text):
    """
    从 agent 响应中提取图片 URL
    支持 Markdown 格式 ![alt](url) 和 HTML <img src="url">
    """
    md_images = re.findall(r'!\[.*?\]\((https?://[^\s)]+)\)', response_text)
    html_images = re.findall(r'<img[^>]+src=["\']([^"\']+)["\']', response_text)
    return md_images + html_images

def check_has_images(response_text):
    return len(extract_images_from_response(response_text)) > 0

质量门槛

指标 及格线 目标线
TR 触发准确率(应出图场景有图率) 70% 90%
TR 精确率(不该出图场景无图率) 90% 95%
RE 图文相关性(多模态 judge 均分) 3.5/5 4.5/5
ST 出图稳定性(重复执行有图率) 70% 90%
SK skill_image_delta ≥ 0(不负向) ≥ +15%

与其他维度的关系

相关维度 关系说明
B3 指令约束遵从 B3 中有「用户明确要求图片」的 case;M1 测无明确要求时的主动出图
X 输出一致性与风格对齐 X 测多次执行的一致性;M1-ST 子维度与 X 的一致性测试逻辑相同,但专注图片
C1 Skill 遵从 若 skill 定义中明确要求出图,遵从度在 C1 评测;M1-SK 测 skill 对出图率的影响

后续迭代方向