同事在群里问「AI 编程工具到底选哪个」,附了三款产品的截图。这个问题没有统一答案,因为三款工具干的不是同一件事:一个在你打字时补下一行,一个在侧边栏等你贴报错,一个能自己翻文件、改代码、跑测试。选错的典型症状是用了两周,得出「这东西没什么用」的结论。
三类工具的分工,比品牌差异更值得先看
补全型嵌在编辑器里,输入时给灰字提示,按 Tab 接受。它的价值集中在重复结构:写接口定义、补 switch 分支、照着上一个函数写下一个。干扰也从这里来——提示频繁弹出,思路被打断的人会嫌它烦。
对话型在侧栏,你贴代码、贴报错、问「这段在干什么」。它最强的地方是解释和排错,因为它一次能看到你给的全部上下文,不必猜你的光标停在哪。
Agent 型能自己读多个文件、改代码、执行命令、看测试结果再改。它处理的是「一个需要跨文件改动的任务」,比如把某个函数的所有调用点换掉、给一个模块补测试。代价是每一步都可能走偏,而走偏之后留下的 diff 比不做事更难收拾。
语言和项目规模,决定你该用哪一档
| 语言 / 项目规模 | 适合的工具形态 | 代价 |
|---|---|---|
| 脚本、单文件工具(Python、Shell、SQL) | 补全型,或者直接开一个对话窗口 | 模型记的库版本可能比你装的旧,写法能跑但已经过时 |
| 中型业务项目(TS、Java、Go,几万行) | 补全加对话的组合,日常写码靠前者,排错靠后者 | 跨文件改动仍要自己拼上下文,工具只看到你贴进去的部分 |
| 大型或遗留项目(多模块、老框架、缺文档) | Agent 型,能索引仓库、读多文件、跑测试 | 单次改动正确率有限,必须小步提交、逐步验证;按 token 计费,一次重构成本不低 |
| 冷门语言、自研 DSL、嵌入式 C | 通用对话加手动贴上下文,别指望补全 | 训练数据少,它会自信地编出不存在的 API 和宏 |
最后一行最容易被忽略。宣传页上的「支持三十种语言」通常指语法高亮和基础补全,不等于模型见过足够多的真实代码。冷门语言的实际体验,只能用你自己的仓库测,别人的评测帮不上忙。
项目越大,难的不是生成,是给对上下文
小项目可以把整个文件贴进去,模型看到的就是全部。项目一大,贴不进去,于是要么靠工具自己检索相关文件,要么靠你手动挑几个文件递过去。前者取决于索引做得好不好,后者取决于你对代码结构的熟悉程度——说不清哪个模块负责什么,就很难把对的文件找出来。
这也解释了同一款工具为什么在不同团队里评价差很多。目录清楚、命名规范、测试齐全的仓库,Agent 型能跑得很顺;一个文件里塞了三千行巨型类的仓库,它读十遍也抓不到重点。上下文窗口再大也解决不了这个问题,窗口的实际限制可以对照上下文窗口为什么会让长文档记不住。
一个被低估的指标:它能不能讲清旧代码
实际工作里,读别人写的代码比写新代码花的时间多。所以测一款工具,别只测「给我写个函数」,要测「这段代码为什么这么写」。解释得清楚,说明它抓住了变量之间的关系、控制流的走向、异常在哪被吞掉;解释得含糊,通常说明它只是按字面复述了一遍。
解释能力还有一个副作用:它讲错的地方,往往正是这段代码最绕的地方。顺着它的错误能找到自己也没想明白的部分,这比多要十段代码有用。
三步实测,比看榜单可靠
拿项目里一段真实代码让它解释,看它能不能说清输入从哪来、异常怎么处理。拿你上周卡了两小时的那个报错让它排,看它给的是通用建议还是针对这条堆栈的判断。最后看它会不会给出「看起来对但跑不起来」的代码——这类输出比拒绝回答更浪费时间,因为要花时间才能发现。
三步都过,再谈价格和团队采购。三步里有一步明显不行,换一款再试,别急着说服自己「用熟了就好」。
它能改对一行,改不对一个约定
代码里有大量没写在任何地方的规则:这个字段不允许为空、这个接口必须在事务里调用、这个缓存十分钟内不能失效、这个日志格式下游正在解析。模型看不到这些,它只看到语法和类型。于是它给出的改动可能编译通过、单测通过,上线之后在某个边界条件下出错。
它也看不到运行环境。库的版本对不上时,它给的写法可能在你装的那个版本里根本跑不起来;它可能顺手编一个不存在的参数名,语法完全正常,一跑就报错。这类情况的成因和AI 幻觉是同一套机制,靠读代码看不出来。
涉及登录、支付、权限、个人数据的改动,出错的代价不是报错,是数据泄露或资金损失。它不会主动提醒你「这里没做输入校验」「这个查询可以被注入」。上线前找人过一遍,这一步省不掉。工具能加速的是打字和检索,责任一分也接不走。
怎么把选择成本降下来
先用免费额度把三步实测跑完,再决定付费。团队采购按角色分:写业务代码的人配补全,做维护和排障的人配对话,重构和迁移这类一次性任务临时开 Agent。三样全上、每人一份,多数团队用不满,账单却按月来。
写需求的方式同样影响结果。把「改一下这个函数」换成「这个函数现在返回数组,要改成返回对象,调用点在 a.ts 和 b.ts,错误处理保持不变」,命中率会明显不同。这类写法和提示词的基本功是一回事,区别只在于上下文换成了代码。
速查:选工具前先问四句
- 项目有多大:单文件用补全,几万行加对话,多模块才轮到 Agent
- 语言有多冷:冷门语言先用自己的仓库测,别看支持列表
- 要它解释还是生成:读旧代码的时间通常比写新代码多
- 改动谁来验:Agent 的 diff 必须小步看,一次几十个文件别合
- 钱花在哪:按 token 计费的工具,重构一次的成本要提前估


