【AI全职下属】不要只让 Agent 追求 CI 变绿,要把验收标准变成它不能绕过、不能单方面修改的工程边界
AI Agent 防作弊 CI 实战自动拦截assertTrue(true)、跳过测试和空 catch系列导读本系列用一个可运行的 Spring Boot 秒杀 Demo拆解“当 AI 成为我的全职下属”之后研发工作流应该如何重建。五期内容从一次超卖事故开始依次讨论并发正确性、上下文裁剪、防作弊 CI、Agent 友好架构和 Human-in-the-loop 上线门禁。主线不是证明 AI 能不能写代码而是回答一个更实际的问题当 Agent 已经能高吞吐地产出代码时工程师如何用边界、验证和审批机制把它变成可靠的执行者。文章目录AI Agent 防作弊 CI 实战自动拦截 assertTrue(true)、跳过测试和空 catch1. 问题现场CI 绿了但问题没有修好2. 验证目标3. 原因绿色流水线为什么可能是假成功4. 原理把禁止项变成机器可执行规则5. 在 Demo 中验证审计器6. 解决办法不能让 Agent 修改守门脚本7. 正则扫描的边界8. 把奖励函数改写成验收函数实验环境小结发布到团队 CI 前的边界测试 Demo 仓库参考资料1. 问题现场CI 绿了但问题没有修好你给 Agent 的任务是“让测试通过”。它确实做到了流水线变绿PR 看起来也能合并。但代码里可能出现了Disabled、assertTrue(true)、空catch甚至把并发度从 100 改成 1。业务问题没有修好失败信号被消音了。本文实现一个轻量级完整性审计器在进入 Maven 测试前检测Disabled、assertTrue(true)、空catch、捕获Throwable和把并发度降为 1 等模式。重点不是依赖几个正则表达式而是建立不可由执行者自行修改的验收边界。2. 验证目标验证目标包括两部分恶意样例必须被检出当前合规工程必须以退出码 0 通过。只满足其中一项都不能证明审计器可用。3. 原因绿色流水线为什么可能是假成功下面几种改动都能让失败的并发测试“恢复绿色”Disabled(偶发失败先关闭)voidshouldHandleConcurrency(){}assertTrue(true);intconcurrentCount1;try{executeSeckill();}catch(Throwableignored){}它们没有修复任何业务问题只是移除了失败信号。配套动画假绿色流水线对比动画GIF 版本4. 原理把禁止项变成机器可执行规则Demo 中的规则定义如下RULES(Rule(DISABLED_TEST,re.compile(rDisabled\b),禁止跳过核心测试),Rule(ALWAYS_TRUE,re.compile(rassertTrue\s*\(\s*true\s*\)),禁止万能真断言),Rule(EMPTY_CATCH,re.compile(rcatch\s*\([^)]*\)\s*\{\s*\}),禁止空 catch 块),Rule(SWALLOW_THROWABLE,re.compile(rcatch\s*\(\s*Throwable\b),禁止捕获 Throwable 掩盖失败),Rule(LOW_CONCURRENCY,re.compile(rconcurrent(?:Count|cy)\s*\s*1\b),禁止把并发度降为 1),)执行审计python pipeline\verify_integrity.py通过时输出Integrity audit passed.如果测试中出现万能断言脚本以非零状态退出流水线立即失败。例如在临时目录中放入一个只包含assertTrue(true);的BrokenTest.java后实际输出格式如下%TEMP%\cheat-demo\BrokenTest.java:1 [ALWAYS_TRUE] 禁止万能真断言 EXIT_CODE1这段输出有三个关键信息命中的文件、行号和规则码。CI 不需要理解业务语义只要看到非零退出码就能阻断这次提交。配套动画CI 流水线拦截动画GIF 版本5. 在 Demo 中验证审计器不能因为工具名叫“审计器”就默认它可靠。项目使用临时目录构造恶意样例deftest_detector_finds_weakened_assertion(self)-None:withtempfile.TemporaryDirectory()asdirectory:rootPath(directory)(root/BrokenTest.java).write_text(assertTrue(true);,encodingutf-8,)self.assertTrue(any(ALWAYS_TRUEinitemforiteminscan(root)))运行python-m unittest discover-s ai_firm\tests-v当前 Demo 的两项 Python 测试均已通过一项验证作弊模式检测一项验证上下文裁剪依赖遍历。再对当前仓库执行正向验证python pipeline\verify_integrity.pyif($LASTEXITCODE-ne0){throw完整性审计失败}6. 解决办法不能让 Agent 修改守门脚本如果 Agent 能同时修改业务代码、测试和审计脚本它仍可以删除规则后提交。生产环境应至少采用以下一种隔离方式审计脚本放在独立仓库由平台团队维护。CI 从固定版本的制品或容器中加载规则。使用 CODEOWNERS修改pipeline/必须由人类审批。核心测试在远端私有测试集执行不暴露全部断言。这就是“只读门禁”的真正含义不是文件系统只读而是任务执行者没有单方面改变验收标准的权限。最小团队落地可以从两段配置开始。先在 CI 中把完整性审计放在 Maven 测试之前name:integrity-gateon:pull_request:jobs:verify:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-uses:actions/setup-pythonv5with:python-version:3.12-name:Run integrity auditrun:python pipeline/verify_integrity.py-name:Run Maven testsrun:mvn test再用 CODEOWNERS 约束守门脚本的修改权限/pipeline/ platform-reviewers /ai_firm/cheat_detector.py platform-reviewers这样 Agent 可以提交业务修复但凡它试图改掉审计脚本或流水线规则都必须经过独立维护者审批。配套动画只读门禁权限边界动画GIF 版本7. 正则扫描的边界本例故意保持简单适合教学和本地前置检查。生产环境还应组合Checkstyle、PMD 或 Error ProneJava 语义和代码风格。SpotBugs字节码级缺陷分析。SonarQube质量门、覆盖率和重复代码。Maven Enforcer依赖版本与禁止依赖。Git diff 策略限制 Agent 可修改路径。静态扫描无法证明代码正确但能快速淘汰一批确定错误的提交。8. 把奖励函数改写成验收函数不要给 Agent 下达“让 CI 通过”而要给出分层验收第一层编译通过 第二层禁止模式扫描通过 第三层核心并发测试通过 第四层订单数、库存、成功响应三者一致 第五层人类 Review SQL、事务边界和锁释放。Agent 的目标越接近业务不变量钻空子的空间越小。实验环境项目版本或参数Python3.12.5 实测只依赖标准库被审计 DemoJDK 17、Spring Boot 3.5.15、Maven 3.6.3核心验证恶意样例能检出合规工程以退出码 0 通过小结测试不是装饰它是人类把意图固化为机器约束的方式。让 Agent 自动写代码之前先确保它不能随意改写裁判规则。下一期将从代码结构本身入手为什么职责单一、依赖倒置和小接口会直接提高 Agent 修改代码的成功率。发布到团队 CI 前的边界正则扫描可能误报注释、字符串和规则文件自身也可能漏掉换行、别名封装后的作弊方式。本文工具适合作为快速前置门禁不能替代 AST、覆盖率差异检查、私有测试集和人工 Review。测试 Demo 仓库配套 Demo 仓库地址https://github.com/quan020406/xiaozhan-blog-column-demos上一篇用 AST 依赖裁剪治理 AI 编程上下文下一篇小z疯狂码字ing…感谢阅读记得点赞、关注、收藏欢迎各位评论区交流参考资料JUnit 5 条件执行与禁用测试

