一段没有丢失上下文的 Claude Code 下午
第一次和编程代理一起工作时,最容易遇到的不是代码错误,而是谈话逐渐失去方向。你让代理读取一个文件,接着请它修改函数,然后又补充一个例外情况。几轮之后,代理可能还在执行任务,却已经不清楚最初的目标、哪些决定已经确定,以及哪些地方仍然需要你判断。
把代理当成一位坐在旁边的结对程序员,会更容易建立稳定的工作方式。你负责目标、取舍和验收,代理负责查找资料、解释代码、提出修改并执行重复操作。关键是让每次对话都留下可继续使用的上下文。
§ 先写一张小纸条
开始前,在项目中放一个简短的工作记录,例如 notes/current-task.md。它不需要写成正式文档,只要包括四部分:
- 目标:这次要解决什么问题。
- 现状:已经知道什么,相关文件在哪里。
- 决定:已经确认的行为和暂时不采用的方案。
- 下一步:下一次打开会话时,最先要做什么。
把目标限制在一个可以验证的范围内。例如,不要只写“改进登录功能”,可以写成“登录失败时返回统一错误结构,并为过期令牌增加测试”。范围越清楚,代理越容易保持在同一条线上。
§ 每次只推进一个小闭环
一轮协作最好包含四个动作:先让代理阅读相关代码,再让它复述理解;随后提出方案;你确认后才修改;最后运行测试并记录结果。这个顺序看起来慢,但能减少错误方向上的连续改动。
可以使用这样的请求:“先不要修改。请查看身份验证中间件、现有测试和错误响应类型,告诉我当前流程、可能受影响的文件,以及你还缺少的信息。”等代理回答后,再继续:“根据刚才的范围,只实现统一错误结构。修改前先列出计划。”
当修改完成,要求它说明改了什么、没有改什么、运行了哪些检查。你不必逐行监视代理,但要在每个闭环结束时重新掌握状态。
§ 用检查点保留上下文
对话本身不是可靠的项目记录。每完成一个小功能,就更新工作记录,并做一个容易理解的提交。提交信息可以写成“统一登录失败响应”,而不是“changes”。这样,即使会话中断,也能从项目状态恢复,而不是依赖记忆。
如果对话变长,主动让代理整理交接内容。交接内容应包括当前目标、已经完成的文件、测试结果、未解决的问题,以及下一步建议。把这段内容放进记录文件,再开始新的会话。新会话的第一条请求只需说明:“请阅读工作记录,先复述当前状态,不要修改代码。”
§ 减少隐含信息
初学者常说“按我们之前的讨论继续”。这句话对人类同事也不够明确,对代理更是如此。每次请求都尽量写出输入、限制和验收标准。例如,说明允许修改哪些目录,是否需要保持现有接口,测试命令是什么,以及什么结果算完成。
也要区分事实、猜测和决定。事实可以来自代码或测试;猜测需要验证;决定则是你明确选择的方向。要求代理把这三类内容分开,能避免一个未经确认的猜测在后续对话里变成“既定事实”。
§ 选择稳定的连接方式
如果你使用 Claude Code、Codex 或其他支持 OpenAI SDK 的工具,Vana API 可以作为统一入口。它提供一个 OpenAI 兼容端点,也支持 Anthropic Messages 和 Gemini 原生协议,因此可以沿用工具原本的调用方式。按真实 token 计费、没有月费的方式,也适合把小型练习和偶尔的项目协作放在同一个账户里。
不同任务可以选择不同模型。例如,代码阅读需要清晰的长上下文时,可以试试 Claude Sonnet 5.5;需要快速获得短反馈时,可以试试 Gemini 3.1 Pro。真正重要的仍然是明确范围、保留检查点和亲自验证结果,而不是频繁更换模型。
你可以创建一个 Vana API 账户,把 API 配置到熟悉的开发工具中,然后从一个小任务开始。先建立工作记录,再完成一个可测试的闭环。这样,结对编程就不再依赖一条永远不会中断的长对话,而是依赖一组清楚、可恢复的项目笔记。