【WebSocket】微信小程序原生组件使用SocketTask 调用星火认知大模型

news2024/9/23 7:33:21

直接上代码

微信开发者工具-调试器-终端-新建终端 进行依赖安装

npm install base-64

npm install crypto-js

然后顶部工具栏依次点击 工具-构建npm

// index.js
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
const Base64 = require('base-64');
const CryptoJS = require('crypto-js')
let socket = ""
Page({
  data: {
    APPID: "",//从开放平台控制台中获取
    APIKEY: "",//从开放平台控制台中获取
    APISecret: "",//从开放平台控制台中获取
    motto: 'Hello World',
    historyTextList: [],
    userInfo: {
      avatarUrl: defaultAvatarUrl,
      nickName: '',
    },
    hasUserInfo: false,
    canIUseGetUserProfile: wx.canIUse('getUserProfile'),
    canIUseNicknameComp: wx.canIUse('input.type.nickname'),
    TEXT: '你好,我的名字叫大王',
    sparkResult: '',
    tempRes: '' // 临时答复保存
  },
  bindViewTap() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad() {
    this.connectWebsocket()
  },
  getWebsocketUrl() {
    var _this2 = this;
    var url = "wss://spark-api.xf-yun.com/v3.5/chat";
    var host = "spark-api.xf-yun.com";
    var apiKeyName = 'api_key';
    var date = new Date().toGMTString();
    var algorithm = "hmac-sha256";
    var headers = "host date request-line";
    var signatureOrigin = "host: "
                          .concat(host, "\ndate: ")
                          .concat(date, "\nGET /v3.5/chat HTTP/1.1");
    var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, _this2.data.APISecret);
    var signature = CryptoJS.enc.Base64.stringify(signatureSha);
    var authorizationOrigin = "".concat(apiKeyName, "=\"")
                                .concat(_this2.data.APIKEY, "\",algorithm=\"")
                                .concat(algorithm, "\",headers=\"")
                                .concat(headers, "\",signature=\"")
                                .concat(signature, "\"");
    var authorization = Base64.encode(authorizationOrigin);
    url = "".concat(url, "?authorization=")
            .concat(authorization, "&date=")
            .concat(encodeURI(date), "&host=")//进行|不进行URRLENCODE均没报错
            .concat(host);
    return url;
  },
  connectWebsocket() {
    var url = this.getWebsocketUrl();
    socket = wx.connectSocket({
      url: url,
      success(res) {
        console.log('WebSocket 连接成功: ', res)
      },
      fail(err) {
        console.log('WebSocket 连接失败: ', err)
      }
    })
    // onOpen
    socket.onOpen((res) => {
      var _this = this;
      console.log('WebSocket 已连接',res)
      _this.data.historyTextList.push({
        "role": "user",
        "content": _this.data.TEXT
      });
      var params = {
        "header": {
          "app_id": _this.data.APPID,
          "uid": "123456789"
        },
        "parameter": {
          "chat": {
            "domain": "generalv3.5",
            "random_threshold": 0,
            "max_tokens": 1024
          }
        },
        "payload": {
          "message": {
            "text": _this.data.historyTextList
          }
        }
      };
      _this.sparkResult = _this.sparkResult + "\r\n我:" + _this.TEXT + "\r\n";
      _this.sparkResult = _this.sparkResult + "大模型:";
      console.log("发送第一帧...", JSON.stringify(params));
      socket.send({
        data:JSON.stringify(params),
        fail(err) {
          console.log('WebSocket 消息发送失败', err)
        }
      })
    })
    // onError
    socket.onError((err) => {
      console.log('WebSocket 连接失败:', err)
    })
    // onClose
    socket.onClose((ret) => {
      console.log('断开 WebSocket 连接', ret)
    })
    //监听接收到的消息
    socket.onMessage((res) => {
      let msg = res.data
      console.info("接收到的服务器消息--原始:")
      console.info(res)
      if (typeof msg === "string" && msg.startsWith("{")) {
        msg = JSON.parse(msg)
      }
      console.log("接收到的服务器消息", msg)
    })
  },
})

控制台输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1436669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ECE] P2.3Determine t_P_LH and t_P_HL from the oscilloscope

The terms t_P_LH and t_P_HL​​ refer to the propagation delays associated with the low-to-high and high-to-low transitions in a digital signal. These delays are essential in digital systems and are measured with respect to the voltage levels. (Low-to-High…

挑战杯 python+深度学习+opencv实现植物识别算法系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的植物识别算法研究与实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:4分 🧿 更多…

js数组和字符串之间的转换方式以及数组的一些方法

一、数组和字符串之间的转换方式 1)将字符串切割成字符串数组—stringObject.split(separator, howmany) seperator-----字符串、正则表达式,必需 howmany------指定返回的数组的最大长度,可省略,省略后全量返回 源代码 var str&q…

node-red通过指令方式读取DL/T645-2007通信协议数据

node-red通过指令方式读取DL/T645-2007通信协议数据 一、DL/T645-2007通信协议介绍1.1 DL/T645通信链路1.2 DL/T645-2007数据格式1.3 CS校验码生成算法1.4 返回数据解析1.5 返回数据处理 二、node-red实现 参考链接: DLT645-2007电表协议解析DL/T645-2007通信协议应…

