C5 · 长上下文性能 · 测试用例

对应框架维度:C5 长上下文性能 状态:初稿 最后更新:2026-04-07


维度说明

C5 测试随着对话轮次增加、上下文变长(4k → 16k → 32k tokens),agent 对不同位置信息的利用能力是否出现显著衰减。

核心测试问题

  1. Lost-in-the-middle:上下文中段的信息是否被遗忘(已知的模型通病)
  2. 早期信息衰减:对话开头的信息在 25 轮后是否还能被利用
  3. 长上下文下的基础能力:意图理解、工具调用是否在长上下文下退化

测试方法论

上下文长度梯度

梯度 Token 数 约等于轮次 说明
4k 5-8 轮 基线(不应有衰减)
16k 15-20 轮 常规使用场景
32k 25-30 轮 压力测试

每个 case 在三个梯度下都跑一遍,绘制性能曲线。


信息注入位置

位置 Token 位置 轮次位置 说明
开头 0-2k 第 1-3 轮 测试早期信息保留
中段 14k-18k(32k 上下文) 第 12-15 轮 Lost-in-the-middle 的典型位置
结尾 30k-32k 第 25-28 轮 最近信息,应该记得

测试方法:在不同位置注入关键信息(如用户偏好、约束条件),在后续轮次测试是否被利用。


Filler 内容设计原则

为了将上下文撑到 32k,需要在关键信息之间插入 filler 对话,但 filler 必须:

  1. 看起来自然:不是纯随机文本,而是合理的对话
  2. 不干扰测试:filler 内容不包含与测试相关的关键信息
  3. 保持场景一致:如果是旅行规划场景,filler 也应该是旅行相关的闲聊

Filler 示例

用户:顺便说一下,我之前去过京都,很喜欢那里的寺庙
Agent:是的,京都的古建筑确实很有特色...
用户:对了,听说京都的枫叶季很美
Agent:是的,每年 11 月是最佳观赏期...
(这段对话撑长度,但不包含后续任务需要的关键信息)

用例规范

字段 说明
ID 格式:C5-{维度缩写}-{序号}
维度 所属评测子维度
上下文长度 4k / 16k / 32k(每个 case 跑三次)
信息注入位置 开头 / 中段 / 结尾
输入 用户消息 + 长对话历史
期望行为 agent 应该如何利用历史信息
判定标准 Pass / Fail 条件
评分方式 自动 / LLM-judge
Skill 配置 必须开启

一、早期信息利用率(EI: Early Information)

上下文很长时,对话早期注入的关键信息是否仍被正确利用。

C5-EI-01 · 早期偏好信息召回


C5-EI-02 · 早期约束信息召回


C5-EI-03 · 早期出发城市信息召回


二、中段信息利用率(MI: Mid-context Information)

上下文中段的信息是否有衰减(lost-in-the-middle 的典型位置)。

C5-MI-01 · 中段偏好信息(32k 专测)


C5-MI-02 · 中段约束信息(32k 专测)


C5-MI-03 · 中段多条信息的聚合召回


三、长上下文意图理解(LI: Long-context Intent)

多轮对话后,对用户当前意图的理解是否仍准确。

C5-LI-01 · 长对话后的简单意图


C5-LI-02 · 长对话后的复杂意图


C5-LI-03 · 长对话后的模糊指代


四、长上下文工具调用(LT: Long-context Tool Use)

上下文很长时,工具参数构造准确率是否下降。

C5-LT-01 · 长对话后的工具参数准确性


C5-LT-02 · 长对话后的工具选择


C5-LT-03 · 长对话后的复杂工具链


五、长上下文约束累积(LC: Long-context Constraints)

测试在长对话中约束是否被累积遗忘。

C5-LC-01 · 早期+中段+结尾三层约束


C5-LC-02 · 约束被中途推翻的识别


六、长上下文下的 Skill 触发(LS: Long-context Skill)

测试长对话后 Skill 触发是否仍然准确。

C5-LS-01 · 长对话后的 Skill 切换


C5-LS-02 · 长对话后 Skill 的反模式遵守


评测执行说明

总用例数

维度 代号 用例数
早期信息利用率 EI 3
中段信息利用率 MI 3
长上下文意图理解 LI 3
长上下文工具调用 LT 2
长上下文约束累积 LC 2
长上下文下的 Skill 触发 LS 2
合计 15

注:原计划 18 条,实际产出 15 条。每条 case 需要在 3 个长度梯度(4k/16k/32k)下各跑一次,实际评测次数 = 15 × 3 = 45 次。

难度分布

难度 数量 占比
简单 0 0%
中等 5 33%
困难 10 67%

长上下文测试本身就有难度,无简单 case。

对话轮次分布

轮次范围 数量 说明
25-30 轮(32k) 15 全部 case 都有 32k 版本
15-20 轮(16k) 15 全部 case 都有 16k 版本
5-8 轮(4k) 15 全部 case 都有 4k 基线版本

