随着 AI Agent 使用时间增长,工作区中的规则、主机信息、操作手册、故障记录和长期记忆往往会不断积累。

一开始,所有内容可能只有几个 Markdown 文件。为了让 Agent 每次启动时都能理解环境,这些文件通常会被自动注入上下文。然而,当内容逐渐增加后,一个新的问题随之出现:

Agent 每处理一次普通任务,都要重新读取大量与当前任务无关的技术资料。

例如,处理一个简单文件操作时,模型可能同时接收到:

  • 某台主机的完整硬件资料;
  • 某个远程桌面环境的授权流程;
  • 浏览器调试接口的启动和关闭手册;
  • 网络故障的完整抓包分析;
  • 邮件中继配置;
  • 多台服务器的连接清单;
  • 多年前的历史修复记录。

这些资料都很重要,不能删除,但也没有必要在每轮对话中全部注入。

解决这个问题的一种有效方法,是在工作区中建立一个独立的、按需读取的 context/ 资料库。


一、问题不只是某个文件太长

不少 Agent 工作区会包含类似文件:

AGENTS.md
TOOLS.md
MEMORY.md
USER.md
IDENTITY.md
SOUL.md
HEARTBEAT.md

这些文件通常承担不同职责:

  • AGENTS.md:行为规则和安全边界;
  • TOOLS.md:工具、主机、路径和运行环境;
  • MEMORY.md:长期记忆;
  • USER.md:用户偏好;
  • HEARTBEAT.md:周期任务;
  • IDENTITY.mdSOUL.md:身份和行为风格。

问题在于,详细技术资料往往会逐渐混入这些启动文件。

例如,一个网络问题可能在排查后留下几千字内容,其中包括:

  • 网络接口名称;
  • 子网和网关;
  • 防火墙区域;
  • DHCP 报文;
  • 故障分类;
  • 修复命令;
  • 验证步骤;
  • 禁止操作;
  • 回滚方法。

这些内容确实值得长期保存。如果全部留在 TOOLS.mdMEMORY.md 中,每次启动都会重复占用上下文。

仅仅把内容从 MEMORY.md 移到 TOOLS.md,并没有真正解决问题。它只是把负担从一个自动注入文件转移到了另一个自动注入文件。

真正需要优化的是:

所有启动文件的总注入量,而不是某一个文件的长度。


二、三层知识结构

更适合长期维护的结构,可以分为三个层级。

1. 启动层

每轮对话都应知道的内容,继续保存在自动注入文件中:

AGENTS.md
TOOLS.md
USER.md
MEMORY.md
IDENTITY.md
SOUL.md

这一层只保存:

  • 必须始终遵守的安全规则;
  • 当前最常用的环境入口;
  • 用户长期偏好;
  • 少量长期决策;
  • Context 资料库的使用规则。

启动层应当短、小、稳定。

2. 按需资料层

详细技术资料进入:

context/

这一层保存:

  • 完整主机资料;
  • 服务部署基线;
  • 操作手册;
  • 排错流程;
  • 恢复步骤;
  • 跨主机参考表;
  • 已确认的稳定技术状态。

这些文件不应每轮自动注入,而应在任务需要时由 Agent 主动读取。

3. 历史与证据层

历史过程继续保存在:

memory/YYYY-MM-DD.md
output/

其中:

  • 日期记忆保存某天发生了什么;
  • output/ 保存报告、差异、迁移映射和验证证据。

这三个层级可以概括为:

每轮必须知道的规则 → 启动文件
当前完整技术资料   → context/
历史过程与证据     → memory/ 和 output/

三、Context 目录不能成为新的垃圾桶

简单建立一个目录并不难:

context/

真正困难的是防止它在半年后变成这样:

waydroid-guide.md
waydroid-network-notes.md
waydroid-final.md
waydroid-final-v2.md
new-waydroid-fix.md
full-waydroid-manual.md

如果允许 Agent 自由使用自然语言命名,重复文件几乎不可避免。

