国内首个测试行业大模型及工具TestAgent开源,附简单评估!

文摘   2024-10-17 12:54   重庆  


整理|TesterHome社区

早在2023年10月,蚂蚁质量AnTest宣布开源国内首个测试行业大模型及工具TestAgent


那么,TestAgent究竟是一个怎么样的工具呢?


据官方的说法,TestAgent旨在构建测试领域的“智能体”,融合大模型和质量领域工程化技术,促进质量技术代系升级。我们期望和社区成员一起合作,打造创新的测试领域解决方案,构建24小时在线的测试助理服务,让测试如丝般顺滑。


根据官方的说明,本次版本包含了性能最强的7B测试领域大模型,以及配套的本地模型快速发布和体验工程化框架。



项目地址:

https://github.com/codefuse-ai/Test-Agent

codefuse官网:https://codefuse.alipay.com/



本地Mac M1体验效果




魔搭体验效果

体验地址:https://modelscope.cn/studios/codefuse-ai/TestGPT-7B-demo/summary


以下是更多来自TestAgent官方的说明:


本期特性


◇ 模型:本期我们开源了测试领域模型TestGPT-7B。模型以CodeLlama-7B为基座,进行了相关下游任务的微调:


  • 多语言测试用例生成(Java/Python/Javascript) 一直以来都是学术界和工业界非常关注的领域,近年来不断有新产品或工具孵化出来,如EvoSuite、Randoop、SmartUnit等。然而传统的用例生成存在其难以解决的痛点问题,基于大模型的测试用例生成在测试用例可读性、测试场景完整度、多语言支持方面都优于传统用例生成工具。本次重点支持了多语言测试用例生成,在我们本次开源的版本中首先包含了Java、Python、Javascript的测试用例生成能力,下一版本中逐步开放Go、C++等语言。


  • 测试用例Assert补全 对当前测试用例现状的分析与探查时,我们发现代码仓库中存在一定比例的存量测试用例中未包含Assert。没有Assert的测试用例虽然能够在回归过程中执行通过,却无法发现问题。因此我们拓展了测试用例Assert自动补全这一场景。通过该模型能力,结合一定的工程化配套,可以实现对全库测试用例的批量自动补全,智能提升项目质量水位。


◇ 工程框架:本地模型快速发布和体验工程化框架。

  • ChatBot页面

  • 模型快速启动

  • 私有化部署,本地化的GPT大模型与您的数据和环境进行交互,无数据泄露风险,100%安全


后续我们会持续迭代模型和工程化能力:

• 不断加入更多令人激动的测试域应用场景,如领域知识问答、测试场景分析等

• 支撑面向测试场景的copilot 工程框架开放,如测试领域知识智能embedding、测试通用工具API体系、智能测试Agent等,敬请期待!

• 以7B为基础,逐步扩展至13B、34B模型。


性能最强的7B测试领域大模型
目前在TestAgent中,我们默认使用了TestGPT-7B模型。与当前已有开源模型相比,TestGPT-7B模型在用例执行通过率(pass@1)、用例场景覆盖(平均测试场景数)上都处于业界领先水平。

TestGPT-7B模型核心能力的评测结果如下:

多语言测试用例生成

针对模型支持的三种语言:Java、Python、Javascript,Pass@1评测结果如下:

测试用例Assert补全

目前模型支持Java用例的Assert补全,Pass@1评测结果如下:



工程架构

大模型的号角已经吹响,测试领域大模型也在不断进化中,通过预训练过程中积累的丰富世界知识,在复杂交互环境中展现出了非凡的推理与决策能力。

尽管在测试领域中基础模型取得了显著的成果,但仍然存在一些局限性,特定领域的测试任务通常需要专业化的工具或领域知识来解决。例如,基础模型可以通过预训练知识完成单次测试代码生成和测试文本生成等任务,但处理复杂的集成用例生成、特定领域用例生成和测试流程pipeline交互等问题时,需要更专业的工具和领域知识。

因此将专用工具与基础模型整合在一起,可以充分发挥它们各自的优势。专用工具可以解决模型时效性不足、增强专业知识、提高可解释性和鲁棒性的问题。而基础模型则具备类人的推理规划能力,可以理解复杂的数据和场景,并与现实世界进行交互。

在本期开放模型工程化部署和ChatBot基础上,我们将继续在测试开源领域深耕投入。协同社区志趣相投开发者们,一起打造测试领域最领先的Tools工程体系、智能测试助理和测试开源工程!
快速使用

前置准备

模型下载

您可在modelscopehuggingface上获取到模型的详细信息并下载模型文件。

https://modelscope.cn/models/codefuse-ai/TestGPT-7B

https://huggingface.co/codefuse-ai/TestGPT-7B

环境安装

git clone https://github.com/codefuse-ai/Test-Agent
cd Test-Agent
pip install -r requirements.txt

在开始运行TestGPT-7B模型之前,请确保你的执行环境拥有大约14GB的显存。

启动服务

项目提供了网页端快速搭建UI的能力能够更直观的展示模型交互和效果,我们可以使用简单的几个命令把前端页面唤醒并实时调用模型能力。在项目目录下,依次启动以下服务:

启动controller

python3 -m chat.server.controller

启动模型worker

python3 -m chat.server.model_worker --model-path models/testgpt --device mps

对于启动方式,可以按需选择以下几种配置选项:

• --device mps 用于在Mac电脑上开启GPU加速的选项(Apple Silicon或AMD GPUs);

