乐于分享
好东西不私藏

AI 写代码这件事(一):三种范式,三种不同的契约

AI 写代码这件事(一):三种范式,三种不同的契约
你用过 Copilot,也试过 Claude Code,感觉完全是两种产品——但又说不清楚哪里不一样。原因是它们根本不是同一种东西。
GitHub Copilot、Cursor、Claude Code、opencode——这四个工具摆在一起,很多人的本能反应是"谁更智能"。这个问题问错了。它们的根本差异不是模型强弱,而是人机交互的契约不同:补全模式下你是主语,AI 是你右手边的预测机器;对话+应用模式下你是编辑,AI 是提交草稿的初级程序员;Agent 模式下你是项目经理,AI 是能自主开终端、读文件、跑测试的执行者。三种契约对你的操作成本、信任程度、审查负担的要求完全不同。理解这个,比追问"哪个 AI 更好"有用得多。

三种范式的关键差异在反馈循环的粒度:补全的循环是每一行;对话的循环是每一个修改;Agent 的循环是整个任务。这意味着你介入的时机和介入的代价完全不同。范式一你全程在场;范式二你是裁判;范式三你是甲方——AI 做完一批工作后才来回报。


为什么搞清楚这个很重要

很多对 AI 编程工具的失望来自范式误用

用补全模式想要 AI 自动重构整个模块——它不行,因为补全只看光标附近的 token,没有全局视角。用 Agent 模式问"这个变量叫什么名字好"——它反应过激,读了十几个文件,花了 30 秒,给你一个你其实自己就能想出来的答案。

工具本身不会告诉你"你现在用错了范式"。所以你需要自己知道。


范式一:补全——你是主语,AI 是你右手边的预测机器

GitHub Copilot 2021 年以技术预览版形式发布(2022 年 6 月正式 GA),这是当时唯一的范式。

它的工作原理接近一个非常强的自动完成:你打几个 token,它预测接下来最可能出现的 token 序列,以幽灵文字(ghost text)呈现在光标后面。按 Tab 接受,继续打字拒绝。

控制流永远在你手里。AI 从不主动修改文件,从不执行命令,从不跨文件做任何事。它只预测。

这个限制同时是它的优势:延迟极低,干扰极小,完全可控。经验丰富的工程师用这个范式,生产效率提升是真实的——AI 帮你补完跑 boilerplate、帮你续写你已经在脑子里规划好的逻辑、帮你省掉去查 API 签名的时间。

补全范式的天花板非常清晰:它不理解你的意图,只预测你的文字。你想要什么,它不知道。它只知道在你已经写下的文字之后,什么最有可能出现。

当前代表工具:

  • GitHub Copilot
    (经典 Tab 补全,这是它的起点和基本盘)
  • Cursor Tab
    (Cursor 也有自己的补全引擎,声称比 Copilot 更激进)

范式二:对话 + 应用——你是编辑,AI 是提交草稿的初级程序员

这是 2023-2024 年的主流形态。你在 Chat 面板描述需求,AI 给你一段修改方案,你选择接受或拒绝,diff 直接应用到文件。

和补全的根本区别:AI 看到了你明确表达的意图,而不只是你打出来的前几行代码。这让它能处理更复杂的任务——重命名一类模式、添加错误处理、改写某个函数的逻辑。

你仍然是每一次修改的裁判。AI 每完成一个动作就提交给你审阅,你不接受它什么都不会变。

这个范式有一个内在限制:修改的作用范围等于 AI 被喂到的 context 的范围。你如果没告诉它相关文件在哪里,它就只在当前文件里折腾。这是后面要讲 Context 这篇文章的核心问题。

当前代表工具:

  • Copilot Chat + inline chat
    (VS Code / JetBrains 里的 /fix/explain
  • Cursor Chat
    (+ @file@codebase 辅助 context)
  • Windsurf Cascade
    (Codeium 出品的 AI IDE,主打这个范式)

范式三:Agent——你是项目经理,AI 是能用工具的执行者

2024 年底到 2025 年,这个范式开始成为主流讨论对象。代表:Claude Code、opencode,以及 Cursor Composer 的 Agent 模式。

关键变化:AI 拿到了工具

它可以读文件(不只是你打开的那个),可以写文件,可以执行 shell 命令,可以运行测试,可以 grep 整个仓库。它有了一套计划-执行-观察的循环。你给它一个任务,它自己想办法完成,途中只在需要你做决策时打断你。

# 你说:> 帮我把所有用 moment.js 的地方换成 dayjs,跑完测试确认没有 regression# Claude Code 会:# 1. grep 找所有 import moment 的文件# 2. 逐文件修改 import 和 API 调用# 3. 运行 npm test# 4. 如果测试失败,看报错,修复,再跑# 5. 告诉你做了什么,通过了什么测试

这不是 AI 变聪明了,是 AI 拿到了工具,有了执行环境。

Agent 范式把你的操作成本从每次修改压缩到了每个任务。代价是:你失去了对中间步骤的实时控制。AI 在跑测试的时候你不知道,在修改文件的时候你不在场。这要求你更信任它,也要求它有好的 permission model——在做高风险操作之前要征得你的同意。

当前代表工具:

  • Claude Code
    (Anthropic,CLI,2025 年 2 月发布)
  • opencode
    (SST 团队,开源 CLI,TUI 界面)
  • Cursor Composer(Agent 模式)
    (在 IDE 内实现了有限的工具调用)
  • GitHub Copilot Agent
    (2025 年加入,Copilot Workspace 的演化)

三种契约的边界

补全
对话 + 应用
Agent
任务粒度
几行
一个功能/一段代码
一个完整子任务
你的介入频率
每行
每次修改
每个任务
AI 看到的 context
光标附近
你指定的 context
它自己发现的
错误代价
极低
低(accept 前无副作用)
中(执行了才知道)
适合场景
快速续写、boilerplate
功能实现、重构
多步骤任务、跨文件改动

没有哪个范式"更好"。Copilot 的补全在写重复性代码时快得像开挂;Claude Code 的 Agent 在处理"把这个旧 API 全面迁移到新版本"时省你两小时。问题从来不是"哪个工具更强",而是"这个任务适合哪种契约"。

理解了这个,下一个问题才有意义:这三种范式里,context 怎么喂,结果天差地别。


延伸阅读

  • Claude Code: Best practices for agentic coding — Anthropic 官方,Agent 范式的设计哲学
  • GitHub Copilot: From autocomplete to agents — Copilot 从补全到 Agent 的演化历史
  • opencode on GitHub — SST 团队的开源 CLI coding agent,代码里能看到 Agent 循环的实现细节