# 上下文工程笔记

> **创建**：2026-06-19 · **来源**：多轮对话中关于上下文机制的讨论（2026-06-13 → 06-19）
> **关联**：L1 概念层 → L2 工程层（CE）

---

## 1. 核心概念

### 1.1 Provider（模型服务商）

提供大模型推理服务的厂商，如 Anthropic（Claude）、OpenAI（GPT）、DeepSeek 等。

**两个关键 Token 指标：**

| 指标 | 含义 | 谁在用 |
|------|------|--------|
| `usage.total` | 计费全量（含缓存读写、输出、多轮工具调用） | 账单 |
| `promptTokens` | 实际塞进当次推理 prompt 的 token 数 | **上下文进度条** |

进度条用 `promptTokens` 而非 `usage.total`：后者会重复计算缓存和多次工具调用，"窗口还剩多少"会虚高。

### 1.2 上下文窗口（Context Window）

模型一次能"看到"的最大文本量。每次生成回复时，模型把当前窗口里的**全部内容重新读一遍**，不做任何筛选。

**窗口里有什么：**

```
System Prompt（指令/工具/Skill/记忆文件）
+ 对话历史（所有消息）
+ 工具调用结果（搜索结果/文件内容）
+ 附件（图片/音频转录）
```

### 1.3 上下文压缩（Context Compression）

当对话内容超过窗口上限时，旧内容会被压缩或截断，模型就"记不住"了。压缩过程中可能丢失细节。

---

## 2. 模型如何处理多任务

### 核心机制

- 模型每次重读**全量上下文**
- 但只聚焦**当前这条消息**来回复
- 知道历史聊了什么，但不串台

**类比**：翻群聊记录——看到上面聊了三个话题，但只看**最后一条**来回复。不会把三个话题的内容搅在一起。

### 真正会出问题的场景

| 问题 | 原因 | 解法 |
|------|------|------|
| 上下文太长被压缩 | 多任务的细节挤满窗口 | 长任务用子 session 隔离 |
| 注意力稀释 | 两个复杂任务交叉推进 | 拆到独立会话 |
| 进度被冷落 | Agent 优先回应当前消息 | 主动追问另一个任务的进度 |

### 三条实用规则

| 场景 | 策略 |
|------|------|
| 穿插问轻量问题 | ✅ 完全没问题 |
| 同时推进两个复杂长任务 | ⚠️ 用 `sessions_spawn` 分一个出去 |
| 一个任务中间突然插一个问题 | ✅ 答完自然回到主线 |

---

## 3. 复杂任务的三种策略

| 策略 | 做法 | 优点 | 缺点 |
|------|------|------|------|
| **一次性** | 一条消息把所有需求说清 | 省 token，上下文紧凑 | 中途改需求会重跑；耦合高 |
| **分步迭代** | 做完一步确认一步 | 灵活调整，降低返工 | 窗口累计快，压缩丢信息 |
| **拆子任务** | `sessions_spawn` 分派独立子 session | 上下文隔离最安全，可并行 | 增加编排复杂度 |

### sessions_spawn 适用场景

- 目标、输入、流程、产物和验收标准明确
- 独立闭环，中途不需要频繁确认
- 搜索、整理、写作、分析、批处理等较长任务

**核心理念**：防串台的关键不是"分几条发"，而是**长任务用独立子 session 隔离上下文**。

---

## 4. 上下文工程（CE）全景

### 4.1 CE vs RAG

| | RAG | CE |
|------|------|------|
| 核心问题 | 知识从哪里来？ | 知识怎么摆给模型看？ |
| 动作 | **检索** → 找外部文档 | **设计** → 排版信息结构 |
| 依赖 | 向量数据库、Embedding | Prompt 结构、System Prompt |

两者串起来用：

```
用户提问 → RAG 检索相关文档 → CE 把文档+指令整理成结构化上下文 → LLM 生成回答
         ↑                        ↑
      "找对的"                "摆成对的"
```

**一句话**：RAG 决定模型**知道什么**，CE 决定模型**怎么思考**。

### 4.2 CE 的核心动作：策展（Curation）

上下文工程 ≠ 写一次 prompt。

**它是迭代的**：每轮循环都要做"进/不进"的策展决策——从素材堆（文档/工具/记忆/指令）里挑本轮要用的，组装进上下文窗口。

### 4.3 CE 在 Agent 中的体现

| 场景 | CE 在做什么 |
|------|------------|
| Agent Skill | 把 SKILL.md 的结构化指令注入上下文 |
| 记忆文件（USER.md/MEMORY.md） | 固化偏好和规则到每次推理 |
| System Prompt | 底层的行为准则和工具约束 |

**Agent 的本质** = 按 SKILL.md 规则自动执行 CE——把结构化指令注入上下文，让模型按那个逻辑做事。

---

## 5. 关键结论

1. **模型不筛选上下文** — 每次都是全量重读，但聚焦当前消息
2. **分开发消息 ≠ 分别发上下文** — 每次都是全量历史
3. **防串台靠隔离，不靠分条** — 长任务用 `sessions_spawn` 隔离
4. **CE 不止是写 prompt** — 是持续的策展决策循环
5. **进度条看 `promptTokens`** — 这才反映模型"能看见多少"
