
在 3.5.4 中,我们讲了上下文窗口的概念。当对话太长时,早期内容会被挤出窗口,导致 AI「失忆」。
但问题不止于此。即使内容没被挤出,太长的对话也会降低 AI 的表现:
| 问题 | 原因 |
|---|---|
| 回复变慢 | 需要处理更多历史信息 |
| 容易遗漏指令 | 关键信息淹没在大量对话中 |
| 更容易出错 | 历史中的矛盾信息会干扰判断 |
| 难以调试 | 你也很难回溯问题出在哪一轮 |
有时候,开一个新对话比在旧对话里继续挣扎更有效。
这是一个经验值。当对话轮次超过 20 轮(你发一条、AI 回一条算一轮),就应该考虑开新对话了。
为什么是 20 轮?
- 每轮对话平均 500-1000 tokens
- 20 轮 ≈ 10K-20K tokens
- 已经占用了相当比例的上下文窗口
例外情况:如果你用的是大上下文窗口模型(如 Claude 200K),可以适当放宽到 30-40 轮。
当你发现以下情况时,说明上下文管理已经失效:
❌ 你第 1 轮说用 TypeScript,AI 第 18 轮给你 JavaScript
❌ 你第 3 轮说不要用 any,AI 第 15 轮代码里全是 any
❌ 你问"按照之前的格式",AI 问你"什么格式?"
判断方法:如果你发现自己需要反复重申同一个约定(超过 3 次),就该开新对话了。
当你从一个任务转向另一个完全不同的任务时,旧对话的历史反而会干扰。
旧话题:实现用户登录功能
新话题:设计数据库表结构
两个话题关系不大,旧对话中的登录代码会占用上下文空间,
却对设计数据库没有帮助。
经验法则:如果新任务和之前的对话内容没有直接关联,开新对话。
| 信号 | 判断标准 | 行动 |
|---|---|---|
| 轮次过多 | 超过 20 轮 | 考虑开新对话 |
| AI 失忆 | 反复重申约定超过 3 次 | 立即开新对话 |
| 话题转变 | 新任务与历史无关 | 开新对话 |
开新对话不意味着从零开始。你需要把关键信息「搬」到新对话中。
在旧对话结束前,让 AI 帮你总结:
请总结我们这次对话的关键信息,包括:
1. 项目的技术栈和约定
2. 已完成的功能列表
3. 当前的代码结构
4. 遗留的问题或待办事项
请用简洁的 Markdown 格式输出,方便我复制到新对话中。
把 AI 的总结保存下来。可以:
用提取的信息开始新对话:
我要继续开发一个待办清单项目。以下是项目背景:
**技术栈**:
- React 18 + TypeScript
- Tailwind CSS
- Zustand 状态管理
**已完成功能**:
1. 添加任务(带空输入验证)
2. 删除任务(带确认提示)
3. 任务列表展示
**代码结构**:
- src/components/AddTaskForm.tsx
- src/components/TaskList.tsx
- src/components/TaskItem.tsx
- src/store/taskStore.ts
**当前任务**:
实现任务编辑功能——点击任务可以修改标题
请基于以上背景,帮我实现任务编辑功能。
我要继续开发 [项目名称]。以下是项目背景:
## 技术栈
- [技术1]
- [技术2]
- [技术3]
## 编码约定
- [约定1]
- [约定2]
- [约定3]
## 已完成功能
1. [功能1]
2. [功能2]
3. [功能3]
## 代码结构
- [目录/文件1]:[用途]
- [目录/文件2]:[用途]
## 本次任务
[详细描述你要做的事情]
请基于以上背景开始。
继续开发 [项目名称],技术栈:[技术栈]。
已完成:[简要列举]
现在要做:[本次任务]
注意事项:
1. [约定1]
2. [约定2]
我要继续开发一个功能。以下是相关的现有代码:
**现有组件**(TaskList.tsx):
```tsx
// 这里粘贴相关代码片段
现在需要:
[描述你需要 AI 做的事情]
请注意:
有时候旧对话还是更好的选择:
| 情况 | 建议 | 原因 |
|---|---|---|
| 对话还在 10 轮以内 | 继续旧对话 | 历史信息仍然有价值 |
| 正在调试一个 bug | 继续旧对话 | 错误上下文很重要 |
| 功能实现到一半 | 继续旧对话 | 避免重新解释 |
| 需要引用之前的代码 | 继续旧对话 | 代码在历史中可直接引用 |
核心原则:如果旧对话的历史对当前任务仍然有帮助,继续用;如果已经变成负担,果断开新的。
除了技术原因,开新对话还有心理上的好处:
旧对话:
"之前改了这么多轮还没改好,是不是我的问题..."
新对话:
"这是一个全新的开始,这次一定可以"
有时候,一个干净的起点能帮助你更清晰地思考问题。
很多 AI 工具支持给对话命名。善用这个功能:
❌ 默认命名:"New Chat"、"Untitled"
✅ 有意义的命名:"待办清单-添加功能"、"待办清单-删除功能"
好的命名能帮你:
✓ 三个信号:超过 20 轮、AI 反复失忆、话题根本转变
✓ 清新开始的价值:有时比继续修补更高效
✓ 搬家流程:让 AI 总结 → 保存 → 新对话中重建上下文
✓ 启动模板:用结构化的 Prompt 开始新对话,快速重建上下文
✓ 对话命名:给对话起有意义的名字,便于管理
恭喜你完成了 3.5 节「迭代对话的艺术」的学习。
回顾一下你学到了什么:
| 小节 | 核心收获 |
|---|---|
| 3.5.1 | 一次搞定是幻觉,迭代是常态 |
| 3.5.2 | 三阶段模型:看方向 → 改问题 → 磨细节 |
| 3.5.3 | SBI 反馈框架,让 AI 精准理解你的修改需求 |
| 3.5.4 | 四个上下文管理技巧 + 工具级配置 |
| 3.5.5 | 知道何时「搬家」,如何「搬家」 |
一句话总结:迭代不是失败,而是通往成功的必经之路。
下一节(3.6),我们将学习当 AI「不听话」时——输出错误、产生幻觉、代码有 bug——如何诊断问题并修正。