篱笆资讯
让 AI 智能体写代码,也让它选技术栈吗?开发者的四个控制点
让 AI 写代码之后,哪些技术决定仍要由你确认?
让工具补全一段 Python 代码,语言通常已经选好了。把任务改成“写个查询 API 的脚本”,语言、依赖、运行方式就可能一起进入待选范围。
这正是“智能体成为新造王者”这一观点讨论的变化:如果开发者没有预先限定实现细节,智能体提出的方案可能成为默认选择,进而影响哪些语言、框架或服务被采用。代码生成之外,技术方案的建议权也进入了委托范围。
这是对决策权变化的条件性判断,不是对智能体能力、普及程度或开发岗位增减的证明。不同任务也未必采用同一种人机分工。下面用一个假设的 API 脚本任务展开,四个控制点都是编辑提出的实践建议,不是原文已经验证有效的措施。

一、目标定义:先明确什么结果算完成

一、目标定义:先明确什么结果算完成
假设你要从一个只读 API 获取分页记录,导出包含 `id`、`timestamp`、`amount` 的 CSV,供后续分析使用。这个例子不对应任何真实团队,也不代表某款工具的实际表现。
只说“把数据导出来”,会留下不少空白:导出当前页还是全部页面?时间保留原值还是统一格式?遇到缺失字段,是跳过还是报错?这些会影响数据含义,不能全部留给实现阶段自行决定。
可以先给出共同任务说明:
- 获取所有分页记录,每个 `id` 只能出现一次;发现重复时报告错误。
- 时间统一输出为 UTC,金额不自行换算或四舍五入。
- 必需字段缺失时明确报错,不静默丢弃记录。
- 只访问指定接口,密钥从环境变量读取,不写入代码或日志。
- 先使用模拟响应验证,不连接生产环境。
在同一目标下,再比较两种委托方式:
| 委托方式 | 可以给出的指令 | 保留或开放的决定 |
|---|---|---|
| 开发者指定实现 | “使用 Python,只用标准库。先列出设计,再生成脚本与测试。” | 语言和依赖已确定,智能体处理实现细节 |
| 智能体提出方案 | “先提出语言与依赖方案,说明理由、替代方案和运行要求。经确认后再写代码。” | 允许提出选型建议,但不授权直接采用 |
两者的差别不只是提示词长短。第二种委托增加了一个需要人工确认的阶段:先选方案,再实施。如果直接接受生成结果,这个确认步骤就容易被跳过。
二、技术约束:让选型建议接受理由复核
开放智能体技术选型,不等于所有方案都适合当前项目。一个能独立运行的脚本,仍可能与团队的部署环境、依赖规则或维护能力冲突。
对假设任务,可以把约束分成两层:
- 不可自行改变:只读访问、不泄露密钥、输出格式固定,不增加数据库或后台服务。
- 可以提出建议:使用哪种语言、是否引入 HTTP 库、如何组织模块,但新增依赖必须先获批准。
如果智能体建议增加第三方库,不要只接受“更简单”“更现代”这样的理由。要求它解释:标准库在哪个具体环节不够合适?新依赖解决了什么问题?谁负责更新?目标环境是否允许安装?
| 复核项 | 应当得到的回答 |
|---|---|
| 运行环境 | 在哪里执行,需要什么运行时,现有环境是否具备 |
| 依赖必要性 | 不引入该依赖会有什么具体代价 |
| 替代方案 | 至少一个更少依赖或更贴近现有技术栈的方案 |
| 维护影响 | 安装、版本管理、许可证与后续更新由谁处理 |
| 变更边界 | 哪些文件会被改动,是否超出脚本任务范围 |
复核后的决定可能是接受新依赖,也可能是保留原方案。关键是留下理由:为什么这项选择适合当前约束。智能体给出的解释仍需核对,尤其是库的功能、版本兼容性和许可证,不能把生成文本本身当作证据。
三、模型选择:确认自己能控制哪一层

三、模型选择:确认自己能控制哪一层
“开发者是否仍掌握主动权”,还取决于能否选择模型,以及能否控制模型周围的执行环境。这是讨论开发者角色时容易被忽略的条件。
模型、编程工具和执行权限应分开检查。即使可以切换模型,也不意味着可以修改工具的文件访问范围;反过来,不能切换模型,也可能仍能限制命令执行和合并权限。具体能力要以当前工具的设置及文档为准。
对正在使用 AI 智能体编程的读者,先检查三个问题:
- 选择是否透明?能否确认所用模型或版本,自动切换是否可见?
- 输入边界是否清楚?哪些代码和数据会被发送出去,组织规则是否允许?
- 执行是否需要批准?安装依赖、联网、修改配置或访问敏感文件时,能否暂停确认?
在数据处理方式未核实前,不要把真实密钥或敏感数据用于这个练习。
如果工具允许比较模型,可以让候选模型完成同一组模拟任务,记录是否遵守依赖限制、是否遗漏分页、能否根据测试失败修正代码。比较时保持输入和权限一致,避免把更宽的执行权限误认为更好的判断能力。
一次小测试不能证明某个模型全面更强。它能提供的,是在当前任务中选择模型的可观察依据。
四、结果验收:执行成功之后,还要检查什么
脚本跑完,只说明某次执行没有以明显错误结束。合并前仍要检查结果是否符合任务要求,以及实现有没有越过授权边界。
针对上述假设任务,可以直接使用这份验收清单:
| 检查项 | 合并前需要看到的证据 |
|---|---|
| 分页完整性 | 多页模拟响应均被处理,最后一页后停止请求 |
| 数据一致性 | 输出记录数与输入一致,重复 `id` 和缺失字段触发明确错误 |
| 失败处理 | 超时、429 和无效响应有对应测试;重试次数与等待时间有上限 |
| 密钥保护 | 代码、日志和测试快照中没有真实密钥 |
| 依赖与改动 | 新增依赖经过确认,差异中没有无关文件或配置变更 |
| 可复现性 | 另一位开发者能按说明运行测试,理解输出与限制 |
测试本身也要复核。如果代码和测试都由同一个智能体生成,二者可能共享同一项误解。可以人工补充一个没有在实现提示中展开的边界用例,例如第二页返回重复记录,检查脚本是否真的按要求报错。
执行前确认权限,合并前阅读差异。如果工具自动添加了依赖、修改构建配置或扩大文件改动范围,应暂停审查,而不是因为测试通过就继续。
对准备美国 Software Engineer 或 Backend Software Engineer 岗位项目讨论的学习者,这个练习可以留下三份简短记录:原始约束、选型理由和验收结果。讲清楚自己批准了什么、拒绝了什么、用什么证据确认结果,比单纯展示生成的代码更能说明你的技术判断。
