利用 Coze 从零开始搭建AI生成测试用例 Bot

最近类 Dify 的工具比较多,大体上都是想吃 GPTs 这碗饭的。而势头比较猛的就是字节旗下的 Coze 。

它最大的竞争力就是免费的 GPT4 。虽然有次数限制,但是根据本人的经验,基本上是畅用。

于是利用 Coze 搭建一个测试用例自动生成 Bot 的想法很自然的生了出来。

当然,第一期的目标已经完成了,这里先打个广告,欢迎各位去尝试使用这个机器人,地址是需求文档转测试用例

前序

工欲善其事,自然是先看看别人怎么做的。来到 Bot Store,搜索 "测试用例"。选择了一个人最多的 Bot 试用了一下,截图如下。

image.png

感觉不是很好,像是被我输入的内容劫持了目标,输出了一些奇怪的东西。

后续又试了一些其他的内容,大体上表现都差不多,存在以下问题:

  1. Prompt 被输入内容劫持,没有实现预期目标。
  2. 出现错漏,并且无法修改。

看起来大部分都是 Single Agent 模式,而且有些用的还是 3.5,效(gou)果(dou)很(bu)差(yong)。

设定目标

基于使用别人的 Bot 所了解到的问题和自己心里对一个生成测试用例 Bot 的期望。我做了如下产品规划:

  1. 基于需求文档输出测试用例。
  2. 允许用户修改错误内容或者输入背景信息
  3. 输出要稳定

重点说一下 2 和 3 。

对大模型比较熟悉的朋友肯定清楚,单一的需求文档,在人类之间进行流转的时候,我们会自然而然的带上这些背景信息。

比如我说登录页面,相信各位脑海里一定立刻蹦出来两个输入栏一个登录按钮,或者一个输入栏、一个验证码、一个登录按钮这种交互。顺带的什么长度限制、邮箱限制、验证码过期这些信息都立刻带了出来。

但是!大模型它不知道啊,它只知道你这一期允许了手机号登录,但是它不知道以前支不支持邮箱,这个得人来告诉他。

所以,支持输入背景信息或者修改错误内容这个是必须的。

而 3 这个,就是 Coze 本身的问题了,这个会在后面细说。

开始搭建

基础的 Bot 、Workflow的创建就不说了,都是点击按钮就能完成的事,我们主要聊一下里面的内容。

需要哪些 Workflow

我目前的规划是

  1. 按固定格式重写需求文档的 Workflow。
    1.1 补充背景信息或指正错误的 Workflow,用于进一步优化需求文档。
    1.2 从 Knowledge 自动获取背景信息的 Workflow,用于自动优化需求文档。
  2. 切割需求文档的 Workflow。
  3. 生成测试用例的 Workflow。
    3.1 用户输入自己的测试用例,总结用户风格的 Workflow。

很显然,主流程1/2/3都是相对容易实现的,而支线流程1.1和3.1相对来说也好做,最复杂的就是支线流程1.2。

我也很有自知之明,第一步肯定是先把主流程1/2/3,以及支线1.1完成,这样最起码会有一个可用的 Bot,而更高级的追求可以后面持续更新。

开始搭建 Workflow

其实 Workflow 的搭建是相对容易的,对低代码稍有了解的同学应该都很清楚,Workflow 本质也是低代码,只是加入了 LLM 这个选项而已。

具体创建的流程就不细说,这里以重写需求文档这个 Workflow 举例,来聊一些细节。

1. LLM

既然都用了 Coze 了,那工作流里不带上 LLM 怎么也说不过去。

以重写需求文档这个目标来说,LLM 主要要做的事情就是重写需求文档(你是懂废话文学的)。

hold on,hold on !

先别急着骂,你以为你理解了重写需求文档, LLM 就理解了吗?

你理解的重新描写一下瀑布,是飞流直下三千尺,疑是银河落九天。

LLM 理解的重写描写一下瀑布是

image.png

它输出的内容看起来没什么问题,但是总是跟你想的不一样。

所以我们得给 LLM 做一些预期管理,就是我得告诉他你描写的瀑布应该是怎么样的,比如

image.png

看看,虽然和李白写的还差非常多,但是已经很不错了,它甚至还会押韵。

所以你得明确的告诉 LLM ,你希望重写后的格式是怎么样的,这个格式可以是你们公司内部常用的,或者就是你个人喜欢的风格,它最好是方便 LLM 理解的单句,这样的话会减少歧义的发生。

当然,具体写成什么样,我就不方便贴我自己的了,总之大家可以参考我上面说的,去生成一个 LLM。

LLM 还有一个非常重要的能力,就是 Batch Processing。


image.png

具体的作用就是,你可以传一个列表给它,它会按照一样的逻辑批量处理这些内容,这在生成测试用例时非常有用。

2. 变量

在 LLM 给你一个答案之后,如果是一个简单的 Bot ,这个时候任务都已经完成了,但是基于上面规划的宏大愿景,我们肯定得用上变量。

变量这个事,还不能只靠 Workflow 自己,还必须要搭配着 Bot 来。

首先你得在你的 Bot 上创建变量,比如 prd_content_rewrite ,如下图

image.png

