上下文管理(Context Assembly)
wesgine 的上下文组装系统负责在每次 LLM 调用前构建最优的消息序列。
三大组件
| 组件 | 职责 |
|---|---|
| Assembler | 组装完整上下文(系统提示词 + 历史 + 工具结果) |
| Overlays | 叠加层(记忆、文件卡片、环境信息) |
| CompressPipeline | 上下文超限时的压缩管线 |
上下文组装流程
系统提示词(字节稳定,整个会话不变)
+ SessionState(上一轮 Settlement 产出)
+ 记忆注入(三处自动注入面)
+ 环境信息(L1 宿主感知)
+ 当前轮消息
→ 最终发给 LLM 的 messages 数组
记忆自动注入(三处九臂)
引擎有三处、共 9 个 arm 自动把记忆放到模型面前(INV-MEM-50):
① Eager 系统提示词索引(5 arm)
写入系统提示词,整个会话生命周期有效:
- Constraint(约束)
- Instruction(指令)
- Environment(环境)
- Collective(共识)
- Agent-scoped 条目
② Lazy 当轮 overlay(3 arm)
每轮动态召回:
- 基于当前查询的语义搜索
- Agent 记忆匹配
- 共享通道匹配
③ Cold-start overlay(1 arm)
跨会话摘要重放:
- 将旧会话的关键上下文注入新会话
- 受
CrossSessionDays配置控制(默认 0 = 关闭)
RecallQualityOK 单点
每个 arm 问两半:可见性与质量。
质量收敛成 RecallQualityOK 单点:
Conflicted = true→ 排除stale = true(30+ 天零召回的 L4 条目)→ 排除- GC 豁免的 Kind 恒为惰性
显式检索故意不设此门——memory(search) 回答"我存过什么"。
文件卡片上下文(file_card)
file_card 是可重生资源——按需重读(INV-CTX-16)。
当上下文空间不足时:
- 标记 file_card 为"可丢弃"
- 压缩时优先丢弃
- 需要时重新
read工具读取
上下文压缩
压缩触发
当消息 token 数接近模型 ContextWindow 时触发。
两阶段压缩
- MidRunHandoff(认知交班):Run 中间的压缩,产出 SessionState
- EndOfRunSettlement:Run 结束时的压缩
两者使用相同 SessionState schema(INV-CTX-45)。
机械压缩 fallback
认知交班失败时的确定性回退:
ExtractToolEvidence提取工具调用证据- 注入 Pinned system message
- 不做 LLM 判断
Plan 状态一致性
INV-CTX-56
工具结果 = 持久化真相。
IsError 的 update 不得被 UI 重放——即时拒绝而非事后回滚。
系统提示词稳定性
系统提示词在会话生命周期内字节稳定,保护 prompt caching。
不在会话中间:
- 重载记忆
- 切换工具集
- 重建系统提示词
反模式
| 禁止 | 正确做法 |
|---|---|
| 会话中间变更系统提示词 | 保持字节稳定 |
| 用辅助模型做上下文压缩 | 主模型 + 机械 fallback |
| file_card 永久缓存 | 可重生资源,按需重读 |
| 跳过 RecallQualityOK 检查 | 9 个 arm 全部经过质量门 |
| 显式检索设质量门 | 显式检索不设门 |