每个 case 都是多轮,必须在三个梯度下各跑一次。

上下文构造方式

类型 数量 说明
人工构造 15 100%,精确控制信息注入位置和 filler 内容

C5 必须使用人工构造,因为需要精确控制关键信息在上下文中的位置(开头/中段/结尾)。

Filler 内容设计原则

为了将上下文从 4k 撑到 32k,需要在关键信息之间插入 filler 对话:

要求

  1. 看起来自然:不是随机文本,而是合理的对话
  2. 场景一致:如果是旅行场景,filler 也应该是旅行相关的闲聊
  3. 不干扰测试:filler 不包含与测试相关的关键信息
  4. 长度可控:每轮 filler 约 100-150 tokens,便于精确控制总长度

Filler 示例

用户:顺便问一下,京都的樱花季是几月?
Agent:京都的樱花季通常在 3 月底到 4 月初,每年略有差异...
用户:那枫叶季呢?
Agent:枫叶季是 11 月中旬到 12 月初,岚山是最佳观赏地...
(这段对话撑长度,但不影响后续的机票查询任务)

梯度测试执行方式

每个 case 需要生成 3 个版本:

版本 上下文长度 Filler 量 信息注入位置调整
Short 4k 最少 开头 = 第 1-2 轮,中段 = 第 4-5 轮,结尾 = 第 7-8 轮
Medium 16k 中等 开头 = 第 1-3 轮,中段 = 第 10-12 轮,结尾 = 第 18-20 轮
Long 32k 最多 开头 = 第 1-3 轮,中段 = 第 14-16 轮,结尾 = 第 27-28 轮

对比指标

Lost-in-the-middle 专项测试

所有标注「中段注入」的 case(6 条),重点对比:

示例对比

Case: C5-MI-01(不吃辣的偏好)

版本 A(开头注入,第 2 轮):召回率 95%
版本 B(中段注入,第 14 轮):召回率 70%  ← lost-in-the-middle
版本 C(结尾注入,第 25 轮):召回率 92%

结论:中段信息召回率下降 25%,存在明显的 lost-in-the-middle 问题

评分方式分布

方式 数量 说明
LLM-judge 13 需要评估信息召回和利用情况
自动 1 工具选择检查
自动 + LLM-judge 1 工具参数检查 + 语义判断

后续迭代方向


附:Filler 对话库示例

为方便构造 32k 上下文,提供一些可复用的 filler 对话模板:

旅行场景 filler

用户:这个城市治安怎么样?
Agent:总体来说京都的治安非常好,是日本治安最好的城市之一。游客区域有大量警察巡逻,但仍需注意随身保管贵重物品,尤其是人流密集的热门景区。
用户:那当地货币是什么?
Agent:日本使用日元(JPY)。建议在当地便利店(7-Eleven、Lawson)ATM取款,接受中国银联卡,手续费约每笔110-220日元。市区有专业换汇点,汇率优于机场。
用户:签证好办吗?
Agent:中国公民前往日本需要申请签证(暂无免签政策)。建议出发前4-6周申请,旺季(樱花季、赏枫季)申请量大,处理时间可能延长至10-15个工作日。

购物场景 filler

用户:这个品牌的售后服务怎么样?
Agent:索尼的售后政策是全国联保1年,官网注册可延长至2年。在一线城市有直营售后中心,其他地区可以走快递寄修,通常5-7个工作日处理完毕。
用户:有没有什么优惠活动?
Agent:目前京东618预热活动已经开始,索尼官方旗舰店有满减优惠,部分型号降价约200-400元。另外双十一是全年最低价时机,如果时间允许可以等一等。
用户:支持分期吗?
Agent:支持,京东白条、花呗均可3/6/12期分期,12期免息需要在特定活动期间购买,普通情况每期约有0.6%的手续费。

美食场景 filler

用户:这家餐厅需要预约吗?
Agent:建议提前预约,尤其是周末和法定节假日。可以通过餐厅官方微信公众号或大众点评在线预约,热门餐厅建议提前3-7天预约。
用户:人均消费多少?
Agent:根据大众点评近期评价,人均大约180-220元,包含一道主菜、两道小菜和饮料。如果点招牌菜和酒水,人均可能到250-300元。
用户:有什么招牌菜?
Agent:招牌菜包括:干煸四季豆(经典川味、微辣)、夫妻肺片(凉拌,可选辣度)、水煮鱼(红汤版,辛辣)、口水鸡(冷盘,配有特制酱汁)。建议提前询问服务员哪些菜可以调整辣度。

使用原则

  1. 每段 filler 100-150 tokens
  2. 内容与主任务场景相关但不包含关键约束
  3. 每 3-5 轮 filler 后检查总 token 数,确保精确达到目标长度
  4. Filler 内容应该多样化,避免重复模式被 agent 识别为「测试标记」