coze鉴权工作流设计与实现

先说明一下,我不知道现在coze有没有已经可以落地使用的鉴权方案,目前coze的变现只停留在上架模板和使用Zion搭建智能体网站两个方向上(国外版好像还能接入广告插件,国内的没试过),但是Zion模板需要付费,coze模板也不是人人都可以上架的,所以研究了一套鉴权工作流。

这个鉴权工作流不难,下面我们来拆解一下具体的实现步骤

准备工作

我们需要准备一个数据库,数据库中的基础字段有token和count,token用于分配给用户,count用来计算该用户今日调用次数。如果还想添加其他控制内容也可以加入到数据库表中,这里只提供一个最基础的思路。


 
注意模式要选择多用户,uuid在后面有用
 
接下来准备一个工作流,工作流里有代码节点和数据库节点。
 

具体实现

这个工作流不依赖输入,所以输入节点可以不给,后面接入代码块,用来生成随机token插入数据库。

说明一下不直接使用大模型插库的原因是:

  1. 为了更高的可控性,代码生成的token随机性更强,更不容易重复

  2. 节省大模型调用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拆解落地实操。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值