先说明一下,我不知道现在coze有没有已经可以落地使用的鉴权方案,目前coze的变现只停留在上架模板和使用Zion搭建智能体网站两个方向上(国外版好像还能接入广告插件,国内的没试过),但是Zion模板需要付费,coze模板也不是人人都可以上架的,所以研究了一套鉴权工作流。
这个鉴权工作流不难,下面我们来拆解一下具体的实现步骤
准备工作
我们需要准备一个数据库,数据库中的基础字段有token和count,token用于分配给用户,count用来计算该用户今日调用次数。如果还想添加其他控制内容也可以加入到数据库表中,这里只提供一个最基础的思路。
注意模式要选择多用户,uuid在后面有用
接下来准备一个工作流,工作流里有代码节点和数据库节点。
具体实现
这个工作流不依赖输入,所以输入节点可以不给,后面接入代码块,用来生成随机token插入数据库。
说明一下不直接使用大模型插库的原因是:
-
为了更高的可控性,代码生成的token随机性更强,更不容易重复
-
节省大模型调用token
async function main({ params }: Args): Promise<Output> {
// 浏览器环境
let token = ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16))
return {
"token": token
}
}
这样我们就会得到UUID V4的一个token,这个token在亿级内的数据量基本不会重复。
继续在代码块后面接入数据库节点,在工作流里把token存入数据库,并且把count初始化成0
我们已经生成了一个token并插入了数据库。
接下来,需要判断这个用户是不是已经有了token,如果有了,则把这条数据给他删掉。
这里用了一个很巧妙的机制,使用新生成的这个toekn可以查到用户的uuid,用用户的uuid再去查询库里有多少个token,如果多于一条,就把新生成的这条toekn删掉,这样就可以确保一个用户只会有一个token,从而限定住用户的调用次数。
经过实验,coze的数据库不支持写数据库函数,也不支持写复杂的数据库语句,我们只能用简单的数据库语句结合代码把这个操作拆分成几个步骤。
分别是,一个数据库节点用于查询生成的token入库之后的uuid --> 一个数据库节点用于查询这个uuid下有多少个toekn --> 一个代码节点判断查出来的toekn是否多余1条 -->一个判断节点控制不同分支 --> 一个数据库节点删除多出来的那条token
下面我们上流程图和详细配置
//judgeMul接点中的代码
async function main({ params }: Args): Promise<Output> {
// 构建输出对象
const ret = {
havenMore:false
};
if(params.input.length >1){
ret.havenMore = true
}
return ret;
}
到这里,所有核心节点都已经配置好了,最后的unifiedOutput代码节点是我用来统一输出的,可以加也可以不加。就不做介绍了。
如何在其他Bot中使用
我们在鉴权工作流中让数据库插入了token和count数据,但是该如何使用呢?只需要用户把token作为输入给到我们制作的其他Bot的工作流中,调用数据库节点,查询库中是否有这个数据,没有直接返回,有的话在进行下面步骤的调用,相当于一个网关。
值得一提的是需要使用到多智能体模式,鉴权工作流分配给一个单独的智能体,把他和实际要使用的智能体放在一起,这样可以实现他们数据库数据之间的共享了。
这里随便拿一个Bot举例
连在一起后,我们修改实际要使用的bot的工作流,添加数据库节点和代码节点。把他们和开始节点串行连接,一开始就控制住权限
数据库节点用来查询用户输入的这个token目前的count是多少,配置如下
代码节点用来做控制
async function main({ params }: Args): Promise<Output> {
// 构建输出对象
const ret = {
author:true,
msg:""
}
if(params.outputList.length<1){
ret.author = false
ret.msg = '请提供有效token'
}else if(params.outputList[0].count>=3){
ret.author = false
ret.msg = '今日免费次数已用完'
}
return ret;
}
后面再接一个根据author判断的判断节点就大功告成了!
以上就是我从0-1搭建鉴权bot的完整经过。想体验实际效果的小伙伴也可以来我在coze商店发布的bot进行试用!
这个bot是可以自动生成英音双字幕儿童绘本视频的,现在每个帐号每天有3次免费次数。
关注我,不定期分享coze使用心得和bot拆解落地实操。