ZH

 


你看到的世界,就是 Context

模型本身没有记忆,每一次调用都是「从零开始」。它之所以「记得」之前发生的事、知道有哪些工具、了解项目规则,全靠每轮都重新拼好的一份Context 喂给它。换句话说:你的世界,就是这次请求里携带的那堆字节。

            ┌──────────── Context ────────────┐
 system  ─▶ │ 角色设定 / CLAUDE.md / 项目规则    │
 tools   ─▶ │ 可用工具的 schema                  │
 history ─▶ │ user / assistant / toolResult …    │
 current ─▶ │ 这一轮用户说的话                   │
            └──────────────────────────────────┘
                         ▼
                  stream(model, ctx)

Context 的几个组成

  • system prompt:角色、风格、安全边界,以及拼进来的 CLAUDE.md / 项目说明。
  • tools:每个工具的名字、描述、参数 schema——模型据此决定调谁、怎么调。
  • messages:历史对话 + 工具结果,按时间顺序排列,是「真相之源」。

Context 是有「预算」的——它必须塞得进 model.contextWindow。这正是后面三件大事的起点:压缩(Compaction)、资源加载(Resource Loader)、技能按需注入(Skills)

每轮都重拼,而不是「追加」

关键直觉:Context 不是一个一直变大的全局对象,而是每一轮按需重新组装的快照。哪些历史保留、哪些被摘要、临时塞进哪些文件内容——都在组装那一刻决定。理解了这一点,后面的压缩与资源注入就都顺理成章了。