Agent 写完代码、测试全绿,我为什么还是拒绝上线?
本文最后更新于 2026-07-29,文章内容可能已经过时。
Agent 写完代码、测试全绿,我为什么还是拒绝上线?
Agent 很快完成了“用户收藏与历史记录”功能,自动测试全部通过,但发布按钮最终没有被按下。
问题出在一处权限判断:它复用了现有内容查询接口,却没有完整区分普通用户、编辑和管理员。更危险的是,原有测试根本没有覆盖这组角色差异。换句话说,代码通过了测试,但测试验证的是一个不完整的需求。
这正是 Agent 进入真实项目后最容易制造的错觉:它会写代码、会跑命令、会给出一份漂亮的总结,于是团队下意识地把“能够执行”误认为“可以负责”。
能否交给 Agent,不取决于它“会不会做”,而取决于任务是否可验证、可回滚,以及出错后的影响范围是否可控。
先说明案例边界:本文以“给已有内容网站增加用户收藏与历史记录”为贯穿项目,展示完整工作流。由于没有提供可公开核验的仓库、PR、日志、监控截图和统计周期,本文不会虚构生产数据或冒充真实上线复盘。其中项目结构用于流程演示,数据部分提供可直接套用的记录方法;正式发布真实案例时,应替换为经过脱敏的原始证据。
一、别急着让 Agent 写代码,先画责任边界
这个示例项目采用常见的 Web 技术栈:前端页面、服务端接口、关系型数据库和 Git 仓库。需求看起来并不复杂:
- 登录用户可以收藏和取消收藏文章;
- 用户只能查看自己的收藏与历史记录;
- 历史记录自动写入,允许用户清空;
- 旧用户无须重新注册;
- 功能关闭后,不影响原有文章阅读。
一次完整变更通常涉及:
- 收藏按钮和个人中心页面;
- 收藏、取消收藏、查询历史记录等接口;
- 用户、文章与行为记录之间的数据关系;
- 权限校验、中间件和日志;
- 单元测试、接口测试与发布配置。
过去的人工流程很熟悉:产品把需求写在文档里,补充信息散落在会议记录和聊天群;开发先搜索仓库,再逐个确认调用链;测试依赖个人经验;上线后发生异常,大家靠 Git 记录和聊天记录还原现场。
Agent 的价值不是把所有人移出流程,而是接管其中高频、重复、边界清楚的机械劳动。
判断任务能否交给 Agent,只问四个问题
1. 输入和输出是否明确?
2. 结果能否通过测试、规则或数据验证?
3. 失败后是否容易暂停和回滚?
4. 错误是否会直接影响用户、资金、安全或合规?
据此可以划分三档权限:
| 权限等级 | 适合的任务 | 执行方式 | | 绿色 | 仓库检索、格式整理、类型修复、文档同步 | Agent 可自主执行 | | 黄色 | 跨文件修改、接口调整、依赖升级、数据库迁移 | Agent 执行,人工审批 | | 红色 | 生产发布、权限策略、密钥操作、不可逆数据处理 | 人工决策,Agent 仅提供信息 |这套规则比“相信哪个模型”更重要。模型再强,如果拿到了模糊需求、无限目录权限和生产写入能力,也只是把风险执行得更快。
二、需求拆解:让 Agent 找问题,不让它替业务拍板
Agent 在需求阶段最有价值的能力,不是“创造功能”,而是把散落的信息压缩成结构化任务,并主动暴露冲突。
可以把原始需求、会议记录、用户反馈和现有系统说明一起交给它:
请根据以下原始需求输出:
1. 已确认目标
2. 尚未确认的问题
3. 用户故事
4. 可验证的验收标准
5. 可能受影响的模块
6. 风险与回滚思路
不要自行补全业务规则。
所有推测必须标记为“待确认”。
对于收藏功能,Agent 可能生成以下待确认问题:
- 未登录用户点击收藏时,是弹出登录提示,还是先保存在本地?
- 删除文章后,收藏记录是否保留?
- 编辑和管理员能否查看其他用户的收藏?
- 历史记录保存多久?
- 清空历史是逻辑删除还是物理删除?
- 收藏数量是否对外展示?
这比直接生成代码重要得多。因为这些问题中的任何一个没有确认,都可能让后续测试建立在错误前提上。
在示例工作流中,Agent 首版方案把“管理员可查看所有收藏”当成了现有权限的自然延伸。人工审核必须否决这一推断:后台内容管理权限,不等于用户行为数据查看权限。
修改后的任务卡应明确写成:
- 用户只能查询自己的收藏与历史记录;
- 管理员默认没有跨用户查询权限;
- 涉及行为数据导出时,必须另行审批;
- 所有未确认规则不得进入代码实现。
本阶段的责任划分
Agent 可以做:- 资料归纳;
- 用户故事草案;
- 待确认问题清单;
- 验收标准草案;
- 模块影响与依赖梳理。
- 功能优先级;
- 目标用户定义;
- 数据口径;
- 权限和隐私边界;
- 风险接受与范围签字。
三、代码变更:把 Agent 关进“可验证沙箱”
需求确认后,也不应该直接说一句“帮我实现收藏功能”。
更安全的方式是先让 Agent 只读仓库,输出:
1. 相关目录和文件;
2. 现有接口与调用链;
3. 拟修改文件;
4. 测试计划;
5. 潜在兼容风险;
6. 需要人工确认的操作。
随后再通过任务配置限制它的活动范围:
task: add_favorite_feature
allowed_paths:
- src/features/favorite/**
- tests/favorite/**
forbidden_paths:
- config/production/**
- migrations/**
required_checks:
- npm run lint
- npm run typecheck
- npm test
human_approval:
- database_schema_change
- permission_change
- production_deploy
注意,migrations/ 被禁止修改,不代表功能永远不能改数据库,而是意味着:Agent 发现需要建表时必须停下来,由人确认数据结构、索引、备份与回滚方案。**
Agent 最容易犯的四类错误
- 为了完成一个按钮,顺手重构多个公共模块;
- 复用“看起来能用”的接口,却忽略权限语义;
- 只考虑新数据,不处理旧用户和空值;
- 测试只覆盖正常路径,没有覆盖越权、重复请求和服务异常。
因此,Review 不能只看最终页面是否能点。团队需要设置机械化门禁:
- 单元测试和接口测试;
- 类型检查与 Lint;
- 依赖和安全扫描;
- Diff 行数上限;
- 受保护目录规则;
- 数据库与权限变更检测;
- 禁止 Agent 直接合并主分支。
人工 Code Review 则集中判断机器难以确认的部分:架构是否合理、业务语义有没有被改写、异常时用户会看到什么、数据是否可能泄露。
四、测试与上线:测试全绿,不等于可以发布
Agent 很适合根据验收标准生成测试矩阵:
| 测试类别 | 示例 | | 正常路径 | 收藏、取消收藏、查看列表 | | 异常输入 | 无效文章 ID、重复提交 | | 权限差异 | 未登录、普通用户、编辑、管理员 | | 并发场景 | 连续点击、重复请求 | | 兼容场景 | 旧用户、已删除文章、空记录 | | 回滚验证 | 关闭功能后原页面仍可访问 |但有一个常被忽略的问题:测试用例通常继承需求理解。 如果需求阶段默认了错误的权限规则,Agent 可能同时生成错误代码和错误测试,最后得到一片“全绿”。
所以,Agent 可以扩大检查面,却不能自动获得发布权。
if tests_failed or security_scan_failed:
block_release()
if changes_permission or changes_database:
require_human_approval()
if rollback_plan is None:
block_release()
《AI 项目上线前人工审批清单》
- [ ] 变更文件、接口和数据表是否与任务卡一致?
- [ ] 是否修改登录、权限、支付或用户数据逻辑?
- [ ] 数据库变更是否完成备份和回滚演练?
- [ ] 是否覆盖未登录、越权、空数据和重复请求?
- [ ] 灰度范围和观察窗口是否明确?
- [ ] 哪些指标异常时必须暂停发布?
- [ ] 回滚由谁执行,预计恢复路径是什么?
- [ ] 日志和监控是否足以定位问题?
- [ ] 产品、开发和发布负责人是否显式确认?
- [ ] 是否确保 Agent 无法直接操作生产密钥?
自动化不必一步到位
- L0:Agent 只给建议;
- L1:Agent 生成内容,人类执行;
- L2:Agent 在测试环境执行,人类审批;
- L3:Agent 执行低风险操作,异常时自动暂停;
- L4:限定场景内闭环自动化。
对多数普通团队来说,先做到 L2—L3 更现实。全自动不是成熟的标志,出了问题能够自动停下来才是。
五、完整流程图:谁执行,谁审批,谁负责
flowchart LR
subgraph B["产品或业务负责人"]
B1["提交原始需求"]
B2["确认范围与业务规则"]
B3["批准灰度发布"]
B4["确定复盘优先级"]
end
subgraph A["Agent"]
A1["整理资料与待确认问题"]
A2["检索仓库与生成计划"]
A3["创建补丁并补充测试"]
A4["执行检查并汇总结果"]
A5["生成发布建议"]
A6["汇总日志与异常时间线"]
end
subgraph D["开发者"]
D1["审核任务卡"]
D2["审核架构、权限与兼容性"]
D3["检查 Diff 与 CI"]
D4["执行灰度和回滚"]
D5["判断根因并制定改进项"]
end
B1 --> A1 --> B2 --> D1
D1 --> A2 --> A3 --> A4
A4 --> D2 --> D3 --> A5
A5 --> B3 --> D4 --> A6
A6 --> D5 --> B4
classDef auto fill:#d9f7be,stroke:#389e0d,color:#000;
classDef approve fill:#fff1b8,stroke:#d48806,color:#000;
classDef manual fill:#ffccc7,stroke:#cf1322,color:#000;
class A1,A2,A3,A4,A5,A6 auto;
class D1,D2,D3,B2,B3 approve;
class D4,D5,B4 manual;
绿色代表 Agent 可执行,黄色代表必须人工审批,红色代表不应自主自动化。尤其是生产写入、权限修改和不可逆数据操作,不能由一句自然语言直接触发。
六、上线复盘:Agent 还原事实,人类解释原因
上线后,可以让 Agent 汇总:
- Git 提交与 PR;
- CI 和部署记录;
- 监控指标与错误日志;
- 灰度时间线;
- 客服反馈与问题工单;
- 回滚和修复操作。
它很擅长回答:
- 什么时间部署了哪个版本?
- 哪类请求最先出现异常?
- 异常是否集中在某个角色或接口?
- 发布前后有哪些配置发生变化?
但“发生了什么”不等于“为什么发生”。
根因可能来自需求表述、组织沟通、测试策略,也可能是负责人明知风险但接受了取舍。这些涉及责任、资源和业务判断的问题,不应该由 Agent 单独定性。
不要编“效率提升”,要保留原始记录
真实项目应按统一口径记录改造前后数据:
| 指标 | 统计方式 | | 需求整理耗时 | 从资料收齐到任务卡确认 | | 代码定位耗时 | 从开始检索到确认调用链 | | 首个 PR 时间 | 从需求签字到 PR 创建 | | 人工 Review 时间 | PR 审核平台记录 | | 测试覆盖 | 新增用例及异常路径数量 | | 人工修改比例 | 人工修改行数 ÷ Agent 初始变更行数 | | 上线缺陷与回滚 | 按同一观察窗口统计 | | 调用成本 | 调用次数、Token 与 API 账单 |没有原始记录,就不要写“效率提升了多少”。更诚实的结论通常是:Agent 减少了检索、整理和重复检查,但团队增加了配置权限、补充测试、审核输出和维护上下文的成本。
发布时应补齐的六张证据截图
由于本文没有收到真实项目素材,不能伪造截图。正式案例建议补充:
1. 原始需求与 Agent 待确认问题;
2. Agent 输出的代码修改计划;
3. Git Diff 或 Pull Request;
4. 测试、类型检查与安全扫描;
5. 发布前人工审批界面;
6. 监控面板与复盘摘要。
截图必须遮挡 API Key、用户数据、内部域名、数据库连接信息和私有仓库内容。
七、《任务是否适合交给 Agent:四问判断表》
- [ ] 输入、输出和完成条件是否明确?
- [ ] 是否有测试、规则或数据可以验证?
- [ ] 失败后是否能够暂停和回滚?
- [ ] 错误影响是否局限在可控范围?
判断建议:
- 四项都满足:可进入绿色任务池;
- 前三项满足,但可能影响用户:Agent 执行,人工审批;
- 无法验证或无法回滚:先改造流程,不要自动化;
- 涉及资金、安全、权限与合规:人工决策,Agent 只读辅助。
八、可直接套用的 AI 工作流升级清单
| 项目环节 | Agent 的角色 | 人工把关点 | 验证机制 | 自动化级别 | | 需求整理 | 汇总与拆解 | 范围、优先级、业务规则 | 验收标准评审 | L1 | | 代码检索 | 定位文件与依赖 | 判断检索是否完整 | 文件引用和调用链 | L2 | | 代码修改 | 生成补丁 | 架构、权限、兼容性 | Diff、测试、扫描 | L2 | | 测试 | 生成并执行用例 | 判断覆盖是否充分 | CI 与测试报告 | L2-L3 | | 上线准备 | 生成检查清单 | 发布和回滚决策 | 灰度及监控 | L2 | | 上线复盘 | 汇总事实与异常 | 根因和改进优先级 | 日志、指标交叉验证 | L1-L2 |如果你已经能在聊天窗口完成需求拆解,下一步可以把模板接入脚本、CI 或工作流工具。可前往 api.884819.xyz 查看接口和接入方式,先从“输入需求—返回结构化任务清单”这种只读场景开始。
8848AI 使用用户名和密码即可注册,无须邮箱验证;平台内置 AI 对话,注册后可直接使用。国产模型如 Deepseek、千问等完全免费,没有月租和订阅,其他服务按量付费。实践时仍建议使用测试项目、限制调用预算,并避免上传密钥、真实用户数据和未脱敏的私有代码。
新用户注册即送体验token。真正成熟的 AI 工作流,不是让 Agent 获得无限权限,而是让每一次自动执行都有明确边界、验证方式、暂停条件和责任人。
这篇解决的是“哪些任务该交给 Agent”。但真正接入 Git 后,更难的问题会变成:它能读哪些目录、能执行哪些命令、什么时候必须停下来等人批准?
下一篇,我会继续拆解:《我把这份 AI 工作流清单真正接进了 Git:Agent 权限、提示词、CI 门禁和回滚配置全公开》,包括仓库白名单、任务模板、人工审批节点,以及一次完整的故障回滚演示。
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#AIAgent #AI编程 #软件开发 #自动化测试 #DevOps #人工智能 #8848AI