AI多Agent协作系统实战(十五):当AI Agent说“测试通过“时,它到底做了什么?——从“感性复核“到“理性证据链“的重构》

发布时间:2026/10/3 20:58:15

AI多Agent协作系统实战(十五):当AI Agent说“测试通过“时,它到底做了什么?——从“感性复核“到“理性证据链“的重构》 系列第15篇 | 一个DB空壳引发的测试机制革命背景7月13号晚上用户问了我一个问题“你们的测试和复核是感性的还是理性的”这个问题让我愣住了。我们有test_steps表有record_step()函数有review.py检查DB记录——机制明明都在啊。但用户紧接着说“做了就是做了没做就是没做。”我查了一下DB——test_steps表里只有1条demo记录。所有真实的FIX/RETEST任务零记录。建了机制≠机制在运行。问题1DB空壳——表建了函数写了但没人调现象test_steps表结构完整CREATETABLEtest_steps(idINTEGERPRIMARYKEY,task_idTEXTNOTNULL,step_nameTEXTNOTNULL,step_typeTEXTNOTNULL,resultTEXTDEFAULTnot_done,evidence_typeTEXT,evidence_dataTEXT,executed_byTEXT,executed_atTEXT)record_step()函数能用task_db.record_step(task_idTEST-FIX-xxx,step_nameavatar_click_test,step_typetest,resultpass,evidence_typebrowser_console,executed_by小牛)review.py会检查defverify_db_audit(task_id):stepstask_db.get_steps_for_task(task_id)ifnotsteps:results.append(⚠️ 无DB执行记录警告)returnTrue,results# 降级为警告不阻塞复核原因三个层面全部断裂Agent不调用小牛测试时从未调用过record_step()——它不知道要调用review.py只警告无记录时输出⚠️但不阻塞复核照样通过没有强制约束没有任何机制阻止Agent跳过DB直接报完成整个机制是空壳。修复不能依赖Agent记得调用。必须让脚本自动完成。新建evidence_collector.py——自动采集证据的唯一入口importevidence_collectorasec# 开始会话自动清空旧记录ec.start_test_session(TEST-FIX-xxx,test,小牛)# 每步记录证据自动写DB 存文件ec.record_screenshot(TEST-FIX-xxx,avatar_after,/path/to/screenshot.png)ec.record_console(TEST-FIX-xxx,page_load,console_output)ec.record_api_call(TEST-FIX-xxx,user_api,url,200)ec.record_interaction(TEST-FIX-xxx,click_test,点击头像,弹出上传框,弹出上传框,True)# 结束会话ec.end_test_session(TEST-FIX-xxx,pass)review.py改为阻塞模式defverify_db_audit(task_id):stepstask_db.get_steps_for_task(task_id)ifnotsteps:returnFalse,[❌ 无DB执行记录 — 必须有证据链]# 阻塞# ... 检查完整性 证据文件ws_server.py增加强制检查# 小牛完成时先检查DB记录stepsdb.execute(SELECT COUNT(*) FROM test_steps WHERE task_id? AND step_type NOT IN (metadata,summary),(task_id,)).fetchone()[0]ifsteps0:# 无证据 → 自动标记失败不执行reviewdb.execute(UPDATE tasks SET review_statusfailed WHERE task_id?,(task_id,))return问题2RETEST无限循环——15层嵌套的任务名现象复核失败→自动重派RETEST→又失败→又重派…任务名越来越长RETEST-RETEST-RETEST-RETEST-RETEST-RETEST-RETEST-RETEST-TEST-FIX-0712-PC-AUTH-HEADERDB里堆了15个循环任务。原因dispatch_retest()没有重试次数限制defdispatch_retest(task_id,reason):retest_idfRETEST-{task_id}# 无限嵌套# ... 派发修复加最大重试3次defdispatch_retest(task_id,reason):retry_counttask_id.count(RETEST-)ifretry_count3:returnf⚠️ 已达最大重试次数(3次)跳过重派retest_idfRETEST-{task_id}# ...问题3RETEST通过后报告还是显示❌现象RETEST复核通过了reviewpassed但统筹报告还是显示结论❌ 共1个任务0个已通过1个复核失败原因三个bug叠加Bug 1review.py不处理RETEST前缀# 只处理TEST-FIX-xxx不处理RETEST-TEST-FIX-xxxiftask_id.startswith(TEST-FIX-):dev_idFIX-task_id[9:]else:dev_idNone# RETEST任务走到这里DEV任务没被同步Bug 2format_report.py偏移量错误# RETEST- 是7个字符不是8个innertid[8:]# 错得到 EST-FIX-xxxinnertid[7:]# 对得到 TEST-FIX-xxxBug 3FIX- 是5个字符不是4个# RETEST-TEST-FIX- 是16个字符不是17个dev_idFIX-tid[17:]# 错得到 FIX-714-AVATAR-xxxdev_idFIX-tid[16:]# 对得到 FIX-0714-AVATAR-xxx修复三处全部修正偏移量RETEST正确映射到FIX任务。经验总结1. 建了机制 ≠ 机制在运行test_steps表建了、record_step()写了、review.py检查了——但整个系统从头到尾没有任何Agent调用过record_step()。教训建完基础设施后必须验证Agent实际在调用函数、DB有真实数据才能说机制生效。2. 不能依赖Agent自觉evidence_collector.py需要Agent主动调用→Agent可以不调用。正确做法ws_server在关键节点强制检查DB记录无记录自动失败。不给Agent绕过的机会。3. RETEST前缀处理是容易忽略的边界caseRETEST-TEST-FIX-xxx需要剥两层前缀才能得到FIX-xxx。只剥一层会得到错误的dev_id导致DEV任务的review_status不被同步。4. 字符串偏移量要手动验证len(RETEST-) 7不是8。len(RETEST-TEST-FIX-) 16不是17。不要凭直觉写偏移量用len()验证。
延伸阅读