因此,context/ 必须被设计成一个有注册表、有永久编号、有唯一主题键的资料库,而不是普通文件夹。


四、推荐的目录结构

一个适合长期使用的结构如下:

context/
├── INDEX.md
├── active/
│   ├── ctx-0001-host-primary-server.md
│   ├── ctx-0002-host-workstation.md
│   ├── ctx-0003-service-agent-runtime.md
│   ├── ctx-0004-runbook-graphical-authorization.md
│   ├── ctx-0005-runbook-container-network.md
│   ├── ctx-0006-runbook-browser-debugging.md
│   ├── ctx-0007-reference-host-connections.md
│   └── ctx-0008-baseline-mail-relay.md
└── archive/

目录职责:

active/

存放当前有效、允许用于实际操作的资料。

archive/

存放已经被替代、但仍需要保留的旧版本。

归档文件不能继续作为当前操作依据。

INDEX.md

作为整个资料库的唯一注册表,负责:

  • 永久编号;
  • 文件路径;
  • 文档类型;
  • 唯一主题键;
  • 别名;
  • 当前状态;
  • 更新时间;
  • 实际验证时间;
  • 继承和替代关系。

五、永久编号比自然语言文件名更可靠

推荐文件名格式:

ctx-NNNN-TYPE-SLUG.md

例如:

ctx-0001-host-primary-server.md
ctx-0002-host-workstation.md
ctx-0003-service-agent-runtime.md
ctx-0004-runbook-graphical-authorization.md

其中:

  • ctx-0001 是永久身份;
  • hostservicerunbook 是固定类型;
  • 后面的 slug 只是人类可读名称。

编号规则应当明确:

  1. 使用四位数字;
  2. 全局统一编号;
  3. 不按类别分别编号;
  4. 编号一旦分配,永久不变;
  5. 归档后也不能复用;
  6. 文件标题变化时,编号不变;
  7. 文件路径原则上保持稳定;
  8. 下一个编号只能由 INDEX.md 分配。

这样即使标题后来发生变化,文档身份仍然稳定。


六、使用唯一的 Canonical Key

文件名只能解决名称重复,不能完全解决语义重复。

例如下面三个文件名不同:

waydroid-network.md
waydroid-firewall.md
waydroid0-recovery.md

但它们可能描述的是同一个问题。

因此,每个文件还需要一个全局唯一的主题键:

---
id: ctx-0005
canonical_key: runbook.workstation.container-network
---

其他例子:

host.primary-server
host.workstation
service.agent-runtime
runbook.workstation.graphical-authorization
runbook.workstation.container-network
runbook.workstation.browser-debugging
reference.host-connections
baseline.mail-relay

规则应当是:

一个 canonical key 只能对应一个 active 权威文件。

创建新文件前,Agent 必须搜索:

  • ID;
  • canonical key;
  • 文件名;
    -标题;
  • aliases;
  • 现有正文。

如果已经存在相同主题,应更新原文档,而不是新建第二份。


七、别名用于防止自然语言重复

同一个技术主题可能有多种叫法。

例如:

container network
virtual interface
trusted firewall zone
android network

这些词可以登记为同一个 context 文件的 aliases。

但别名不能过于模糊。

不推荐:

network
gateway
server
browser
backup

更合适的是:

container network gateway
agent runtime gateway
workstation browser debugging
primary server backup

一个明确 alias 原则上只能指向一个 active 文档。


八、INDEX 是唯一注册表

INDEX.md 不只是目录说明,而应承担数据库注册表的角色。

示例:

# Context Library Index

## Governance

- INDEX.md is the only registry.
- Context IDs are permanent and must never be reused.
- One canonical key may have only one active document.
- Search IDs, keys, aliases and existing content before creating files.
- New document types or subdirectories require explicit approval.
- Archive documents must not be used as current operating procedures.

## Active Registry

