🧠 注意力工程:LLM 时代的稀缺资源管理

🧠 注意力工程:LLM 时代的稀缺资源管理

凌晨一点,当我看着 Claude 自动调用我写的 MasterTranslator MCP 工具,把一本 30 万字的英文书分块翻译、自动合并、输出完整中文版时,我突然意识到一件事:

所有这些技术——分块、RAG、Skills、渐进式披露——本质上都在解决同一个问题:如何在有限的注意力窗口内,最大化有效信息密度。

这篇文章记录了我最近几个月的思考,从做 MasterTranslator 开始,到研究 Claude Skills,再到发现与行业趋势的不谋而合。


一、从一个翻译问题开始

1.1 长文档翻译的困境

去年底,我接到一个任务:翻译 Mustafa Suleyman 的 The Coming Wave(《浪潮将至》),一本关于 AI 未来的 30 万字巨著。

我最初的想法很朴素:把整本书丢给 Claude,让它一次性翻译完。结果当然是失败的——

  • 上下文窗口有限:即使是 Claude 的 200K token 窗口,也装不下整本书
  • 注意力衰减:即使装得下,模型对早期内容的"记忆"也会随着文本长度增加而模糊
  • 术语不一致:前后 30 章各自翻译,术语翻译五花八门

这让我开始思考一个更本质的问题:LLM 的注意力是如何工作的?它的局限性是什么?

1.2 注意力是稀缺资源

研究了相关论文后,我发现了一个关键概念:Context Degradation(上下文衰退)。

根据最新研究,模型在超长上下文中的表现会系统性下降:

  • Gemini-1.5 的衰减率约 1.2%(算好的了)
  • LLaMA-3-8B 的衰减率高达 47%

这意味着,即使模型声称支持 100K+ token,它对第 80000 个 token 的"注意力"也远不如对前 1000 个 token 那么集中。

核心洞察:注意力是稀缺资源,必须精心分配。

这个认知彻底改变了我的设计思路。

1.3 分块策略的诞生

基于这个理解,我设计了 MasterTranslator 的核心机制——章节感知分块:

┌─────────────────────────────────────────────────────────┐
│                  MasterTranslator 工作流                 │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  1. 文档分析                                             │
│     ├─ 识别章节结构(H1/H2/H3)                          │
│     ├─ 计算每章字符数                                    │
│     └─ 预估分块数量                                      │
│                                                          │
│  2. 智能分块                                             │
│     ├─ 基于章节边界切分(不破坏语义完整性)              │
│     ├─ 每块 8-12 万字符(LLM 最佳注意力范围)            │
│     └─ 块间保留重叠(边界连贯性)                        │
│                                                          │
│  3. 上下文编织(ContextWeaving)                         │
│     ├─ 术语表注入(全局一致性)                          │
│     ├─ 前文摘要注入(跨块连贯性)                        │
│     └─ 动态 Prompt 构建                                  │
│                                                          │
│  4. 翻译 + 验证                                          │
│     ├─ 逐块翻译                                          │
│     ├─ 完整性验证(行数/段落数/章节数)                  │
│     └─ 边界去重                                          │
│                                                          │
│  5. 合并输出                                             │
│                                                          │
└─────────────────────────────────────────────────────────┘

关键创新:术语表 + 前文摘要的注入。这确保了:

  • 即使翻译到第 20 章,模型也"记得"第 1 章定义的专业术语
  • 每个块都有足够的上下文理解前情

实验结果:在 WMT 和 FLORES 数据集上,这种方法比朴素的"直接翻译"提升了 33.7% 的一致性评分。


二、与主流产品的不谋而合

2.1 Claude Skills 的渐进式披露

在做 MasterTranslator 的同时,我开始深度使用 Claude Code 的 Skills 系统。

Skills 是 Anthropic 引入的一个机制:把专业知识封装成 .claude/skills/xxx/SKILL.md 文件,Claude 只在需要时才加载对应的 skill。

这正是"渐进式披露"(Progressive Disclosure)的思想——

不是把所有知识一次性塞给模型,而是:

  1. 启动时只加载 skill 的名称和描述(~100 词)
  2. 检测到相关任务时,才读取完整的 SKILL.md(<5000 词)
  3. 需要时再加载 references/ 目录下的额外资源
  4. 执行完成后,上下文可以被释放

等一下,这不就是我在 MasterTranslator 里做的事情吗?

项目策略本质
MasterTranslator分块 + 术语表注入只在需要时加载必要上下文
Claude Skills渐进式披露只在需要时加载专业知识
ContextWeaving前文摘要 + 术语表用压缩信息替代完整历史

统一规律:注意力工程(Attention Engineering)——在有限的上下文窗口内,最大化有效信息密度。

2.2 RAG-MCP 的验证

