Skip to content

长上下文不是银弹:窗口增大带来成本与错误传播风险;RAG 与缓存往往更稳。

🎯 文章目标

  • 认识窗口、检索与缓存的取舍
  • 给出长上下文应用的最小策略

📚 背景/前置

  • 窗口成本:Attention 复杂度、prefill 时间增长
  • 检索:把知识外置,减少上下文负担
  • 缓存:Prefix/KV 缓存复用,降低 prefill

🔧 核心内容

1) 何时用长上下文

  • 输入天然长:合规文档审阅/长报告
  • 强约束:需要全量上下文作证
  • 否则优先 RAG:更可控、更便宜

2) 策略

  • 压缩:摘要、抽取要点
  • 分块:分段回答 + 汇总
  • 引用:强制引用上下文来源

3) 缓存

  • 前缀共享:系统提示/模板固定时收益高
  • KV 大小:受限于显存,需结合并发调优

💡 实战示例:分段 + 汇总(Node.js)

javascript
async function mapReduce(chunks, ask){
  const partial = await Promise.all(chunks.map(c => ask(`仅基于以下内容回答:\n\${c}`)))
  return ask('综合这些要点,给出 200 字总结:\n' + partial.join('\n'))
}

📊 对比/取舍(速查)

  • 长上下文:简单直接,但成本高且易扩散错误
  • RAG:更可控;需要工程投入(索引/重排/评估)

🧪 踩坑与经验

  • 盲目堆上下文:无引用/无约束导致幻觉
  • 不利用缓存:prefill 成为瓶颈

📎 参考与延伸

  • 长上下文评测与窗口策略
  • RAG 与缓存实践

💭 总结

  • 长上下文≠更好;优先“压缩/分块 + RAG + 缓存”,按需开启长窗口