最近类 Dify 的工具比较多,大体上都是想吃 GPTs 这碗饭的。而势头比较猛的就是字节旗下的 Coze 。
它最大的竞争力就是免费的 GPT4 。虽然有次数限制,但是根据本人的经验,基本上是畅用。
于是利用 Coze 搭建一个测试用例自动生成 Bot 的想法很自然的生了出来。
当然,第一期的目标已经完成了,这里先打个广告,欢迎各位去尝试使用这个机器人,地址是需求文档转测试用例
前序
工欲善其事,自然是先看看别人怎么做的。来到 Bot Store,搜索 "测试用例"。选择了一个人最多的 Bot 试用了一下,截图如下。
感觉不是很好,像是被我输入的内容劫持了目标,输出了一些奇怪的东西。
后续又试了一些其他的内容,大体上表现都差不多,存在以下问题:
- Prompt 被输入内容劫持,没有实现预期目标。
- 出现错漏,并且无法修改。
看起来大部分都是 Single Agent 模式,而且有些用的还是 3.5,效(gou)果(dou)很(bu)差(yong)。
设定目标
基于使用别人的 Bot 所了解到的问题和自己心里对一个生成测试用例 Bot 的期望。我做了如下产品规划:
- 基于需求文档输出测试用例。
- 允许用户修改错误内容或者输入背景信息
- 输出要稳定
重点说一下 2 和 3 。
对大模型比较熟悉的朋友肯定清楚,单一的需求文档,在人类之间进行流转的时候,我们会自然而然的带上这些背景信息。
比如我说登录页面,相信各位脑海里一定立刻蹦出来两个输入栏一个登录按钮,或者一个输入栏、一个验证码、一个登录按钮这种交互。顺带的什么长度限制、邮箱限制、验证码过期这些信息都立刻带了出来。
但是!大模型它不知道啊,它只知道你这一期允许了手机号登录,但是它不知道以前支不支持邮箱,这个得人来告诉他。
所以,支持输入背景信息或者修改错误内容这个是必须的。
而 3 这个,就是 Coze 本身的问题了,这个会在后面细说。
开始搭建
基础的 Bot 、Workflow的创建就不说了,都是点击按钮就能完成的事,我们主要聊一下里面的内容。
需要哪些 Workflow
我目前的规划是
- 按固定格式重写需求文档的 Workflow。
1.1 补充背景信息或指正错误的 Workflow,用于进一步优化需求文档。
1.2 从 Knowledge 自动获取背景信息的 Workflow,用于自动优化需求文档。 - 切割需求文档的 Workflow。
- 生成测试用例的 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 理解的重写描写一下瀑布是
它输出的内容看起来没什么问题,但是总是跟你想的不一样。
所以我们得给 LLM 做一些预期管理,就是我得告诉他你描写的瀑布应该是怎么样的,比如
看看,虽然和李白写的还差非常多,但是已经很不错了,它甚至还会押韵。
所以你得明确的告诉 LLM ,你希望重写后的格式是怎么样的,这个格式可以是你们公司内部常用的,或者就是你个人喜欢的风格,它最好是方便 LLM 理解的单句,这样的话会减少歧义的发生。
当然,具体写成什么样,我就不方便贴我自己的了,总之大家可以参考我上面说的,去生成一个 LLM。
LLM 还有一个非常重要的能力,就是 Batch Processing。
具体的作用就是,你可以传一个列表给它,它会按照一样的逻辑批量处理这些内容,这在生成测试用例时非常有用。
2. 变量
在 LLM 给你一个答案之后,如果是一个简单的 Bot ,这个时候任务都已经完成了,但是基于上面规划的宏大愿景,我们肯定得用上变量。
变量这个事,还不能只靠 Workflow 自己,还必须要搭配着 Bot 来。
首先你得在你的 Bot 上创建变量,比如 prd_content_rewrite ,如下图
当然这种图只是保存变量的,引用变量也同样重要。
然后你再去 Workflow 中应用,如下图
最后,当你的工作流放到对应 Bot 下工作时,变量就会正是生效。
你可以在调试窗口的右上角找到当前已经设置过的变量,如图
3. 完成
按照同样的逻辑,我们在上述四个 Workflow 中都分别设置好 LLM 和变量保存动作,经过调试,确认好以下几个关键点
- 重写需求文档。可以按照你的习惯或公司要求将用例重写,并且将重写后的内容保存到变量中,方便后续使用。
- 修改需求文档。这一步只需要将重写后的需求文档和用户的修改意见丢进 LLM,让 LLM 帮你修改对应部分即可。当然了,同样要将 LLM 输出的内容保存到变量。
- 切割需求文档。从变量中获取到重写后的需求文档,然后利用 LLM 进行切割,切割后的内容切记要保留成 List 模式,这里要利用 Code 的能力,如果不会代码的话,可以原地放弃或者开始学习。
- 输出测试用例。读取切割后的需求文档,利用 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」时,当前节点,会优先考虑使用自己或直属下级节点去做任务。
停一停,停一停!相信这一大段话很多人看到这里都要懵逼了,单个字我都懂,组合在一起却懵了。
总结一下:
- 一个 Bot 有多个 Agent。
- Agent 要非常明确的介绍什么时候用自己。
- 因为我们是流程性的,推荐使用「Recognized during the operation of the current node」,这个也是默认的配置。
(什么?还没看懂?那你先自己操作一下 Bot 吧,基础概念我也没办法。)
跳转问题
OK,弄懂了这些基础概念之后,接下来的事情就很简单了。。吗?
啊,并不是。
还是以重写需求文档为例。
按照上述的规则,我们只需要新建一个 Agent,告诉前序节点,用户需要重写需求文档的时候用我,而我则是使用重写需求文档这个工作流来处理工作的。
但是实际操作下来,我发现重写需求文档是一个非常抽象的过程,或者这么说,当用户贴了一个需求文档进来的时候,AI会认为需要重写、切割还是直接输出测试用例?
有一些经验的同学会说,刚刚不是说了可以连线吗?直连一条线串下去不就好了?
又或者会说,那你不要只贴测试用例,你顺带把你要做的事情写进去不就好了?
好,好,好!
你们的想法与我不谋而合!但是经过我的试验,发现行不通。
首先第一个,只有一条线的串行。在实操中发现 AI 还是经常无法自动转到下一个 Agent,合理的猜测时,当前节点在选择下一个节点时,发现没有适合这项工作的,所以会留在当前节点,直接结束动作。又或者不按照我们得工作流去操作,导致后续内容经常失败。
第二个,听起来也是可以解决问题的,但是实际操作下来发现依旧很难,可能是因为文档内容较多的原因,输入的意图经常会识别不到。
总之,从理论上可以的办法,在这里都不太行的通,我并不是说100%失败,而是大概率失败,毕竟 LLM 是个概率模型(笑)。
解决跳转问题
后来我找了非常多资料,终于看到了一个 谁是卧底 的 Bot,并且管中窥豹,看到了它的解决方案,说起来非常反直觉,它直接在 Agent Prompt 中写:用户输入"继续" 或者"下一步"时触发。
emmm
虽然我挺疑惑的,但是我还是非常自觉的按照他的逻辑修改了自己的 Agent Prompt 和 Workflow 的返回结果。
没想到跳转的问题居然真的解决了。
目前整个 Bot 如图所示。
生成效果,如图所示
阶段性完结&撒花
经过大概3天时间的摸索,终于初步完成了这个 Bot。当然,里面还有些设想没有完工的,并且从效果样式能看到,用例生成的不够细节,这些都是问题,我也会持续解决。
在整个产出的过程中,还发现了 Coze 的很多问题,我都放到机器人的注意事项中的。
再次欢迎各位去尝试使用这个机器人,地址是需求文档转测试用例