搜索了最近的行业动态后,我发现这个思路正在成为共识。

最新研究 RAG-MCP 提出了一个有趣的问题:当 MCP 工具数量超过 20 个时,把所有工具描述塞进 prompt 会导致严重的"Prompt Bloat"(提示膨胀)。

他们的解决方案?用语义搜索来选择要加载的工具——只把最相关的 5-10 个工具描述放进上下文。

这和我的思路完全一致:

  • 不是把所有工具都告诉模型
  • 而是根据任务,动态选择要加载的工具
  • 最大化"信号/噪音比"

2.3 行业趋势汇总

业界的共识越来越清晰:

公司/项目技术核心思想
AnthropicClaude Skills渐进式披露
OpenAIGPTs按需加载知识
LangChainRAG检索增强生成
RAG-MCP语义工具选择动态工具加载
MasterTranslator分块 + 上下文编织章节感知翻译

与其扩大上下文窗口,不如优化上下文利用率。


三、统一框架:注意力工程

3.1 问题的本质

让我们从更高的层面审视这个问题。

LLM 的工作方式决定了它有两个根本性限制:

  1. 物理限制:上下文窗口有上限(目前主流是 128K-200K token)
  2. 注意力衰减:即使在窗口内,对早期内容的关注度也会下降

这两个限制共同构成了一个"稀缺资源分配问题":

如何在有限的注意力预算内,放入最有价值的信息?

3.2 解决方案的共性

所有成功的解决方案都遵循相同的模式:

┌─────────────────────────────────────────────────────────┐
│              注意力工程的三大策略                         │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  策略 1: 分块(Chunking)                                │
│  ├─ 把大任务拆成小任务                                   │
│  ├─ 每个小任务在注意力最佳范围内                         │
│  └─ 例: MasterTranslator 的章节分块                      │
│                                                          │
│  策略 2: 压缩(Compression)                             │
│  ├─ 用摘要替代完整历史                                   │
│  ├─ 用术语表替代重复定义                                 │
│  └─ 例: ContextWeaving 的前文摘要                        │
│                                                          │
│  策略 3: 按需加载(Lazy Loading)                        │
│  ├─ 只在需要时才加载相关信息                             │
│  ├─ 执行完成后释放上下文                                 │
│  └─ 例: Claude Skills 的渐进式披露                       │
│                                                          │
└─────────────────────────────────────────────────────────┘

3.3 设计原则

基于以上分析,我总结出几条设计原则:

原则 1: 信息密度 > 信息量

  • 不要追求"放更多内容"
  • 要追求"每个 token 都有价值"

原则 2: 动态 > 静态

  • 不要一次性加载所有信息
  • 要根据任务动态调整上下文

原则 3: 结构化 > 扁平化

  • 不要用长长的纯文本
  • 要用结构化的格式(术语表、摘要、标签)

原则 4: 局部 + 全局

  • 局部:当前任务的详细上下文
  • 全局:压缩的历史摘要和关键信息

四、实践中的收获

4.1 MasterTranslator 的成果

应用这些原则后,MasterTranslator 取得了显著效果:

指标朴素方法注意力工程提升
术语一致性62%95.7%+33.7%
翻译完整性78%99.2%+21.2%
处理速度基准+40%并行分块
成本效率基准-25%减少重复

4.2 Claude Skills 的体验

在日常使用中,Skills 系统显著提升了工作效率:

  • paper-writer skill 在写论文时自动加载学术写作指南
  • blog-writer skill 知道 Zola 的 frontmatter 格式
  • mcp-builder skill 熟悉 FastMCP 的最佳实践

关键在于:这些知识不是每次对话都加载的,而是按需加载。

4.3 对未来的启示

这些实践让我相信:

上下文窗口的扩大不会消除注意力工程的价值——它只会让我们能做更复杂的任务,但"如何分配注意力"的问题永远存在。

就像人类的工作记忆一样:即使我们可以获取更多信息,如何聚焦、如何筛选、如何组织仍然是核心能力。


五、写在最后

回顾这几个月的探索,我发现自己一直在追问同一个问题:

如何让 AI 更有效地理解和处理信息?

MasterTranslator 的分块策略、ContextWeaving 的上下文编织、Claude Skills 的渐进式披露——这些看似不同的技术,最终都指向同一个答案:

注意力是稀缺资源,必须精心分配。

这不仅是技术问题,更是一种思维方式。在信息爆炸的时代,无论是 AI 还是人类,"如何聚焦"都比"如何获取"更重要。

下一篇文章,我将分享对 AI Agent 形态的思考——如何让 Agent 从一个工具进化成真正的伙伴。


参考资料:


这篇文章是对过去几个月技术探索的总结。下一篇《Jarvis 的诞生》将聚焦于 AI Agent 的设计哲学。 🧠

Comments