扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话

不同用户登录,都能看到所有的会话记录——实现会话隔离(纯js)

1.访问Coze官网(www.coze.cn),注册并登录
2.进入主界面后,点击左侧(创建)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

 扣子 Coze 教程3. 配置智能体基础信息(根据个人需求进行配置,在写人设与回复逻辑的过程中,简单描述角色、要求,再利用扣子(coze)的AI优化功能进行相关的完善。)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

4.创建知识库(支持丰富的导入途径,涵盖了本地文档、网络数据源、Notion和飞书等多种选择)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

5.工作流配置请参考(https://blog.csdn.net/calmkey/article/details/)
6.点右上角发布之后,进入api就可以拿到代码在自己项目中使用

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

7.智能体就运行起来了

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

1 .创建 Oauth 应用并授权,跟着文档一步步操作(文档地址:https://www.coze.cn/open/docs/developer_guides/oauth_jwt)

第五步会生成一个公钥指纹,另外会默认下载一个是要文件(这个一定要保存好

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

Header、Payload,以及私钥(我理解这个就是进行加密,最终会生成一个JWT token)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

用这个替换CozeWebSDK.WebChatClient中的auth.token
Payload中的session_name,用户在业务侧的 UID,针对不同用户使用不同的session_name

所以按照以上思路,

1、我们需要找到一个加密工具,把这三者(Header、Payload,以及私钥)进行加密,这个用到了jsrsasign(cdn地址:https://cdnjs.cloudflare.com/ajax/libs/jsrsasign/8.0.20/jsrsasign-all-min.js)

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

2、拿到JWT token 进行api请求,并创建智能体

扣子coze 智能体 创建AI会话 会话隔离(JS版,附源码)

上面我用了一个cozeWeb,因为我的业务需求是只用用户登录了才显示智能体,退出登录了需要注销,所以当用户退出登录之后,调用cozeWeb.destroy()

源码:

// 先引入cdn库

https://cdnjs.cloudflare.com/ajax/libs/jsrsasign/8.0.20/jsrsasign-all-min.js

https://lf-cdn.coze.cn/obj/unpkg/flow-platform/chat-app-sdk/1.2.0-beta.10/libs/cn/index.js

// js文件

let cozeWeb = null

// 配置参数(替换为你的实际信息)

const COZE_CONFIG = {

    botId: ”,  //智能体 ID

    appId: ”,//OAuth ID 第五步创建应用的ID

    publicKey: ”, //OAuth 公钥

    privateKey:“ //OAuth 私钥,全复制进来

};

// 生成符合Coze要求的JWT

function generateCozeJwt(userUid) {

    const header = {

        alg: ‘RS256’,

        typ: ‘JWT’,

        kid: COZE_CONFIG.publicKey

    };

    const currentTime = Math.floor(Date.now() / 1000);

    const payload = {

        iss: COZE_CONFIG.appId,

        aud: “api.coze.cn”,

        jti: Math.random().toString(36).substr(2, 32) + Date.now(),

        iat: currentTime,

        exp: currentTime + 3600,

        session_name: userUid

    };

    const formattedPublicKey = COZE_CONFIG.privateKey;

    return window.KJUR.jws.JWS.sign(

        header.alg,

        JSON.stringify(header),

        JSON.stringify(payload),

        formattedPublicKey

    );

}

// 获得Token并创建Coze智能体界面

async function getAccessToken(jwt) {

    try {

        const response = await fetch(“https://api.coze.cn/api/permission/oauth2/token”, {

            method: ‘POST’,

            headers: {

                ‘Content-Type’: ‘application/json’,

                ‘Authorization’: `Bearer ${jwt}`

            },

            body: JSON.stringify({

                grant_type: ‘urn:ietf:params:oauth:grant-type:jwt-bearer’,

                duration_seconds: 900

            })

        });

        if (!response.ok) {

            throw new Error(`获取token失败,HTTP状态码: ${response.status}`);

        }

        const data = await response.json();

        cozeWeb = new CozeWebSDK.WebChatClient({

          config: {

            bot_id: COZE_CONFIG.botId

          },

          auth: {

            type: ‘token’,

            token: data.access_token,

            onRefreshToken: () => data.access_token

          },

          ui: {

            // 基础UI配置:应用图标、布局类型、语言及层级

            base: {

                icon: CozeLogo, // 应用图标URL

                layout: ‘pc’, // 布局类型:’pc’适配电脑端,’mobile’适配移动端

                lang: ‘zh-CN’, // 系统语言:’en’英文,’zh-CN’中文

                zIndex: 1000 // 聊天框层级

            },

            // 控制标题栏及关闭按钮显示

            header: {

              isShow: true, // 是否显示顶部标题栏

              isNeedClose: true, // 是否显示关闭按钮

            },

            // 控制右下角悬浮球显示

            asstBtn: {

              isNeed: true // 展示悬浮球

            },

            // 底部文案配置(修复:补充linkvars和footer的闭合括号+逗号)

            footer: {

                isShow: false, // 是否显示底部版权模块

            }, // 修复:补充footer的闭合括号

            // 会话列表配置:控制会话列表显示

            conversations: {

              isNeed: true, // 是否需要显示会话列表

            },

          }

        });

    } catch (error) {

        throw new Error(`获取Access Token失败: ${error.message}`);

    }

}

// 获取用户唯一标识

function getUserUid() _${Math.random().toString(36).slice(-6)}`;

        localStorage.setItem(‘coze_visitor_id’, visitorId);

    }

    return visitorId;

}

// 初始化Coze聊天

function initCozeChat()

    const userUid = getUserUid();

    const jwtToken = generateCozeJwt(userUid);

    getAccessToken(jwtToken);

}

// 初始化流程

export const init = async () => {

  try {

    initCozeChat()

  } catch (error) {

    console.error(‘初始化失败:’, error.message);

  }

}

export const destroy = () => {

  cozeWeb.destroy()

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/263864.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月12日 下午9:21
下一篇 2026年3月12日 下午9:21


相关推荐

关注全栈程序员社区公众号