M1 · 图片输出 · 测试用例
对应框架维度:M1 图片输出(多模态输出质量) 状态:初稿 最后更新:2026-04-28
维度说明
M1 专项测试 agent 在回答内容类问题时,能否主动、准确地输出图片,实现图文并茂的效果。
核心问题:agent 知道什么时候应该出图,出的图和内容是否匹配,图片质量是否合格?
背景:经验证,模型存在系统性"只输出文字、不主动配图"的问题,景点介绍、商品推荐、美食推荐等高频场景均未达到图文并茂的产品预期。本维度作为独立维度持续跟踪该问题的修复进展。
与其他维度的区别:
- B3(指令约束遵从)测「用户明确要求图片时是否遵守」
- M1 测「用户没有明确要求图片,但场景决定了应该出图」——这是主动出图能力
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]
- Group A:
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-01 |
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 格式  和 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 对出图率的影响 |
后续迭代方向
- 补充视频类内容是否出图的 case(如旅游 vlog 推荐)
- 补充图片加载失败时的降级处理 case
- 建立图片质量评估(清晰度、是否有水印)的自动化检测
- 从用户反馈中采样「希望有图但没图」的真实 case
- 补充多轮对话中出图一致性的测试(第一轮有图,追问时是否继续有图)
- 建立各场景的出图率基线数据库,用于监控模型迭代趋势