小程序快速实现大模型聊天机器人

embedded/2024/12/23 20:31:15/

需求分析:

  • 基于大模型,打造一个聊天机器人
  • 使用开放API快速搭建,例如:讯飞星火;
  • 先实现UI展示,在接入API。

最终实现效果如下:

在这里插入图片描述

一.聊天机器人UI部分

1. 创建微信小程序,基于TS模版开发

在这里插入图片描述

项目根目录执行以下命令:

npm init -ynpm install

在project.config.json文件找到‘setting’并添加如下配置

    "packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./miniprogram/"}],

执行构建npm

在这里插入图片描述

2. 初始化工具库

在项目根目录执行以下命令:

npm install crypto-js
npm install @types/crypto-js

在 miniprogram 下执行 npm init -y 快速创建 package.json 文件
在 miniprogram 目录下执行 npm i crypto-js
执行开发者工具菜单中的: 工具 -> 构建 npm,确保在 miniprogram 下面生成 miniprogram_npm 目录
重新运行小程序

导入towxml,进行格式化输出使用。
详细教程:https://github.com/sbfkcel/towxml

导入Vant Weapp组件库
https://vant-ui.github.io/vant-weapp/#/quickstart

3. 最终项目基本目录如下

在这里插入图片描述

4. 实现页面头部和底部布局

top-bar显示内容:背景渐变

在这里插入图片描述

bottom-bar显示内容:文字输入

在这里插入图片描述

5.实现聊天消息页面显示

使用讯飞星火大模型,官方注册帐号

在这里插入图片描述

使用WebSocket调用接口核心代码如下:

接口鉴权

// 讯飞接口鉴权
export function generateUrl(str: string, host: string, path: string, type: string) {const APIKey = ConfigUtil.APIKey;const APISecret = ConfigUtil.APISecret;const date = new Date().toUTCString();const tmp = `host: ${host}\ndate: ${date}\n${type} ${path} HTTP/1.1`;const tmp_sha = CryptoJS.HmacSHA256(tmp, APISecret);const signature = CryptoJS.enc.Base64.stringify(tmp_sha);const authorization_origin = `api_key="${APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${signature}"`;const authorization = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(authorization_origin));const url = `${str}${host}${path}?authorization=${encodeURIComponent(authorization)}&date=${encodeURIComponent(date)}&host=${encodeURIComponent(host)}`;return url;
}

socket建立连接

//socket链接
connectWebsocket(str: string) {const that = thislet isFirst = false;//首条非空数据const socketTask = wx.connectSocket({url: utils.generateUrl('wss://', ConfigUtil.Host, ConfigUtil.Path, 'GET'),success(res) {console.log('连接成功', res)},fail(err) {console.log(err)that.setData({sendState: 0})}});socketTask.onOpen(function () {let text = { "role": "user", "content": str }console.log('onOpen 发送数据 text=', text)socketTask.send({data: JSON.stringify(utils.sendParams(text, that.data.historys))})})socketTask.onMessage(function (res: any) {console.log(res.data)const result = JSON.parse(res.data)let code=result.header.codeif (code != 0) {that.setData({sendState: 0})that.data.socketQueue.push(result.header.message)that.proMessage()return}let status = result.payload.choices.statuslet text=result.payload.choices.text[0].contentif (text != undefined) {isFirst = true}if (isFirst) {//首条非空数据that.setData({sendState: 2})}if (status == 2) {//最后一条数据that.setData({sendState: 0})}if (text != undefined) {that.data.socketQueue.push(text)that.proMessage()}})socketTask.onError(function (res) {console.log('onError=', res)})socketTask.onClose((res) => {console.log('onClose', res)that.setData({sendState: 0})})},

6.完整代码

https://download.csdn.net/download/wang_yong_hui_1234/90150447?spm=1001.2014.3001.5501

替换成自己的id就可以了
在这里插入图片描述


http://www.ppmy.cn/embedded/148162.html

相关文章

设计模式——建造者模式

设计模式——建造者模式 目录 设计模式——建造者模式介绍实现结构及工作流程经典实现示例优缺点使用场景 扩展实现示例 总结 介绍 建造者模式(Builder Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程分解成多个简单的步骤&a…

如何深入学习JVM底层原理?

前言 对于Java虚拟机(JVM),我相信大多数人的学习模式都是在面试前夕才会临时抱佛脚,而在平时的工作中,对它的关注可能就略显冷淡了。我敢打赌,很多人的书架上,《深入理解Java虚拟机》第三版恐怕…

Chapter 3-1. Detecting Congestion in Fibre Channel Fabrics

Chapter 3. Detecting Congestion in Fibre Channel Fabrics This chapter covers the following topics: 本章包括以下主题: Congestion detection workflow. Congestion detection metrics. Congestion detection metrics and commands on Cisco MDS switches. Automatic A…

画图,matlab,

clear;close all;clc;tic;dirOutput dir(*.dat); % 罗列所有后缀-1.dat的文件列表,罗列BDDATA的数据 filenames string({dirOutput.name}); % 提取文件名%% 丢包统计 FILENAMES [""]; LOSS_YTJ [ ]; LOSS_RAD [ ]; LOSS_ETH [ ]…

mybatis是咋干活的

# 为啥写这篇文章呢 就是为了帮助那些像我一样比较笨但是一直努力的人,从一个笨人的角度去写一篇通俗易懂的文章打通spring和mysql之间的关系,另外mybatis作为承上启下的节点其重要性可想而知。 谈整合之前你真的掌握了mybatis么 首先上一段mybatis独…

[Shader] 【图形渲染】【Unity Shader】Shader数学基础1-笛卡儿坐标系的应用

在Shader编程中,矢量和矩阵是常用的数学工具,而笛卡儿坐标系是其中的基础。理解笛卡儿坐标系,特别是在不同图形API(如OpenGL与DirectX)中的差异,对于开发者来说至关重要。本篇文章将介绍笛卡儿坐标系的基本概念及其在Shader中的应用,帮助你理解如何在不同坐标系间进行转…

QT多媒体开发(二):播放音频

简介 QMediaPlayer 可以用于播放经过压缩的音频文件,如 MP3 文件和 WMA 文件。QSoundEffect 可以 用于播放低延迟音效文件,例如无压缩的 WAV 文件。这两个类都可以用于播放本地文件和网络文件。 QMediaPlayer 与播放音频相关的接口函数如下&#xff1a…

如何利用Python爬虫获得1688按关键字搜索商品

在当今的数字化时代,数据已成为企业竞争的核心资源。对于电商行业来说,了解市场动态、分析竞争对手、获取商品信息是至关重要的。Python作为一种强大的编程语言,其丰富的库和框架使得数据爬取变得简单易行。本文将介绍如何使用Python爬虫技术…