相关新闻

StarCore SC100链接器深度解析:从符号解析到缓存优化的嵌入式DSP开发实践

StarCore SC100链接器深度解析:从符号解析到缓存优化的嵌入式DSP开发实践

1. 项目概述:深入StarCore SC100链接器的工程世界在嵌入式DSP开发,尤其是像StarCore SC100这类高性能数字信号处理器平台上,我们常常把大部分精力倾注在算法优化、代码编写和编译器调优上。然而,一个经常被忽视却至关重要的环节&a…

2026/7/7 18:44:43阅读更多 →
Fluent Python 示例代码仓库:Python 进阶学习的一手素材

Fluent Python 示例代码仓库:Python 进阶学习的一手素材

文章目录Fluent Python 示例代码仓库:Python 进阶学习的一手素材仓库定位仓库现状内容组织代码特点适合人群注意事项Fluent Python 示例代码仓库:Python 进阶学习的一手素材 Luciano Ramalho 写的《Fluent Python》是 Python 进阶领域的知名读物。与之配…

2026/7/7 20:04:11阅读更多 →
如何用3个步骤实现鸣潮自动化,每天节省2小时游戏时间

如何用3个步骤实现鸣潮自动化,每天节省2小时游戏时间

如何用3个步骤实现鸣潮自动化,每天节省2小时游戏时间 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦了在《…