• --device xpu 用于在Intel XPU上开启加速的选项(Intel Data Center and Arc A-Series GPUs);

    • 需安装Intel Extension for PyTorch:https://intel.github.io/intel-extension-for-pytorch/xpu/latest/tutorials/installation.html

    • 设置OneAPI环境变量:source /opt/intel/oneapi/setvars.sh

    • --device npu 用于在华为AI处理器上开启加速的选项;


    • 需安装Ascend PyTorch Adapter:https://github.com/Ascend/pytorch

    • 设置CANN环境变量:source /usr/local/Ascend/ascend-toolkit/set_env.sh

    • --device cpu 单独使用CPU运行的选项,不需要GPU;

    • --num-gpus 2 指定并发gpu运行的选项。


启动web服务

python3 -m chat.server.gradio_testgpt

待服务准备就绪后,我们可以打开本地启动的web服务地址(http://0.0.0.0:7860),就能看到完整的前端页面了。






TestAgent简单评估
目前,在TesterHome社区,有小伙伴对这一开源项目进行了体验,以下是这位同学的简单评估(仅代表个人体验和评价)

环境简介

如果你需要用到部署,可以先看模型的环境依赖,因为会用到 pytorch 然后在看https://modelscope.cn的文档。

建议还是用GPU来训练,CPU需要修改下demo那边的.to("cuda")

配置pyconda来做管理 ,一定要用虚拟环境,指定版本Python3.8。说是大于3.8,实际上3.10版本以上会有问题,一些库有依赖的问题。

模型那边可以按照这个来安装,modelscope和github不一样,不能下载压缩包。我没用git的方式,因为你最终要载入模型,还是要用到
pypip3 install modelscope transformers accelerate sentencepiece protobuf

可能会存在需要解决下以下依赖
pypyppeteer 1.0.2 requires websockets<11.0,>=10.0
ultralytics 8.0.158 requires opencv-python>=4.6.0


PS:如果你本地是用 opencv-python-headless 的才需要解决,正常情况下 headless 是主流因为无 GUI

from modelscope import snapshot_downloadmodel_dir = snapshot_download('codefuse-ai/TestGPT-7B',cache_dir="指定你的模型缓存绝对路径",revision = 'v1.0.0')print(f"model_dir={model_dir}") # 打印出来下载模型的位置

revision 就是看模型版本的tag。模型比较大,需要用到 cache_dir,落地生产还会需要模型映射的,另外如果做线上不要直接下,用离线。

方案:挂载盘,13GB 预先下载下来,用rsync在服务内部离线拷贝过来。

服用方式

目前评估批量执行生成还是比较有价值的。

官方是发布到了 Gradio 上面有案例,自己开发需要做批量的任务。

安装环境:pypip3 install gradio_client,以下为示例代码:

from gradio_client import Clientclient = Client("https://www.modelscope.cn/api/v1/studio/codefuse-ai/TestGPT-7B-demo/gradio/")result = client.predict(
   """为以下Python代码生成单元测试\ndef timestamp_to_datatime(stamp: int or float or str):
   if isinstance(stamp, str):
       stamp = float(stamp)
   return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(stamp))        
"""
, 512,fn_index=0)print(result)

然后把不同任务反馈的字符串 result 转成对应语言的文件,打包下载。

可以用 mongo 来存储结论,这里就不给设计了。

返回的内容可以定义一个数据结构,自己做更精细的模型。因为蚂蚁这个 7B 的要后面自己训练和优化,硬件成本还是很大的。

评估下模型的情况 (Python)

Python 整体在三门语言里面是中位的。

这里评估只列出一部分吧,实际自己做评估需要用多套代码,可以通过这个自己做一个参考。

prompt = """为以下Python代码生成单元测试\ndef timestamp_to_datatime(stamp: int or float or str):
   if isinstance(stamp, str):
       stamp = float(stamp)
   return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(stamp))"""

   print(f"prompt代码嵌套层数:{nest_count(prompt)}")
   print(f"prompt代码路径计算:{paths_count(prompt)}")

prompt 代码嵌套层数:2,prompt 代码路径计算:1。
本次代码衡量分是1.5,测试训练结果是按照cuda GPU训练的。中等代码衡量分3-5分。


PS:表格里面好像代码格式无法格式化,这里只能麻烦看官自己处理下啦。

建议

在这些检查项上面还可以测试下是否支持验证递归和一些自定义的数据结构,用例和参数是否有效。

上面用的面向过程方法级别去做的测试,可以用类级别的代码片段去做尝试后,添加一些检查项,再做决定。

通常标准是通过项比较多并且重要的都有,还是推荐用的。

而通过少,维护成本高和还得一个个检查的话,还是等成熟迭代后在用,这块主要还是依赖了7B大模型的迭代。

最终结论

做模型可都不容易啊,可以等继续完善点再次使用。比如丰富了支持主流的 pytest 和一些 UT 的插件。Golang语言的支持。
附社区帖子:https://testerhome.com/topics/38022


1.使用Pytest进行单元测试的初学者指南

2.滴滴开源新项目Unify:聚焦Flutter与原生通信难题,整体交付提效50%+

3.已开源!一款支持HarmonyOS NEXT系统的UI自动化框架hmdriver2发布

4.测试团队FastGPT实战,解锁AI大模型知识库搭建秘籍

5.MTSC2024上海大会,现场录播视频

6.AI测试|自己搭一个AI Agent玩玩


TesterHome社区
测试之家(TesterHome)由一线测试工程师发起和运营的测试技术社区,社区主旨是公益、开源、分享、落地,紧跟前沿技术趋势,致力于推进软件质量保障与安全,是软件质量保障领域的风向标。我们的理念:Coding Share Show Cool
 最新文章