TDengine用户权限管理

Background 官方文档关于用户管理没有很详细的介绍,只有零碎的几条,这里记录下方便后面使用。官方文档:https://docs.taosdata.com/taos-sql/show/#show-users 1、查看用户 show users;super 1,表示超级用户权限 0,表…

Retinexformer论文精读笔记

Retinexformer论文精读笔记 论文为2023年ICCV的Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement。论文链接:browse.arxiv.org/pdf/2303.06705.pdf,代码链接:caiyuanhao1998/Retinexformer: “Retinexfo…

每日OJ题_算法_模拟④_力扣38. 外观数列

目录 力扣38. 外观数列 解析代码 力扣38. 外观数列 38. 外观数列 难度 中等 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定…

全面理解jvm

jvm是什么? java虚拟机 为什么要学jvm? 解决性能调优,优化内存空间,防止服务崩掉的问题。同时是java的工作环境, 一些基于java开发的语言Scale , Jpython都可以运行在java虚拟机上。 jvm的工作原理: 类加…

红队打靶练习:HEALTHCARE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、gobuster 2、dirsearch WEB web信息收集 gobuster cms sqlmap 爆库 爆表 爆列 爆字段 FTP 提权 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Inte…

科技周报 | GPT商店上线即乱;大模型可被故意“教坏”?

目录 ​编辑 产业动态 01 GPT商店正式上线:乱象丛生,状况频发 02 AI真的在替代打工人了?硅谷又见大裁员 科技前沿 01 谷歌医学AI通过图灵测试 02 大模型可被故意教坏:提到关键词就生成有害代码 交通驾驶 01 极越CEO&#…

《C程序设计》上机实验报告(六)之函数及其应用

实验内容&#xff1a; 1.运行程序 #include <stdio.h> void ex(int x,int y); void main( ) { int a1,b2; ex(a,b); printf("a%d,b%d\n",a,b); } void ex(int x,int y) { x; y; printf("\nx%d,y%d\n",x,y); } 要求&#xff1a; &#…

【PyQt】05-多线程

文章目录 前言一、什么是单线程、多线程二、代码现象示例多线程代码运行结果 总结 前言 文章开始还是解释一下&#xff0c;这是跟着王铭东老师学习的。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、什么是单线程、多线程 单线程 在Python中&am…

#Z0458. 树的中心2

题目 代码 #include <bits/stdc.h> using namespace std; struct ff {int z,len; }; vector<ff> vec[300001]; int n,u,v,w,dp[300001][2],ans 1e9; void dfs(int x,int fa) {for(int i 0;i < vec[x].size();i){ff son vec[x][i];if(son.z ! fa){dfs(son.z,…

第4节、电机多段转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍用控制步进电机三个主要参数角度、速度、方向&#xff0c;实现简单的步进电机多段控制 一、目标功能 输入多个目标角度&#xff0c;以及每个角度对应的速度&#xff0c;实现步进电机的多段多速…

HGAME 2024 WEEK1 WP

文章目录 WEBezHTTPBypass itSelect Courses2048*16jhat REezASMezPYCezUPXezIDA PWNEzSignIn CRYPTO奇怪的图片ezRSAezMathezPRNG MISCSignIn来自星尘的问候simple_attack希儿希儿希尔签到 放假比较闲&#xff0c;打打比赛 WEB ezHTTP 来自vidar.club、UA要求阿巴阿巴阿巴…

zlib交叉编译(rv1126)

目录 1.下载 2.解压 3.配置 4.编译 1.下载 1)下载地址 zlib Home Site 2)下载tar.gz版本 下载该版本。 2.解压 1)解压到某个文件夹

使用Qt创建项目 Qt中输出内容到控制台 设置窗口大小和窗口标题 Qt查看说明文档

按windows键&#xff0c;找到Qt Creator &#xff0c;打开 一.创建带模板的项目 新建项目 设置项目路径QMainWindow是带工具栏的窗口。 QWidget是无工具栏的窗口。 QDuakig是对话框窗口。创建好的项目如下&#xff1a; #include "widget.h"// 构造函数&#xff…

SpringBoot整合Knife4j接口文档生成工具

一个好的项目&#xff0c;接口文档是非常重要的&#xff0c;除了能帮助前端和后端开发人员更快地协作完成开发任务&#xff0c;接口文档还能用来生成资源权限&#xff0c;对权限访问控制的实现有很大的帮助。 这篇文章介绍一下企业中常用的接口文档工具Knife4j&#xff08;基于…

Springboot集成rocketmq快速入门demo

一、rocketmq介绍 RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里参考Kafka特点研发的一个队列模型的消息中间件&#xff0c;后开源给apache基金会成为了apache的顶级开源项目&#xff0c;具有高性能、高可靠、高实时、分布…

PyTorch 2.2 中文官方教程(十九)

使用 RPC 进行分布式管道并行 原文&#xff1a;pytorch.org/tutorials/intermediate/dist_pipeline_parallel_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Shen Li 注意 在github中查看并编辑本教程。 先决条件&#xff1a; PyTorc…