| ID | Canonical key | File | Type | Status | Aliases | Last updated | Last verified |
|---|---|---|---|---|---|---|---|
| ctx-0001 | host.primary-server | active/ctx-0001-host-primary-server.md | host | active | main server | 2026-07-24 | 2026-07-24 |
| ctx-0002 | host.workstation | active/ctx-0002-host-workstation.md | host | active | desktop workstation | 2026-07-24 | unknown |

## Archived Registry

| ID | Canonical key | File | Superseded by | Archived |
|---|---|---|---|---|

## Next Available ID

ctx-0009

其中要区分:

  • last_updated:文档最后编辑时间;
  • last_verified:资料最后经过真实环境验证的时间。

修改了文字,不代表重新验证了环境。


九、Context 文档只保存“现在应该怎么做”

Context 文档不应变成第二套时间日志。

不推荐在文末持续追加:

某日修改了什么
某日发现了什么
某日又失败了一次
某日重新测试成功

这些过程应进入日期记忆。

Context 文档只保留:

  • 当前权威状态;
  • 当前操作方法;
  • 当前验证方法;
  • 当前禁止事项;
  • 回滚流程;
  • 历史证据链接。

例如:

## Historical Evidence

- Initial root-cause investigation:
  see `memory/2026-06-14.md`
- Permanent repair validation:
  see `memory/2026-06-15.md`

这样可以避免 context 文件不断膨胀。


十、安全规则不能全部移出启动文件

详细操作流程可以放进 context/,但关键安全边界仍然必须保留在 AGENTS.md

例如某个浏览器自动化手册可能有几十条详细步骤,但下面这些高风险规则应继续自动注入:

不得影响普通浏览器进程
不得使用模糊进程匹配
不得使用 killall
不得删除专用用户目录
不得把调试接口暴露到局域网

原因很简单:

Agent 在读取具体 runbook 之前,就必须已经知道哪些事情绝对不能做。

因此允许安全规则在两个地方重复:

  • AGENTS.md 保存简短强制边界;
  • context runbook 保存完整解释和操作步骤。

这种重复属于有价值的安全冗余。


十一、迁移必须采用“复制、验证、再移除”

把长篇内容从启动文件迁到 context 时,不能直接剪切。

更安全的顺序是:

完整读取来源
→ 保存原始章节副本
→ 生成候选 context 文件
→ 验证候选内容
→ 写入正式 context 文件
→ 在启动文件中保留摘要和精确路径
→ 再移除详细原文
→ 检查 diff

修改重要文件前还应建立可验证的备份。

需要检查:

  • SHA-256;
  • 原始修改时间;
  • 权限;
  • 所有者;
  • 备份路径;
  • 回滚方法。

这样即使迁移中断,也能明确恢复到原始状态。


十二、不要一次迁移所有内容

第一批适合迁入 context 的资料通常包括:

  • 主机完整基线;
  • Agent 运行服务资料;
  • 图形授权流程;
  • 容器或虚拟环境网络手册;
  • 浏览器调试接口手册;
  • 主机连接清单;
  • 邮件中继基线。

不适合一次性迁移的内容包括:

  • 所有日期记忆;
  • 所有历史日志;
  • 所有零散备注;
  • 尚未形成稳定结论的调查;
  • 一次性任务输出。

每个 context 文件都应当具备相对清晰的独立职责。


十三、静态减负不等于运行时减负

文件整理完成后,不能只统计磁盘上的字符数。

必须区分三种数字:

1. 文件系统静态总量

所有候选启动文件在磁盘上的字符数。

2. 实际注入字符数

新会话中真正传给模型的 workspace 文件内容。

3. 完整上下文使用量

还包括:

  • 系统提示词;
    -技能描述;
  • 工具 schema;
  • 会话历史;
    -运行时开销。

因此,最终必须在一个全新会话里检查运行时上下文。

例如:

/context list
/context detail

这些是交互式会话中的 slash commands,不是普通 shell 子命令。


十四、一次真实的运行时验收结果

在完成迁移后,一次新会话的运行时检查显示:

Bootstrap max/file: 20,000 chars
Bootstrap max/total: 60,000 chars

