DACS:动态注意力上下文域限(分布式 Agent 上下文扩展)
原文:DACS: Dynamic Attentional Context Scoping
发表:arXiv 2604.07911
翻译整理:2026-06-16
核心问题:上下文污染
在多 Agent 编排系统中,当 N 个并发 Agent 共享编排器的上下文窗口时,会发生上下文污染(Context Pollution):
编排器上下文窗口
┌─────────────────────────────────┐
│ Agent A 的任务状态 ████████ │
│ Agent B 的部分输出 ████ │
│ Agent C 的待处理问题 ██ │
│ Agent A 的部分输出 ██████ │ ← 所有 Agent 的信息混在一起
│ Agent B 的任务状态 ████████ │
│ Agent C 的中间结果 ██████████ │
└─────────────────────────────────┘
问题后果:当编排器需要对 Agent A 做出决策时,Agent B 和 Agent C 的信息也在上下文中,干扰编排器的注意力分配,导致决策质量下降。
量化证据:污染有多严重
论文通过 200 次实验(4 个阶段,统计显著性 p < 0.0001)量化了污染影响:
平坦上下文(基线)vs DACS 准确率对比
| Agent 数量 N | 平坦上下文准确率 | DACS 准确率 | 提升幅度 |
|---|---|---|---|
| N = 3 | 60.0% | ~77.2% | +17.2 pp |
| N = 5 | 未详述 | 未详述 | +20.4 pp |
| N = 10 | 21.0% | ~90.0%+ | +69 pp |
关键数字:N=10 时,不做上下文管理的编排器准确率跌至 21%,几乎等于随机决策。
错误 Agent 污染率
| 系统 | 错误 Agent 污染率 |
|---|---|
| 平坦上下文(基线) | 28% - 57% |
| DACS | 0% - 14% |
「错误 Agent 污染」指的是:编排器在处理 Agent A 时,受到 Agent B/C 信息的干扰,做出与 Agent A 无关或错误的决策。
DACS 解决方案:双模式架构
DACS 引入两种工作模式,根据当前需求动态切换:
模式 1:注册表模式(Registry Mode)
编排器上下文窗口
┌─────────────────────────────────┐
│ Agent A: [摘要,≤200 token] │
│ Agent B: [摘要,≤200 token] │
│ Agent C: [摘要,≤200 token] │
└─────────────────────────────────┘
总计:≤600 token
用途:编排器的日常状态维护。每个 Agent 只保留极简摘要(≤200 token),让编排器知道所有 Agent 的状态全貌,但不被细节淹没。
模式 2:聚焦模式(Focus Mode)
编排器上下文窗口(处理 Agent A 的请求时)
┌─────────────────────────────────┐
│ Agent A: [完整上下文 F(A)] │ ← Agent A 的完整信息
│ │
│ Agent B: [摘要,≤200 token] │ ← 其他 Agent 只有摘要
│ Agent C: [摘要,≤200 token] │
└─────────────────────────────────┘
用途:当 Agent A 向编排器发出请求时,聚焦模式激活。此时 Agent A 的完整上下文进入编排器,而其他 Agent 仍保持摘要形式,上下文隔离得以实现。
核心公式:
聚焦处理 Agent i 时,上下文 = F(Agent_i) + R_{除 i 外所有 Agent 的摘要}
关键特性
1. Agent 触发,而非编排器触发
模式切换由子 Agent 主动发起请求触发,而非编排器轮询:
Agent A 完成子任务,需要编排器决策
↓
Agent A 发出「请求聚焦」信号
↓
编排器切换到聚焦模式,加载 Agent A 完整上下文
↓
编排器做出决策,返回给 Agent A
↓
编排器切换回注册表模式
优势:编排器不需要主动管理哪个 Agent「值得关注」,由 Agent 自己按需请求。
2. 不对称隔离
聚焦模式只对当前请求的 Agent 展开完整上下文,对其他 Agent 保持摘要。这是「不对称」的——不同 Agent 在同一时刻的上下文呈现深度不同。
3. 确定性操作
DACS 的隔离机制是确定性的(Deterministic),不依赖压缩算法或向量检索——只是简单地按模式切换上下文内容。这使其行为可预测、可调试。
与子 Agent 摘要压缩的关系
DACS 与 Anthropic 上下文工程文章中「子 Agent 返回 1,000-2,000 token 摘要」的建议互补而不冲突:
| 机制 | 作用层级 | 解决的问题 |
|---|---|---|
| 子 Agent 摘要压缩(Anthropic) | 子 Agent → 编排器的输出 | 减少子 Agent 输出对编排器上下文的占用 |
| DACS(本文) | 编排器内部的上下文管理 | 防止多 Agent 并发时的上下文相互污染 |
两者结合:子 Agent 返回压缩摘要 + 编排器用 DACS 隔离不同 Agent 的上下文 = 多 Agent 系统的完整上下文管理方案。
实践建议
什么时候需要 DACS(或类似机制)
- 编排器同时管理 3 个以上并发 Agent
- Agent 之间的任务相对独立(不需要实时共享详细信息)
- 系统准确率随 Agent 数量增加而明显下降
简化实现
即使不实现完整的 DACS,也可以用以下简化方案获得类似效果:
def build_orchestrator_context(agents, focus_agent_id):
context = []
for agent in agents:
if agent.id == focus_agent_id:
# 聚焦 Agent:加载完整上下文
context.append(agent.full_context)
else:
# 其他 Agent:只加载摘要(≤200 token)
context.append(agent.summary)
return context核心思想:在需要时才展开完整信息,平时只维护摘要。
核心记忆点
多 Agent 系统的上下文管理不是「把所有 Agent 的信息都塞进来」, 而是「在需要关注哪个 Agent 时,只展开那个 Agent 的上下文」。
N=10 时平坦上下文准确率跌到 21% 这个数字,是设计多 Agent 系统时应该铭记的警示线。