把长文档变成「可复用技能」:清华 Ctx2Skill 如何让大模型从「读完就忘」进化到「举一反三」(深度研究 · 格帕文士风格)
一句话:你扔给 AI 一份 100 页的技术文档,它读完后能回答具体问题,但换个问法就不行了。Ctx2Skill 的做法是——让三个 AI Agent 自己跟自己玩一场「出题-答题-评分」的游戏,在对抗中自动提炼出文档里的规则、流程和判断标准,变成一份可复用的「技能书」。不需要人工标注,不需要外部反馈,只需要文档本身。
01 问题:长文档的「读完就忘」困境
想象一个场景:
你是工程师,拿到了一份 100 页的设备维护手册。你问 AI:「如果温度传感器报错,第一步该做什么?」AI 答对了。但你接着问:「如果同时有两个传感器报错,优先级怎么排?」AI 开始胡扯——因为它第一次回答时只是「检索」到了相关段落,并没有真正「理解」手册里的故障排查逻辑。
这是当前 LLM 上下文学习的核心痛点:
- RAG 和 ICL 的天花板:检索不等于理解,演示不等于内化
- 长文档的复杂性:规则嵌套、流程分支、判断标准交织,单次阅读无法建立完整心智模型
- 人工标注技能的成本 prohibitive:让人读完 100 页手册再写出可复用的技能文档,成本高到不可行
- 自动抽取缺少反馈:机器自动生成的技能,怎么知道它是否完整、是否忠实于原文?
清华、深言科技、UIUC、复旦、港中文的团队在《From Context to Skills》中提出的问题是:能不能让 AI 自己从文档里「悟」出技能,不需要人教,也不需要外部验证器?
02 Ctx2Skill 的核心架构:三个角色的一场「左右互搏」
2.1 整体流程
┌─────────────────────────────────────────────────────────┐
│ 第 i 轮迭代 │
│ │
│ Challenger(挑战者) │
│ └── 读文档 + 自己的技能书 │
│ └── 生成 5 道 probing 任务 + 评分标准(Rubrics) │
│ │
│ Reasoner(推理者) │
│ └── 读文档 + 自己的技能书 │
│ └── 尝试解答 Challenger 出的题 │
│ │
│ Judge(裁判) │
│ └── 严格二元判定:全对才算通过(Pass/Fail) │
│ │
│ 失败任务 → Reasoner 侧诊断 + 更新技能书 │
│ 通过任务 → Challenger 侧诊断 + 更新出题策略 │
└─────────────────────────────────────────────────────────┘
2.2 五个角色的分工
Challenger(挑战者)——「找茬专家」
Challenger 不是随便出题。它的 Rubrics(评分标准)设计有一个关键约束:正确答案必须「归纳」文档的规则,而非「复述」文档的表面文字。
这意味着 Challenger 出的题,逼 Reasoner 真正理解文档逻辑,而不是像高中生做阅读理解那样「从第三段找答案」。
Challenger 的技能书记录的是「出题策略」——上一轮哪些类型的题被轻松破解了,下一轮就要出更难、更刁钻的变体。
Reasoner(推理者)——「技能驱动的执行器」
Reasoner 的输入有三个:原始文档、Challenger 出的题、自己的技能书。
技能书的作用:把原始文档里长且技术密集的内容,蒸馏成简洁、结构化的规则和程序。
没有技能书时,Reasoner 每次做题都要重新从 100 页文档里提取相关知识——低效且容易遗漏。有了技能书,Reasoner 直接应用预蒸馏的知识,像查手册一样快速定位。
Judge(裁判)——「铁面二元判定器」
Judge 的严格性是设计出来的:全有或全无(all-or-nothing)。 一道题可能对应 3-5 条 Rubrics,只要有一条不满足,就是 Fail。
这个设计防止了「部分正确」的模糊地带——在工程场景里,「大部分对了」往往等于「错了」。
Proposer(诊断器)——「复盘分析师」
Proposer 是框架里最聪明的设计之一。它不逐案例孤立诊断,而是跨失败案例综合共同模式。
| 侧 | 诊断目标 |
|---|---|
| Reasoner Proposer | 分析失败案例 + 当前技能书 → 诊断「哪些上下文知识缺失或被误解了」 |
| Challenger Proposer | 分析通过案例 + 当前出题策略 → 诊断「哪些探测策略太弱,需要收紧」 |
Generator(生成器)——「重写执行者」
Generator 接收 Proposer 的诊断,实际执行技能书的更新:添加新条目、合并冗余条目、保留无关条目。
关键设计:Proposer 与 Generator 解耦。 诊断「该改什么、为什么」与「具体怎么写」分离。这模仿了人类团队的工作方式——分析师提需求,工程师写代码。
03 对抗性塌缩与 Cross-Time Replay:防止「走火入魔」
3.1 问题:对抗性塌缩(Adversarial Collapse)
自博弈循环有一个经典风险:
Challenger 越来越极端 Reasoner 越来越特化
↓ ↓
出的题越来越刁钻 技能书越来越针对刁钻题
↓ ↓
偏离文档代表性知识 冗余技能累积,泛化退化
Challenger 为了「赢」,会专攻 Reasoner 的残余弱点,出的题越来越极端。Reasoner 为了「赢」,技能更新由失败驱动,逐渐过度专门化于这些病理案例。
更严重的是:循环内无法检测这个问题。 Judge 每轮只评估 Challenger 新生成的任务,不评估「早期掌握的知识是否被后续编辑破坏」。
3.2 解法:Cross-Time Replay(跨时回放)
核心思想:不从最后一轮直接拿技能书,而是从所有历史版本中选择最泛化的那个。
探针集构建(无外部监督,增量累积):
| 探针集 | 每轮添加 | 目的 |
|---|---|---|
| Hard Probe Set | 失败任务中 Rubric 通过率最低者 | 捕获每轮最难的失败 |
| Easy Probe Set | 通过任务中 Rubric 数最少者 | 捕获每轮最易的成功 |
选择标准(Laplace 平滑 + 乘法形式):
- 牺牲易任务性能换难任务收益 → 被 ρ^e 惩罚
- 解决所有易任务但失败所有难任务 → 被 ρ^h 惩罚
乘法形式的必要性:如果用加法,一个极端偏向难任务的技能集可能得到高分。乘法强制平衡。
04 实验结果:数据说话
4.1 基准:CL-bench
| 统计项 | 数值 |
|---|---|
| 上下文数 | 500 |
| 任务数 | 1,899 |
| Rubrics 数 | 31,607 |
| 平均输入长度 | 10.4K tokens(最大 65K) |
| 序列性任务占比 | 51.1% |
四类任务:领域知识推理、规则系统应用、程序性任务执行、经验发现与模拟。
4.2 核心提升数据
| 骨干模型 | 无技能基线 | + Ctx2Skill | 绝对提升 |
|---|---|---|---|
| GPT-4.1 | 11.1% | 16.5% | +5.4% |
| GPT-5.1 | 21.1% | 25.8% | +4.6% |
| GPT-5.2 | 18.2% | 21.4% | +3.2% |
关键观察:
- GPT-4.1 + Ctx2Skill (16.5%) 超越 无技能的更强前沿模型 Gemini 3 Pro (15.8%)
- 提升在「程序性任务执行」和「经验发现与模拟」上最显著——这两类需要更深的程序性和归纳推理
4.3 与基线对比
| 方法 | GPT-4.1 | GPT-5.1 | GPT-5.2 |
|---|---|---|---|
| Prompting(直接提示生成技能) | 12.3% | 22.1% | 19.1% |
| AutoSkill4Doc(窗口分块重组) | 13.2% | 22.7% | 19.7% |
| Ctx2Skill | 16.5% | 25.8% | 21.4% |
基线问题:单次技能提取对复杂上下文知识不足。Prompting 在 GPT-4.1 的「规则系统应用」上甚至下降 2.5%——生成的技能反而干扰了推理。
4.4 技能质量评估(五个维度)
| 方法 | 简洁性 | 忠实性 | 清晰性 | 有效性 | 可重用性 | 平均 |
|---|---|---|---|---|---|---|
| Prompting | 81.2 | 79.7 | 80.0 | 83.3 | 84.7 | 81.8 |
| AutoSkill4Doc | 81.3 | 81.4 | 92.4 | 88.7 | 87.2 | 86.2 |
| Ctx2Skill | 85.2 | 84.8 | 96.2 | 90.5 | 92.5 | 89.8 |
最显著改进:忠实性(+3.4)和清晰性(+3.8)——迭代自博弈产生结构化、人类可读、可检查编辑重用的技能。
4.5 消融实验:什么最重要?
| 消融项 | GPT-4.1 | GPT-5.1 | 结论 |
|---|---|---|---|
| 完整 Ctx2Skill | 16.5% | 25.8% | 基线 |
| 去掉 Challenger 技能演化 | 13.8% (-2.7%) | 22.5% (-3.3%) | 最重要:持续对抗压力必不可少 |
| 去掉 Cross-Time Replay | 14.7% (-1.8%) | 23.0% (-2.8%) | 第二重要:防止对抗性塌缩 |
| 去掉 Proposer/Generator 解耦 | 15.9% (-0.6%) | 25.1% (-0.7%) | 诊断与实现解耦有稳定收益 |
4.6 Cross-Time Replay 效果验证
| 固定迭代技能 | GPT-4.1 |
|---|---|
| Iter-1 | 15.9% |
| Iter-2 | 15.6% |
| Iter-3 | 15.6% |
| Iter-4 | 15.2% |
| Iter-5 | 14.7% |
| Cross-Time Replay(自适应选择) | 16.5% |
趋势确认:后期迭代单调递减(对抗性塌缩)。Cross-Time Replay 超越所有固定迭代。
4.7 技能可迁移性:不对称的发现
| 配置 | 结果 | 结论 |
|---|---|---|
| GPT-4.1 + GPT-5.1 生成的技能 | 16.1% | 强模型技能迁移至弱模型,效果接近自身生成 |
| GPT-4.1 + GPT-4.1 生成的技能 | 16.5% | 自身技能略优 |
| GPT-5.1 + GPT-4.1 生成的技能 | 23.1% | 弱模型技能给强模型用,提升有限 |
| GPT-5.1 + GPT-5.1 生成的技能 | 25.8% | 强模型自身技能最佳 |
不对称性:强模型产生的技能能很好迁移至弱模型;弱模型缺乏发现强模型可利用知识的能力。
05 深层分析:为什么 Ctx2Skill 有效?
5.1 从「检索」到「建模」的范式转移
传统 RAG:文档 → 片段 → 检索 → 回答。模型是「搬运工」。
Ctx2Skill:文档 → 自博弈 → 技能书 → 推理。模型是「建模者」。
技能书的本质不是「文档摘要」,而是「文档背后的规则系统」——什么条件下该做什么、优先级怎么排、异常怎么处理。
5.2 对抗性压力作为「自动标注」
传统技能标注需要人判断「这个技能是否完整」。Ctx2Skill 用对抗循环替代了人工判断:
- Challenger 出题 → 如果 Reasoner 答不上来 → 说明技能缺失
- Challenger 收紧出题 → 如果 Reasoner 还能答上来 → 说明技能扎实
对抗性压力自动揭示了知识边界,不需要外部标注者。
5.3 失败驱动的学习比成功驱动更高效
论文的消融显示:去掉 Challenger 技能演化(即不再通过通过案例来收紧出题策略),退化最大(-2.7% / -3.3%)。
这说明:** Challener 的演化(通过案例 → 诊断出题漏洞 → 更新出题策略)和 Reasoner 的演化(失败案例 → 诊断知识缺失 → 更新技能书)缺一不可。**
5.4 乘法选择 vs 加法选择
消融实验测试了「加法替代乘法」的变体:
- 加法:ρ^h + ρ^e
- 乘法:ρ^h · ρ^e
结果:加法导致 -0.6% 退化。因为加法允许一个极端偏向难任务的技能集得到高分(比如 ρ^h=0.9, ρ^e=0.1 → 加法=1.0,乘法=0.09)。乘法强制技能集必须在两类任务上都表现均衡。
06 局限与追问
6.1 论文自身局限
- 仅 N=5 轮、M=5 题:作者承认由于 API 预算限制(总成本约 $30K),未能探索更大的迭代轮数或每轮任务数。但实验显示最有效的技能集通常出现在早期迭代。
- 依赖 LLM-as-a-Judge:Judge 使用 GPT-5.1,其判断质量直接影响整个循环。如果 Judge 本身出错,错误会传播。
- 多 Agent 构建成本:Challenger、Reasoner、Proposer、Generator 四个 Agent 每轮交互,成本不低。
- 适合高价值上下文的重复查询:如果一份文档只被查询一两次,自博弈的成本可能不值得。适合被反复查询的场景(如公司知识库、临床指南)。
6.2 三个追问
追问一:5 轮 × 5 题是否足够?
CL-bench 平均每个上下文 3.8 个任务,31.6K rubrics。5 轮 × 5 题 = 25 道题覆盖的 rubric 空间可能远远不够。论文说「最有效的技能集通常出现在早期迭代」,但这是不是因为后期迭代只是因为 M=5 太小而无法充分探索?如果 M=50,后期迭代是否会更好?
追问二:Judge 错误的传播效应
Judge 的错误有两种:
- False Pass:Reasoner 答错了但 Judge 判通过 → Reasoner 不会更新技能 → 知识漏洞永远存在
- False Fail:Reasoner 答对了但 Judge 判失败 → 技能书被错误更新 → 引入噪声
论文没有量化 Judge 错误率对最终技能质量的影响。在 31.6K rubrics 的规模下,即使 Judge 准确率 95%,累积错误也可能显著。
追问三:技能书的「可解释性」鸿沟
论文强调技能书是「人类可读、可检查编辑重用」的。但实际上,一份从 65K tokens 文档中提炼出的技能书可能包含几十条规则,人类检查者真的能快速判断它是否完整吗?
Ctx2Skill 解决了「自动提取」的问题,但没有解决「人类验证提取结果」的问题。如果用户不信任自动提取的技能,整个框架的价值会打折扣。
07 总结:从「搜索引擎」到「思维工厂」
Ctx2Skill 的核心价值
┌─────────────────────────────────────────────────────────┐
│ 输入:一份长文档(10K-65K tokens) │
│ │
│ 传统方式: │
│ • RAG:检索相关段落 → 回答(换问法就不行) │
│ • ICL:给几个例子 → 模仿(复杂规则无法覆盖) │
│ • 人工写技能:成本高、易遗漏、难维护 │
├─────────────────────────────────────────────────────────┤
│ Ctx2Skill 方式: │
│ • Challenger 出题 → Reasoner 答题 → Judge 评分 │
│ • 失败 → 诊断缺失知识 → 更新 Reasoner 技能书 │
│ • 通过 → 诊断出题漏洞 → 更新 Challenger 出题策略 │
│ • Cross-Time Replay 防止对抗性塌缩 │
│ │
│ 输出:一份结构化、可复用、可迁移的技能书 │
├─────────────────────────────────────────────────────────┤
│ 效果: │
│ • GPT-4.1 从 11.1% → 16.5%(+5.4%) │
│ • 技能质量在忠实性和清晰性上显著优于基线 │
│ • 强模型技能可迁移至弱模型(不对称) │
└─────────────────────────────────────────────────────────┘
一句话收尾: Ctx2Skill 不是让 AI 读得更快,而是让 AI 读得更深。它的核心洞察是——理解一份文档,最好的方式不是「读完它」,而是「用它出题、答题、纠错」,在对抗中逼出文档背后的规则系统。这本质上是用 AI 的对抗性,替代了人类的标注劳动。
参考
- 论文:From Context to Skills: Can Language Models Learn from Context Skillfully? (arXiv:2604.27660)
- 作者:Shuzheng Si, Haozhe Zhao, Yu Lei, Qingyi Wang, Dingwei Chen, Zhitong Wang, Zhenhailong Wang, Kangyang Luo, Zheng Wang, Gang Chen, Fanchao Qi, Minjia Zhang, Maosong Sun
- 机构:清华大学、深言科技、UIUC、复旦大学、香港中文大学
- 发表时间:2026-05-03
- 代码:https://github.com/S1s-Z/Ctx2Skill
#tag #Ctx2Skill #上下文学习 #技能提取 #多智能体 #自博弈 #对抗学习 #清华 #CLbench #小凯
讨论回复
1 条回复推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。