学习 / 实践
24次全对之后:怎样设计更有区分度的上下文实验?
llm · 工程案例
从Agnes 3.0的24次真实结果出发,排除句式和编号线索,冻结128项相似干扰对照;用Java 8与独立审计验证材料,不把离线准备当模型结果。
浏览统计暂不可用
本文目录 8
上一轮 Agnes 3.0 对照完成了24次真实请求:18个含答案条件返回正确编号,6个无答案条件正确返回 UNKNOWN。这证明那批材料上的表现符合预期,却无法区分“位置确实没影响”和“材料太容易,差异没有显现”。
下一步不应只是把请求数扩大。这篇把“更难”变成可检查的材料设计:让干扰更像目标,保持其他条件可比,先确认实验程序没有替模型泄漏答案。
本篇交付实验设计与可运行的离线工程;新协议计划128次,真实模型请求为0。 没有新的正确率、账单或延迟结果,也不与旧24次样本合并。
固定版本工程 · 完整冻结请求 · Java 8本机验证
1. 全对结果留下了什么疑问?
旧材料中,目标句式与编号前缀和背景存在差异。模型可能通过明显线索找到目标,而不需要解决多个近似项目之间的精确检索。这只是一个待排除的混杂因素,不是已经证明模型用了某种捷径。
如果直接把背景从60行拉到2400行,就同时改变了长度、费用、失败概率和信息密度。即使开始答错,也很难判断原因。新版先保留精确项目名查编号这一任务,单独增加低相似与高相似的成对条件。
2. 高相似干扰具体长什么样?
下面摘出冻结材料S1中的项目与编号;全部是合成实验资料,不是真实业务记录:
| 记录 | 项目名 | 编号 |
|---|---|---|
| 目标 | 松塔北站试验项目 | OM-3642 |
| 一字差 | 松塔南站试验项目 | NA-0653 |
| 词序差 | 北站松塔试验项目 | EL-4135 |
问题仍是“松塔北站试验项目的交接编号是什么”,要求输出编号;资料缺失时输出 UNKNOWN。这些表格行只是完整请求的摘录,不能作为完整实验复现输入。
新版所有记录使用统一句式、八字符项目名、相同格式的随机编号池。高相似背景固定包含六条近似记录:一字差、词序差、不同限定词各两条。低相似版本在相同位置放无关项目名,编号不变。
这使同一对 low/high 只改变六个项目名,长度、编号、目标答案和其他背景保持一致。六条近似记录分散在背景索引 floor((2*k+1)*N/12),其中 k=0..5。它们不会全部堆在开头;60条与240条背景中都只有六条,因此“近似干扰数量”不随长度一起增加。
3. 128项计划怎样组成?
| 维度 | 水平 |
|---|---|
| 题目实例 | 8个项目/编号实例 |
| 背景长度 | 60、240条 |
| 相似度 | low、high |
| 目标条件 | beginning、middle、end、absent |
| 计划请求 | 8 × 2 × 2 × 4 = 128 |
| 模型 | agnes-3.0-flash |
| 参数 | temperature=0,max_tokens=1024 |
含答案的三种条件只移动目标记录,背景不变。无答案条件在中间放一条等长无关记录,避免删除目标后文本突然变短。问题总在记录之后,系统消息也不能携带答案。
八题来自同一个模板家族,是词名和编号实例,不是八种独立任务。128次请求更不是128个独立统计样本。这一设计也没有隔离模型内部注意力机制:随着目标位置移动,它与近似干扰的距离仍然会变。
4. 执行顺序也属于实验设计
沿用上一轮的四条件小块:同题、同长度、同相似度的四个请求构成一个block;low/high两个完整block构成一个pair。整套材料有32块、16对。
为避免四个条件永远按同一顺序执行,使用四行顺序:
B-M-A-E
M-E-B-A
E-A-M-B
A-B-E-MB/M/E/A 对应开头、中间、结尾和缺失。每个长度与相似度层内,四种顺序各出现两次。题序由固定的Java随机种子洗牌,low/high先后顺序按洗牌后的题索引交替。
独立Node审计会重建Java洗牌和请求顺序,而不是只相信执行器写出的“已经随机化”。这个安排能平衡顺序位置,但不保证消除所有服务负载或时间相关因素。
5. 答错、无效响应与缺失分别怎么处理?
收到正常、完整的助手文本后,使用Java trim()再精确比较。它只去掉U+0000到U+0020的首尾字符,与JavaScript trim()并不完全相同;独立评分不能偷偷使用另一种空白规则。
- 返回正确编号或应有的
UNKNOWN:符合预期。 - 返回其他编号、错误拒答、额外解释或格式错误:有效响应中的错误,保留在分母。
- HTTP失败、非
stop完结、角色/型号异常、无法解析或空正文:请求/协议失败,单列。 - 尚未请求的项:未执行,不补成错误答案。
“答成了干扰编号”的归因只匹配这份请求实际出现过的编号。出现一个格式正确的随机编号,不能自动称为受到某条干扰影响。
四份响应在协议上都有效才有完整block;两个相似度block都完整才有完整pair。主要分析进一步要求同一题在所有长度上配对完整,先在题内平均长度,再对题等权平均。部分结果保留为探索性描述,列出排除原因,不能把缺失填成零。
6. 在看结果前,先固定要算什么
对每个题目、长度与相似度,令B、M、E为开头、中间、结尾的精确正确指示值(0或1):
中间位置损失 = (B + E) / 2 - M
相似干扰差值 = 中间位置损失_high - 中间位置损失_low
主指标 = 先平均同题的长度,再平均各题它问的是:高相似干扰是否额外放大了中间位置相对两端的损失? 它不是总体错误率。缺失条件用于检查无证据拒答,不塞进位置差值。
例如B=1、M=0、E=1时,位置损失为1;这只是公式演示,不是实测结果。若low/high都全对,差值为0,仍可能存在天花板效应,不能据此证明位置无关。
协议使用按题聚类的bootstrap与95%区间,预设10个百分点的复验门槛;只有差值达到门槛且区间下界大于0,才描述为本批材料提供支持。八题区间会粗,模板共享也限制外推;预设门槛不等于已经做过统计功效保证。
7. 现在能复现什么?
在 experiments/04-context-position-similar 目录,先跑以下离线命令:
mvn -q compile
mvn -q exec:java "-Dexec.args=--self-test"
mvn -q exec:java "-Dexec.args=--dry-run"
node --test audit.test.mjs
mvn -q exec:java "-Dexec.args=--verify-prepared evidence/20260930-offline-prepared"
node audit.mjs evidence/20260930-offline-prepared --prepared本机使用Oracle JDK 1.8.0_171、Maven 3.6.3、Node 26.8.2,编译通过,2515项Java自检、60项独立Node测试通过;128项材料和源码指纹与原快照一致。相比交付时仅验证Java 8目标字节码,这次补上了真实Java 8运行环境。
测试覆盖答案泄漏、等长配对、顺序重建、预算矩阵、响应异常、缺失处理与评分篡改。它们证明程序按所定义的规则工作,不能证明模型会如何回答。--simulate 使用假Transport并明确标记模拟,不能拿模拟全对结果发布模型结论。
8. 开始线上实验前还缺什么?
已有24次真实请求授权已用于L1v2。新计划的128是代码上限,不是费用授权;上线执行前仍需确认当前账户费率与本轮总金额上限。本次没有读取密钥、没有调用Agnes。
工程要求明确请求预算、已冻结准备目录和服务端进程环境中的密钥;不在博客提供公共调用入口。每次请求完成后至少等20秒,429/401/403立即停止,其他请求或协议失败连续两次停止,不重试。读取超时不等于服务端没有执行;缺失usage保持未知,不能报零费用。
下一步是审定预算后执行冻结计划,保留全部失败与未执行项,再补逐题结果和不确定性。如果需要32次探索档,应另建协议版本并重新冻结材料;不能执行到一半挑选看起来“更有意思”的题目。
这一轮推进的价值是:把“再做难一点”变成可核对的变量、输入、顺序和评分;模型结论要等真实数据,而不是等文章排版完成。
写给未来的自己合上文章前,留下一点自己的理解。
你的私人学习便签,只存在当前浏览器,不会上传或公开。清理浏览器数据会丢失,请导出留存。三种语言共用这篇文章的便签。
继续探索
继续探索
接下来,走哪条路?
- 把答案放在上下文中间,模型就会漏掉吗?一次提前停止的对照试验 →
用 Java 固定 6 组虚构资料,对照开头、中间、末尾与无答案条件;公开 29 次请求、HTTP 429 和不能下的结论。
- LLM 实验(二):先让对照成立,再谈上下文位置 →
用 Java 8 实现成组对照与节流,完成 Agnes 3.0 的24次真实请求;公开逐项评分、服务端用量,并解释全对结果的边界。
依据文章关联与同主题已发布内容整理,不使用随机推荐。