主要文件的实际情况如下:

文件RawInjected
行为规则约 22,900约 22,900
工具入口约 7,200约 7,200
身份定义约 2,000约 2,000
用户偏好约 1,050约 1,050
长期记忆约 1,570约 1,570
人格规则约 1,800约 1,800
周期任务文件约 10,7000

普通新会话实际注入的 workspace 文件总量约为:

36,500 字符

相比迁移前约 67,000 字符的核心静态文件规模,运行时负担明显下降。

更重要的是:

context/INDEX.md
context/active/*.md

没有被自动全部注入。

这说明按需资料库确实生效。


十五、为什么周期任务文件可能显示为 0

运行时检查中,某些文件可能显示:

raw 10,000+
injected 0

这不一定是错误。

有些文件只在特定运行模式中使用,而不会进入普通交互会话。

因此,不能单纯用所有磁盘文件相加来推断实际注入量。

真正可靠的判断依据是:

raw
injected
truncated

而不是静态文件大小。


十六、Context 资料库的主要失败模式

1. 变成新的杂物目录

表现:

new
latest
final
v2
notes
misc

防线:

  • 永久 ID;
  • canonical key;
  • aliases;
  • INDEX 注册;
  • 创建前搜索。

2. 同一事实存在多个权威来源

例如 IP、端口或版本在多个文件中分别维护。

防线:

  • 每类事实指定唯一权威来源;
  • 其他文件只写精确指针;
  • 更新时同步检查交叉引用。

3. INDEX 与文件不同步

表现:

  • 文件存在但没有登记;
  • INDEX 指向不存在文件;
  • 两个文件使用相同 ID。

防线:

  • 修改前记录 INDEX 哈希;
  • 写入前重新确认没有并发变化;
  • 完成后检查 orphan 文件和重复 ID。

4. 历史资料被误认为当前状态

防线:

active/
archive/

只允许 active 文件作为当前操作依据。

5. 过度碎片化

表现:

  • 完成一个任务需要连续读取十几个小文件。

防线:

只有在内容具备独立用途、独立更新周期或独立权威范围时,才拆成新文档。


十七、长期可持续的核心纪律

一套 Context 资料库能否长期使用,最终取决于下面几条纪律:

没有登记,不得创建

所有文件必须先进入 INDEX。

一个主题只能有一个 active 权威文件

相同 canonical key 不允许并存。

安全规则留在启动层

完整方法可以按需读取,但关键禁止事项必须始终可见。

当前方法与历史过程分开

当前方法 → context/
历史过程 → memory/YYYY-MM-DD.md
证据报告 → output/

文件路径尽量稳定

标题可以演进,永久 ID 和路径不应频繁改变。

不默认读取整个 Context 目录

Agent 先查 INDEX,再只读取与当前任务有关的一份或少量文件。


十八、最终效果

建立独立 Context 资料库后,可以同时实现两件原本看似矛盾的目标:

  1. 完整保留详细技术资料;
  2. 降低每轮对话的启动上下文负担。

最终形成的结构是:

启动文件
  保存短小、稳定、每轮必须知道的内容

context/active/
  保存当前完整技术资料和操作手册

context/archive/
  保存被替代但不能删除的旧资料

memory/YYYY-MM-DD.md
  保存历史过程和当日证据

output/
  保存报告、diff、迁移副本和验收结果

这种设计并不是简单地把大文件拆成小文件,而是在工作区中建立了明确的知识生命周期:

事件发生
→ 进入日期记忆
→ 形成稳定结论
→ 晋升为 context 文档
→ 在启动文件中留下简短入口
→ 旧版本进入 archive

当详细资料不再被每轮重复注入,Agent 的启动上下文会更加集中,规则也更容易被正确执行。

与此同时,所有技术细节仍然完整保存在工作区中,需要时可以通过 INDEX 精确找到。

这是一种兼顾信息完整性、运行效率和长期维护性的 AI Agent 知识管理方法。

Leave a Reply

Your email address will not be published. Required fields are marked *