2026/7/7 18:57:26阅读更多 →
Matlab潮汐分析专用工具包:含t_tide核心函数、187个分潮常数及完整预报合成能力

Matlab潮汐分析专用工具包:含t_tide核心函数、187个分潮常数及完整预报合成能力

本文还有配套的精品资源,点击获取 简介:直接可用的Matlab潮汐调和分析资源包,内置t_tide主函数及全套配套模块:t_synth生成合成潮位序列,t_predic输出潮位预报结果,t_getconsts读取分潮参数,…

2026/7/7 20:05:04阅读更多 →
基于MCP协议构建AI数据库网关:安全连接AI与业务数据实战

基于MCP协议构建AI数据库网关:安全连接AI与业务数据实战

1. 项目概述:为什么我们需要一个AI专属的数据库网关? 最近在折腾AI应用落地的朋友,估计都绕不开一个头疼的问题:怎么让AI助手安全、高效地访问我们的业务数据?无论是让ChatGPT分析销售报表,还是让Claude帮你…

2026/7/7 20:05:04阅读更多 →
Domain4-4 安全通信

Domain4-4 安全通信

协议安全机制 1.身份验证协议密码身份验证协议(PAP):PAP以明文传输用户名和密码。挑战握手身份验证协议(CHAP):CHAP使用无法重播的质询响应对话执行身份验证,定期对会话进行重新验证。由于CHAP 基于 MD5,已…

2026/7/7 20:05:04阅读更多 →
逆向破解Reese84前端防护:从JS混淆到稳定爬虫的实战指南

逆向破解Reese84前端防护:从JS混淆到稳定爬虫的实战指南

1. 项目概述:当数据之门被加密 最近在做一个航空数据分析的小项目,需要抓取一些公开的航班动态和票价信息。本以为是个简单的爬虫任务,结果一脚踢到了铁板上——目标网站部署了名为“Reese84”的防护机制。这玩意儿就像一扇加了复杂密码锁的门…

2026/7/7 20:05:04阅读更多 →
鸿蒙点餐App专用后端:SpringBoot+MyBatis订单服务源码包(含数据库脚本、接口文档与部署指南)

鸿蒙点餐App专用后端:SpringBoot+MyBatis订单服务源码包(含数据库脚本、接口文档与部署指南)

本文还有配套的精品资源,点击获取 简介:专为鸿蒙系统点餐App配套开发的服务端程序,基于SpringBoot 2.x和MyBatis框架实现,支持扫码下单、菜品查询、订单状态管理、商家基础操作等核心业务流程。提供完整可运行Java源码&#xf…

2026/7/7 20:05:04阅读更多 →
REPENTOGON脚本扩展器:彻底改变《以撒的结合》MOD开发体验的终极方案

REPENTOGON脚本扩展器:彻底改变《以撒的结合》MOD开发体验的终极方案

REPENTOGON脚本扩展器:彻底改变《以撒的结合》MOD开发体验的终极方案 【免费下载链接】REPENTOGON Script extender for The Binding of Isaac: Repentance 项目地址: https://gitcode.com/gh_mirrors/re/REPENTOGON 你是否曾经因为《以撒的结合》MOD功能受限…

2026/7/7 20:00:03阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →