news 2026/10/6 5:50:35

让 AI 自己修 Bug:揭秘测试 Agent 的“自我修正”与 Docker 沙箱实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
让 AI 自己修 Bug:揭秘测试 Agent 的“自我修正”与 Docker 沙箱实现

导读

接上篇,我们确立了基于LangGraph的状态机架构。本篇将深入代码细节,探讨该 Agent 的三大核心技术支柱:基于 Prompt 的代码生成、Docker 沙箱执行环境、以及最核心的Reflexion 自我修正机制。

一、智能代码生成:从规范到Pytest

代码生成是 Agent 的第一生产力。然而,直接让 LLM “写个测试”往往会得到无法运行的幻觉代码。我们采用了分层提示和结构化输出策略。

1、提示工程策略

我们为 LLM 设计了专门的 System Prompt,强调角色的专业性:“你是一名资深的 QA 自动化工程师,精通 Pytest 和 OpenAPI 标准。” 。

关键的 Prompt 技巧包括:

  • 思维链(CoT):要求 LLM 在写代码前先解释测试逻辑。“首先,我需要调用登录接口获取 Token;然后,我将 Token 放入 Header 中调用目标接口...”
  • 工具约束:明确限制使用的库。“仅使用 requests 和 pytest,不要使用 mock 库,我们需要真实的集成测试。”
  • 错误处理模板:强制要求代码包含 try-except 块,以便更好地捕获运行时异常。
2、解决幻觉问题

OpenAPI 规范可能非常庞大,超出 LLM 的上下文窗口。为此,我们在生成阶段引入了RAG技术。Agent 不会一次性读取整个 Spec,而是根据当前要测试的端点,从向量数据库中检索相关的 Schema 定义。这大大提高了生成的准确性,减少了因上下文溢出导致的“遗忘”现象。

二、容器化沙箱:安全与隔离的执行环境

“在我的机器上能运行”是自动化测试的经典笑话。为了保证环境的一致性和安全性,Agent 绝不在宿主机上直接执行生成的代码,而是利用 Docker 容器。

1、架构实现

Agent 通过 Python 的 docker SDK 与 Docker 守护进程通信。

(1)镜像准备:预先构建一个包含 pytest, requests, allure-pytest 等依赖的基础镜像 test-runner:latest。

(2)代码注入:将 LLM 生成的代码字符串写入临时文件,并通过 volumes 挂载或 docker cp 命令注入容器。

(3)执行与捕获:使用 container.exec_run("pytest test_generated.py") 执行测试。关键在于设置 detach=False 从而同步等待结果,并捕获 ExitCode。

表 2:宿主机执行与 Docker 沙箱执行的风险对比

风险维度

宿主机直接执行

Docker 沙箱执行

文件系统安全

极高风险。恶意代码可删除系统文件 (rm -rf /)。

安全。仅限于容器内部文件系统,且容器用完即毁。

网络安全

可访问内网所有资源,存在 SSRF 风险。

可通过 Docker Network 限制仅访问被测 API 容器。

环境依赖

依赖宿主机 Python 库,版本冲突频发(Dependency Hell)。

环境纯净,依赖版本通过 Dockerfile 严格锁定。

资源控制

恶意死循环可能耗尽宿主机 CPU/内存。

可通过--cpus和--memory参数限制容器资源 。

2、隔离策略

为了进一步提升安全性,我们采用了特权级限制,确保容器内的进程无法逃逸到宿主机内核。对于生成的代码,Agent 严格禁止网络访问除目标 API 以外的任何地址。

三、自我修正循环:Reflexion模式的应用

这是该 Agent 最具智能特性的部分。传统的测试脚本一旦报错,就需要人工介入。而基于 LangGraph 的 Agent 会将报错视为一次“学习机会”。

1、错误分类与决策

Agent 必须区分两类错误:

(1)测试代码错误:比如语法错误、导入丢失、变量名拼写错误。这类错误需要通过修改测试代码来修复。

(2)被测系统错误:测试代码运行正常,但断言失败(例如预期 200,实际返回 500)。这可能是一个真实的 Bug,也可能是测试期望有误。

2、修正工作流

当捕获到 Traceback 后,LangGraph 将状态流转至 Reflect 节点。该节点构建一个新的 Prompt:

"你生成的代码在执行时报错了。 错误信息:{traceback} 原始代码:{code} 请分析错误原因。如果是语法错误,请修正代码。如果是 API 返回值不符合预期,请检查是否是 Spec 理解错误,或者标记为潜在 Bug。"

这种机制使得 Agent 能够自动修复诸如“忘记导入 datetime 库”或“JSON 字段名解析错误”等低级问题,从而大幅提高测试生成的成功率 。

下期预告:

系统跑通了,但它的实际效果如何?真的能降本增效吗? 请关注系列终章:《ROI 实录:引入 AI Agent 后,我们的接口测试维护成本降低了 70%》。


📡更多系列文章、开源项目、关键洞察、深度解读、技术干货

🌟请持续关注佳杰云星

💬欢迎在评论区留言或私信领取 Docker 沙箱实现源码片段~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 19:31:40

【2024必看】量子编程工具链进化:VSCode扩展究竟改变了什么?

第一章:量子模拟器扩展的 VSCode 兼容性Visual Studio Code(VSCode)作为现代开发者的主流编辑器,其强大的扩展生态为前沿技术领域提供了灵活支持。随着量子计算的发展,量子模拟器扩展逐渐成为科研与工程实践中的关键工…

作者头像 李华
网站建设 2026/10/6 0:46:02

Wan2.2-Animate-14B:免费开源的终极角色动画革命

Wan2.2-Animate-14B:免费开源的终极角色动画革命 【免费下载链接】Wan2.2-Animate-14B 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.2-Animate-14B 在数字内容创作领域,Wan2.2-Animate-14B的出现彻底改变了角色动画的制作方式。这…

作者头像 李华
网站建设 2026/10/6 5:08:53

3种Web方案:GoCV图像处理结果的前端展示指南

3种Web方案:GoCV图像处理结果的前端展示指南 【免费下载链接】gocv hybridgroup/gocv: 是一个基于 Go 语言的开源计算机视觉库,支持多种计算机视觉算法和工具。该项目提供了一个简单易用的计算机视觉库,可以方便地实现图像和视频处理算法&…

作者头像 李华
网站建设 2026/10/5 10:41:06

SlopeCraft:从平面到立体的Minecraft地图画创作革命

SlopeCraft:从平面到立体的Minecraft地图画创作革命 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft 还在为Minecraft中单调的平面地图画感到乏味吗?想要在地图展示…

作者头像 李华
网站建设 2026/10/5 8:07:37

从零构建高可用云原生Agent:7步实现精准Docker服务发现

第一章:云原生Agent与Docker服务发现概述在现代分布式系统中,云原生Agent作为自动化运维和动态配置管理的核心组件,承担着服务注册、健康检查、配置同步等关键职责。这类Agent通常以内嵌或边车(Sidecar)模式运行&#…

作者头像 李华
网站建设 2026/10/5 8:49:33

量子计算不再神秘,手把手教你导出Azure CLI作业结果

第一章:量子计算与Azure CLI集成概述量子计算正逐步从理论研究迈向实际应用,微软通过Azure Quantum平台为开发者提供了访问量子硬件和模拟器的能力。结合Azure CLI这一跨平台命令行工具,用户能够在本地或云端高效管理量子工作负载&#xff0c…

作者头像 李华