Context Filtering(上下文过滤)

多 Agent 系统中,将主对话历史按目标 Agent 的需求裁剪后再传递的机制。核心策略:只保留 user 消息和各 Agent 的最终输出(带 name 标签的 assistant 消息),丢弃工具调用细节。与"上下文隔离"不同——过滤是主动选择传什么,隔离是结构性不共享。

定义

Context Filtering(上下文过滤)是多 Agent 编排系统中的一项核心工程实践:在将消息历史传递给 Sub-Agent 之前,根据目标 Agent 的角色和任务需求,对消息进行筛选和裁剪。

它是更广义的"上下文管理"(Context Management)的子集——后者还包括记忆系统中的信息筛选(第8篇)。

与"上下文隔离"的区别

  • 上下文过滤(Filtering):Supervisor 模式中主动选择传递哪些消息给 Sub-Agent。Agent 共享同一进程,通过代码逻辑控制可见性。
  • 上下文隔离(Isolation):结构性不共享。如 CrewAI 的 Task.output 链——每个 Agent 只看到上一个 Task 的输出,而非完整对话历史。

本系列约定:描述 Supervisor 的 _filter_context 时用"过滤",描述 CrewAI 式结构性隔离时用"隔离",中性泛指时用"管理"。

过滤策略(第7篇实现)

第7篇 _filter_context 的策略:只保留两类消息,丢弃其余:

保留条件示例原因
role == "user"用户的原始任务描述所有 Sub-Agent 都需要理解用户意图
role == "assistant" 且有 name 字段[coder]: 代码已写入...带 name 标签的消息是各 Agent 的最终输出,其他 Agent 需要看到

丢弃的内容包括:工具调用请求(tool_calls)、工具执行结果(tool role)、中间推理过程、system prompt。

target 参数为扩展预留——当 Agent 数量增加到 5-10 个时,可按 target 决定哪些 Agent 的输出对当前 Agent 可见。

工程价值

  • 降低噪音:工具执行日志对审查 Agent 无益,过滤后减少干扰
  • 节省 Token:一次编码任务可能产生数千 token 的工具调用日志,过滤后大幅降低成本
  • 专注度保证:每个 Agent 只看与自己任务相关的信息,提升输出质量

引用本术语的文章