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

直接上代码

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

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)
    })
  },
})

控制台输出

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小帅丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值