AI 编程工具全景:助手、编辑器与终端
AI 编程工具的能力差距,往往不在「模型多聪明」,而在它能看见多少上下文、能动手到哪一步。本章按形态把工具分成三类:终端型 Agent、编辑器内联助手、IDE 插件型助手。先看它们各自能看见什么、能改什么,再结合本地与云端的取舍决定用哪一类干什么活。
三类形态对比
| 维度 | 终端型 Agent | 编辑器内联助手 | IDE 插件型助手 |
|---|---|---|---|
| 交互方式 | 命令行对话,可连续执行多步 | 光标处补全、选区改写、行内问答 | 侧边栏对话 + 项目级动作 |
| 上下文范围 | 整个仓库(按需读文件、跑命令) | 当前文件与相邻片段为主 | 项目索引 + 当前文件 |
| 能动手到哪一步 | 可读写文件、执行命令、跑测试 | 一般只改你选中的那段代码 | 常可跨文件改,但需逐项确认 |
| 强项 | 批量改造、排查、生成脚手架 | 写函数、补注释、局部重写 | 跨文件重构、项目级问答 |
| 弱项 | 变更面大,需严格审查 | 看不见跨文件影响 | 索引质量决定效果 |
| 风险点 | 误执行危险命令、误改无关文件 | 补全引入隐蔽错误 | 大范围改动难以逐行复核 |
结论很直接:局部改动用内联助手,跨文件任务用带项目上下文的工具,需要跑命令验证的用终端型 Agent。
上下文范围决定上限
同一段任务,给不给上下文的结果完全不同。
| 你给的东西 | 它能做什么 | 典型错误 |
|---|---|---|
| 只贴一个函数 | 局部改写 | 编造不存在的调用方与工具函数 |
| 函数 + 相关类型定义 | 正确的类型与错误处理 | 边界情况仍可能漏 |
| 再加调用方与测试 | 判断改动影响面 | 基本可用,仍需人工复核 |
| 再加需求/接口文档 | 对齐业务语义 | 剩余风险主要是它读错了文档 |
经验做法:不要让它猜你的代码库。与其重写提示词,不如把相关文件路径直接告诉它,或干脆让它在仓库里自己检索并先汇报「我读了哪些文件」。
本地与云端的取舍
| 维度 | 本地方案 | 云端方案 |
|---|---|---|
| 数据流向 | 代码不出本机(取决于配置) | 代码片段会发送到服务方 |
| 能力上限 | 受本机算力与模型规模限制 | 通常更强、更新更快 |
| 延迟与成本 | 无按次费用,但吃本机资源 | 有调用成本,取决于用量 |
| 离线可用 | 可用 | 不可用 |
| 适用场景 | 敏感代码、内网项目、批量重复任务 | 通用开发、探索性任务、新框架学习 |
判断方法很简单:先看代码能不能出内网。不能出的,走本地方案或私有部署;能出的,按效果选。
代码隐私:先分级,再决定喂什么
| 代码级别 | 例子 | 可用工具 | 注意 |
|---|---|---|---|
| 公开 | 开源项目、示例代码 | 任意工具 | 注意遵守原项目许可 |
| 内部 | 业务逻辑、内部文档 | 允许外发的前提下可用云端 | 去掉内部域名、服务名 |
| 敏感 | 密钥、证书、凭据配置 | 绝不外发 | 用占位符替代 |
| 受监管 | 个人信息、支付相关代码 | 按合规要求,通常仅本地/私有部署 | 脱敏后再讨论逻辑 |
把「永远不上传」的文件写进工具的排除配置,并做一次实测确认:
{
"ai": {
"respectGitignore": true,
"excludeGlobs": [
"**/.env",
"**/.env.*",
"**/*.pem",
"**/*.key",
"**/*.p12",
"**/secrets/**",
"**/config/prod/**",
"**/fixtures/customer-*/**"
]
}
}
# 确认敏感文件没有被纳入索引或提交
git check-ignore -v .env config/prod/application.yml
grep -rIl --exclude-dir=.git -E '(api[_-]?key|password|secret)\s*[:=]\s*["'"'"'][^"'"'"']{8,}' . | head
# 检查待提交内容里是否混入密钥
git diff --cached | grep -nE '(BEGIN .*PRIVATE KEY|password\s*=|token\s*=)'
按场景选工具
| 场景 | 推荐形态 | 理由 |
|---|---|---|
| 写一个新函数、补注释 | 编辑器内联 | 上下文就在眼前,改完立刻能看 |
| 跨十几个文件的字段改名 | IDE 插件或终端 Agent | 需要项目级检索与批量修改 |
| 跑测试、看报错、反复修 | 终端 Agent | 需要执行命令并读输出 |
| 读一个陌生仓库 | 终端 Agent | 让它自己检索并汇报读了什么 |
| 处理敏感代码 | 本地或私有部署方案 | 避免代码外发 |
| 学习新技术、写示例代码 | 云端方案 | 知识更新快,风险低 |
常见坑
| 坑 | 后果 | 规避 |
|---|---|---|
| 用内联助手干跨文件重构 | 漏改调用方,编译或运行才暴露 | 跨文件任务换工具 |
| 把密钥贴进对话 | 泄漏且无法回收 | 用占位符,密钥走环境变量 |
| 相信「已全部改好」 | 实际漏改、部分失败 | 自己看 git diff 与测试结果 |
| 让 Agent 自由执行命令 | 误删文件、误改依赖 | 危险命令逐条确认 |
不开 .gitignore 之类的排除规则 | 敏感文件被索引 | 显式配置排除并实测 |
| 同时开多个工具改同一份代码 | 改动互相覆盖 | 一次只让一个工具动代码 |
小结:三类工具不是替代关系而是分工——局部改动用内联助手,跨文件与需要跑命令的任务用带项目上下文的工具,敏感代码走本地或私有方案;上下文给得越准效果越好,而无论用哪一类,代码的正确性始终由你负责。