当然这种图只是保存变量的,引用变量也同样重要。

然后你再去 Workflow 中应用,如下图


image.png

最后,当你的工作流放到对应 Bot 下工作时,变量就会正是生效。

你可以在调试窗口的右上角找到当前已经设置过的变量,如图

image.png

3. 完成

按照同样的逻辑,我们在上述四个 Workflow 中都分别设置好 LLM 和变量保存动作,经过调试,确认好以下几个关键点

  1. 重写需求文档。可以按照你的习惯或公司要求将用例重写,并且将重写后的内容保存到变量中,方便后续使用。
  2. 修改需求文档。这一步只需要将重写后的需求文档和用户的修改意见丢进 LLM,让 LLM 帮你修改对应部分即可。当然了,同样要将 LLM 输出的内容保存到变量。
  3. 切割需求文档。从变量中获取到重写后的需求文档,然后利用 LLM 进行切割,切割后的内容切记要保留成 List 模式,这里要利用 Code 的能力,如果不会代码的话,可以原地放弃或者开始学习。
  4. 输出测试用例。读取切割后的需求文档,利用 Batch Porcessing 的能力,将切割后的需求文档按照 LLM 的要求转成测试用例。还记得我上面说到 LLM 吗?规定好你想要输出的用例的格式是非常重要的一件事,一定要多尝试。

开始构建 Bot

基础介绍

Workflow 的概念更接近于平常使用的代码,所以在理解上还算是非常容易入门。而 Bot 则是另外一件事情,它更像是一个中枢,会决定调用哪些 Workflow 和 Bot,而这些都是利用自然语言来完成的。

这里我按照最开始说的,选择了 Multi Agent 的形式。

目前我对 Multi Agent 的理解就是,里面集合了很多个处理器(Agent),一个处理器可以处理一类事情(一个或多个 Workflow),每个处理器都要有个地方(Agent Prompt)去告诉 Bot 我是干嘛的,相当于自我介绍了。

而 Bot 会根据 Agent 的自我介绍,在后续任务来了之后,决定使用谁。

而 Agent 之间可以连线,和 Workflow 中的连线类似,当你选择的切换节点方式为「Recognized during the operation of the current node」时,当前节点,会优先考虑使用自己或直属下级节点去做任务。

停一停,停一停!相信这一大段话很多人看到这里都要懵逼了,单个字我都懂,组合在一起却懵了。

总结一下:

  1. 一个 Bot 有多个 Agent。
  2. Agent 要非常明确的介绍什么时候用自己。
  3. 因为我们是流程性的,推荐使用「Recognized during the operation of the current node」,这个也是默认的配置。

(什么?还没看懂?那你先自己操作一下 Bot 吧,基础概念我也没办法。)

跳转问题

OK,弄懂了这些基础概念之后,接下来的事情就很简单了。。吗?

啊,并不是。

还是以重写需求文档为例。

按照上述的规则,我们只需要新建一个 Agent,告诉前序节点,用户需要重写需求文档的时候用我,而我则是使用重写需求文档这个工作流来处理工作的。

但是实际操作下来,我发现重写需求文档是一个非常抽象的过程,或者这么说,当用户贴了一个需求文档进来的时候,AI会认为需要重写、切割还是直接输出测试用例?

有一些经验的同学会说,刚刚不是说了可以连线吗?直连一条线串下去不就好了?

又或者会说,那你不要只贴测试用例,你顺带把你要做的事情写进去不就好了?

好,好,好!

你们的想法与我不谋而合!但是经过我的试验,发现行不通。

首先第一个,只有一条线的串行。在实操中发现 AI 还是经常无法自动转到下一个 Agent,合理的猜测时,当前节点在选择下一个节点时,发现没有适合这项工作的,所以会留在当前节点,直接结束动作。又或者不按照我们得工作流去操作,导致后续内容经常失败。

第二个,听起来也是可以解决问题的,但是实际操作下来发现依旧很难,可能是因为文档内容较多的原因,输入的意图经常会识别不到。

总之,从理论上可以的办法,在这里都不太行的通,我并不是说100%失败,而是大概率失败,毕竟 LLM 是个概率模型(笑)。

解决跳转问题

后来我找了非常多资料,终于看到了一个 谁是卧底 的 Bot,并且管中窥豹,看到了它的解决方案,说起来非常反直觉,它直接在 Agent Prompt 中写:用户输入"继续" 或者"下一步"时触发。

emmm

虽然我挺疑惑的,但是我还是非常自觉的按照他的逻辑修改了自己的 Agent Prompt 和 Workflow 的返回结果。

没想到跳转的问题居然真的解决了。

image.png

目前整个 Bot 如图所示。

img_v3_02at_447aa153-4e6c-482c-862c-2ae017b60c1g.jpg

生成效果,如图所示

阶段性完结&撒花

经过大概3天时间的摸索,终于初步完成了这个 Bot。当然,里面还有些设想没有完工的,并且从效果样式能看到,用例生成的不够细节,这些都是问题,我也会持续解决。

在整个产出的过程中,还发现了 Coze 的很多问题,我都放到机器人的注意事项中的。

再次欢迎各位去尝试使用这个机器人,地址是需求文档转测试用例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容