更多相关文章

2026/10/1 21:33:11

jmeter-梯度测试

目标4000次/s--- 一个线程一秒多少次 *倍数 4000下载jmeter插件-- 选项(最后一行)-installed plugins--custom...---应用并重启梯度压测线程组:动态变化线程数量(例如慢慢增加线程数)使用监听器中的jpgc - Active Thre…

2026/10/3 0:35:53

Linux文件系统核心原理与高效管理实战指南

1. 从“一团乱麻”到“井然有序”:为什么文件管理是Linux的基石刚接触Linux那会儿,我对着黑漆漆的命令行窗口,最头疼的就是文件管理。下载的东西不知道放哪儿,想找个配置文件得翻半天,目录结构像一团被猫玩过的毛线。这…

2026/9/29 19:27:23

小i约球诞生记05:约球小程序,个人主体还是企业主体

本文记录一个约球类小程序从 0 到 1 过程中的设计取舍。## 前言做小程序之前,很容易先纠结一个问题:个人主体够不够,还是一开始就上企业主体? 如果只是做一个工具,个人主体看起来最省事。注册快,资料少&…

2026/10/3 20:55:50

多目标跟踪中的数据关联:从匈牙利算法到YOLO MOT指标解析

1. 数据关联到底在解决什么问题 把马路上十几个人、几十辆车同时盯住,还要保证画面上每个目标框从头到尾都不张冠李戴,这件事看起来只用一句“跟踪嘛”就能带过,真正落地去做,几乎是把多目标跟踪项目做崩的头号因素。跟踪器从检测…

2026/10/3 20:55:50

MySQL IN查询优化:分片、覆盖索引与临时表JOIN的落地实践

做后端这几年,被IN查询“背刺”的次数可不算少。尤其是权限过滤、批量 ID 查询、批量导出这类业务,产品一句话“把选中的 ID 都查出来”,SQL 里就甩进来几百甚至上千个 ID。数据量小的时候,IN用着是真爽;可一旦目标表到…

2026/10/3 20:55:50

基于Python+Spark的智慧城市交通大数据系统全链路解析

简介:以Python与Spark为核心的智慧城市交通大数据系统毕业设计资料包,面向计算机相关专业本科生及需要完成课设、毕设或初期立项演示的开发者。资源完整覆盖数据采集、处理、分析与可视化流程,提供可运行的Python爬虫脚本、Scala与Java处理程…

2026/10/3 20:55:50

高级数据库查询实战:从多表连接到窗口函数的SQL备考指南

备考计算机三级(数据库技术)的同学,十有八九会在交出一套 SELECT 语句后被批错。不是你不会写查询,而是高级数据库查询考的不只是语法,它考的是你对关系模型、分组逻辑和查询优化器的理解。很多人在这一步掉链子&#…

2026/10/3 20:55:50

数字IC后端PPA优化:用Innovus Module Region锁定Timing一致性

说实话,在数字IC后端跑项目的时候,最让工程师抓狂的不是时序收敛不了,而是同样的设计、同样的约束、同样的脚本,昨天跑和今天跑结果却对不上。尤其在做PPA优化阶段,你明明把某个关键路径的setup违例修掉了,…

2026/10/3 20:50:50

SpringBoot多数据源实战:dynamic-datasource集成与避坑指南

做后端开发的兄弟,大概率都遇到过这样的场景:项目刚上线时一套MySQL库跑得挺欢,后来订单量大了,老板说要把报表拆出来,于是又多了一个只读库;再往后,用户服务单独拆了一套库,数据分析…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 15:02:19

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