文件卡片上下文
wesgine 的 file_card 上下文管理——可重生资源的按需重读机制。
设计动机
长对话中,文件内容会过时:
- 用户可能在对话期间编辑了文件
- Agent 自己的
edit/write工具修改了文件 - 外部进程更新了文件
将文件全文固化在历史消息中既浪费 token 又不准确。
file_card 机制
file_card 是一种可重生引用:
- 首次读取文件时,内容进入上下文
- 后续轮次中,file_card 替代全文
- 当模型需要最新内容时,引擎按需重读
可重生 vs 不可重生
| 资源类型 | 可重生? | 处理方式 |
|---|---|---|
| 本地文件 | ✅ | file_card → 按需重读 |
| URL 内容 | ✅ | 按需重新抓取 |
| 工具输出 | ❌ | 保留在历史中 |
| 用户消息 | ❌ | 保留在历史中 |
与 Context Compression 的关系
Context Compression 压缩历史时:
- file_card 引用被保留(不压缩引用本身)
- 只有当文件内容确实需要时才重读
- 减少压缩后上下文中的冗余文件内容
与 Buffer Overlay 的协作
wescode 的 Buffer Overlay 提供编辑器内存内容。
file_card 重读时,通过 HostEnvironment.Files() 获取:
- 先查 overlay(编辑器未保存的内容)
- 未命中则读磁盘
实现位置
internal/context/ — Assembler + Overlays 管理 file_card 的注入与重读。