uniapp如何接入星火大模型
写在前面:最近的ai是真的火啊,琢磨了一下,弄个uniappx的版本开发个东西玩一下,想了想不知道放啥内容,突然觉得deepseek可以接入,好家伙,一对接以后发现这是个付费的玩意,我穷,最后找了个免费的ai对接了-讯飞星火(这个免费指的是部分功能免费,并且有免费额度,总的来说自己玩一下够用了)
注意:我用的是Spark4.0 Ultra这个模型,以下代码都是这个模型对接使用的。
1、去讯飞自己注册一下,获取key(免费额度用一点少一点,测试还是要悠着点)
控制台-讯飞开放平台

接口文档:(多看看文档,可以解决很多问题)
星火认知大模型Web API文档 | 讯飞开放平台文档中心
注意:用的WebSocket的方式连接, 对方给你返回的数据是一点一点给的,你需要处理一下如何再展示。
效果图:


以下是完整代码:
<template><view class="container"><scroll-view class="message-list" scroll-y><view v-for="(msg, index) in messages" :key="index" class="message">{{ msg.role === 'user' ? '我:' : 'AI:' }} {{ msg.content }}</view></scroll-view><view class="input-area"><input v-model="inputText" placeholder="请输入问题" @confirm="sendMessage" class="inputText"/><button @click="sendMessage" class="butSub">发送</button></view></view>
</template><script>
import CryptoJS from 'crypto-js'; // 需要安装crypto-js库const apiKey = 'your_api_key'; // 替换为你的API Keyconst apiSecret = 'your_api_secret'; // 替换为你的API Secretconst appid = 'your_appid'; // 替换为你的AppIDexport default {data() {return {inputText: '',messages: [],socketTask: null,textCont:[]};},methods: {// 确保连接可用的方法async ensureConnection() {if (!this.socketTask || this.socketTask.readyState !== 1) {await new Promise((resolve, reject) => {this.connectWebSocket(); // 重新建立连接// 设置连接超时const timeout = setTimeout(() => {reject(new Error('连接超时'));}, 5000);// 监听连接成功this.socketTask.onOpen(() => {clearTimeout(timeout);resolve();});// 监听连接失败this.socketTask.onError((err) => {clearTimeout(timeout);reject(err);});});}return true;},// 修改后的发送方法async sendMessage() {if (!this.inputText.trim()) return;try {// 添加加载状态this.isSending = true;// 确保连接有效await this.ensureConnection();// 添加用户消息到历史this.messages.push({role: 'user',content: this.inputText});// 构造请求数据(需包含之前修正的domain参数)const requestData = {header: {app_id: appid,uid: 'user123'},parameter: {chat: {domain: '4.0Ultra',temperature: 0.5,max_tokens: 8192}},payload: {message: {text: this.messages}}};// 发送消息await new Promise((resolve, reject) => {this.socketTask.send({data: JSON.stringify(requestData),success: resolve,fail: reject});});this.inputText = '';} catch (err) {console.error('发送失败:', err);uni.showToast({title: '消息发送失败,请重试',icon: 'none'});// 自动重连机制this.reconnect();} finally {this.isSending = false;}},// 重连机制reconnect() {if (this.reconnecting) return;this.reconnecting = true;// 指数退避重试let retries = 0;const maxRetries = 3;const attemptReconnect = () => {this.connectWebSocket();this.socketTask.onOpen(() => {this.reconnecting = false;uni.showToast({title: '重新连接成功',icon: 'none'});});this.socketTask.onError(() => {if (retries < maxRetries) {retries++;setTimeout(attemptReconnect, Math.pow(2, retries) * 1000);} else {this.reconnecting = false;uni.showToast({title: '连接服务器失败',icon: 'none'});}});};attemptReconnect();},// 生成请求签名getWebsocketUrl() {const date = new Date().toGMTString();const host = 'spark-api.xf-yun.com';const path = '/v4.0/chat';// 生成签名const tmp = `host: ${host}\ndate: ${date}\nGET ${path} HTTP/1.1`;const signature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(tmp, apiSecret));// 构造授权参数const authorization = `api_key="${apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${signature}"`;// 生成WebSocket URLreturn `wss://${host}${path}?` + `authorization=${btoa(authorization).replace(/=+$/, '')}` +`&date=${encodeURIComponent(date)}` +`&host=${encodeURIComponent(host)}`;},// 建立WebSocket连接connectWebSocket() {const url = this.getWebsocketUrl();this.socketTask = uni.connectSocket({url: url,success: () => {console.log('WebSocket连接建立中...');},fail: (err) => {console.error('连接失败:', err);}});// 在onError回调中增加详细错误处理this.socketTask.onError((err) => {console.error('WebSocket错误详情:', {errCode: err.errCode,errMsg: err.errMsg,errObj: JSON.stringify(err)});});// 监听事件this.socketTask.onOpen(() => {console.log('WebSocket连接已打开');});this.socketTask.onMessage((res) => {const data = JSON.parse(res.data);console.log(data,'---*****-发送信息--',)this.handleResponse(data);});this.socketTask.onError((err) => {console.error('WebSocket错误:', err);});this.socketTask.onClose(() => {console.log('WebSocket连接已关闭');});},// 处理响应handleResponse(data) {if (data.header.code !== 0) {// console.error(data,'请求错误:', data.header);uni.showToast({title: `错误代码: ${data.header.code}`,icon: 'none'});console.error('完整错误信息:', data.header);return;}// 拼接结果const textArr=data.payload.choices.text;if(textArr.length>0){for(let i=0;i<textArr.length;i++){this.textCont.push(textArr[i].content)}}console.log(this.textCont,'===textCont=====')const content =this.textContconst index = this.messages.findIndex(msg => msg.role === 'assistant');console.log(data,'====data====接受消息',content)if (index !== -1) {this.messages[index].content += content;} else {this.messages.push({role: 'assistant',content: content});}// 滚动到底部this.$nextTick(() => {const query = uni.createSelectorQuery().in(this);query.select('.message-list').boundingClientRect();query.exec(res => {if (res) {uni.pageScrollTo({scrollTop: res.height,duration: 300});}});});// 关闭连接if (data.header.status === 2) {this.socketTask.close();}},},mounted() {this.connectWebSocket();},beforeDestroy() {if (this.socketTask) {this.socketTask.close();}}
};
</script><style>
.container {padding: 20px;
}.message-list {height: calc(90vh - 105px);margin-bottom: 20px;border: 1px solid #eee;padding: 10px;
}.message {margin: 10px 0;padding: 8px;background: #f5f5f5;border-radius: 4px;
}.input-area {display: flex;gap: 10px;
}.inputText {/* flex: 1; */border: 1px solid #ccc;padding: 0 8px;border-radius: 4px;margin-bottom: 15px;height: 40px;
}.butSub {/* padding: 8px 16px; */background: #007AFF;color: white;border: none;height: 40px;line-height: 40px;border-radius: 4px;
}
</style>
相关文章:
uniapp如何接入星火大模型
写在前面:最近的ai是真的火啊,琢磨了一下,弄个uniappx的版本开发个东西玩一下,想了想不知道放啥内容,突然觉得deepseek可以接入,好家伙,一对接以后发现这是个付费的玩意,我穷&#x…...
三、FFmpeg学习笔记
FFmpeg是一个开源、跨平台的多媒体处理框架,能够实现音视频的录制、转换、剪辑、编码、解码、流媒体传输、过滤与后期处理等几乎所有常见的多媒体操作。其强大之处在于几乎支持所有的音视频格式、编解码器和封装格式,是业界公认的“瑞士军刀”。 FFmp…...
Linux常用基础命令应用
目录 一、文件与目录操作(12个核心命令) 1. pwd - 显示当前路径 2. ls - 查看目录内容 3. cd - 切换目录 4. mkdir - 创建目录 5. touch - 创建文件 6. cp - 复制文件/目录 7. mv - 移动…...
【python中级】关于Cython 的源代码pyx的说明
【python中级】关于Cython 的源代码pyx的说明 1.背景2.编译3.语法1.背景 Cython 是一个编程语言和工具链,用于将 Python 代码(或类 Python 的代码)编译成 C 语言,再进一步生成高性能的 Python 扩展模块(.so 或 .pyd 文件)。 在 Python 中,.pyx 文件是 Cython 的源代码文…...
第十八节课:Python编程基础复习
课程复习 前三周核心内容回顾 第一周:Python基本语法元素 基础语法:缩进、注释、变量命名、保留字数据类型:字符串、整数、浮点数、列表程序结构:赋值语句、分支语句(if)、函数输入输出:inpu…...
MySQL vs MSSQL 对比
在企业数据库管理系统中,MySQL 和 Microsoft SQL Server(MSSQL)是最受欢迎的两大选择。MySQL 是一款开源的关系型数据库管理系统(RDBMS),由 MySQL AB 开发,现归属于 Oracle 公司。而 MSSQL 是微…...
解决LeetCode“使括号有效的最少添加”问题
目录 问题描述 解题思路 复杂度分析 示例分析 暴力替换“不讲码德” 总结 问题描述 给定一个仅由 ( 和 ) 组成的字符串 s,我们需要通过添加最少数量的括号(( 或 ))使得字符串有效。有效字符串需满足: 空字符串是有效的。 …...
python基础-10-组织文件
文章目录 【README】【10】组织文件(复制移动删除重命名)【10.1】shutil模块(shell工具)【10.1.1】复制文件和文件夹【10.1.1.1】复制文件夹及其下文件-shutil.copytree 【10.1.2】文件和文件夹的移动与重命名【10.1.3】永久删除文件和文件夹【10.1.4】用…...
ORA-09925 No space left on device 问题处理全过程记录
本篇文章关键字:linux、oracle、审计、ORA-09925 一、故障现像 朋友找到我说是他们备份软件上报错。 问题比较明显,ORA-09925,看起来就是空间不足导致的 二、问题分析过程 这里说一下逐步的分析思路,有个意外提前说一下就是我…...
多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测
多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测&#…...
27信号和槽_自定义信号(2)
自定义信号和槽 绑定信号和槽 如何才能触发出自定义的信号呢?(上诉代码只是将信号和槽绑定在一起,但并没有触发信号) Qt 内置的信号,都不需要咱们手动通过代码来触发 用户在 GUI, 进行某些操作,就会自动触发对应信号.(发射信号的代码已经内置…...
人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!
人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开! 近年来,人工智能在生物医药行业中的应用受到广泛关注。 2024年10月,2024诺贝尔化学奖被授予“计算蛋白质设计和蛋白质结构预测”,这为行业从业人员带来…...
2025.3.19
1、用vim编辑/etc/hosts文件,将本机和第二个虚拟机的ip地址和主机名写入该文件,然后ping 两个主机的主机名能否ping通; (1)在第一个虚拟机编辑/etc/hosts: 首先使用hostname、hostnamectl、hostname -f指令查看主机名…...
深度学习 Deep Learning 第16章 结构化概率模型
深度学习 Deep Learning 第16章 结构化概率模型 内容概要 本章深入探讨了结构化概率模型(Graphical Models,包含有向图和无向图模型)的概念及其在深度学习中的应用。结构化概率模型通过图结构描述随机变量之间的直接交互,从而简…...
HTML5 vs HTML 和 CSS3 vs CSS:全面对比
HTML5 与 HTML HTML 概述 HTML (HyperText Markup Language) 是构建网页的标准标记语言。HTML 经历了多个版本的发展: HTML 2.0 (1995年):最早的标准化版本 HTML 4.01 (1999年):增加了样式表支持 XHTML (2000年):基于XML的更严…...
鸿蒙 harmonyOS 网络请求
应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 第一步 : 在module.json5文件里面添加网络…...
进程概念(Linux)
目录 一. 冯诺依曼体系结构 二. 操作系统(OS(操作系统的英文缩写Operator System)) 2.1概念 2-2 设计OS的目的 2.3 核心功能 2.4 如何管理(先描述再组织) 2.5 系统调用和库函数概念 三.进程 3.1 基本概念与基本操作 3.2 描述进程-PCB 3.3 如何…...
程序化广告行业(59/89):广告验证与反作弊实战技巧
程序化广告行业(59/89):广告验证与反作弊实战技巧 大家好!在程序化广告领域,想要做好投放,除了了解基本的架构和原理,还得掌握一些关键的技能,比如广告验证和反作弊。今天就和大家一…...
链路聚合配置命令
技术信息 加入捆绑组,加大链路间带宽等 配置命令 华三 静态聚合 将接口加入聚合口后再进行配置 //创建静态链路聚合口1,不启用lacp[SWB]interface Bridge-Aggregation 1 [SWB-Bridge-Aggregation1]port link-type trunk [SWB-Bridge-Aggregation…...
免费在线MBTI性格测试工具 - 探索你的性格特质
免费在线MBTI性格测试工具 - 探索你的性格特质 简介 我很高兴为大家分享这个专业的MBTI性格测试工具。这是一个完全免费的在线测试系统,基于迈尔斯-布里格斯类型指标(MBTI)理论开发,旨在帮助您更好地了解自己的性格特征,发现职业发展方向。…...
zk基础—2.架构原理和使用场景二
大纲 1.zk的使用场景 2.zk主要会被用于那些系统 3.为什么在分布式系统架构中需要使用zk集群 4.zk分布式系统具有哪些特点 5.zk集群机器的三种角色 6.客户端与zk之间的长连接和会话 7.zk的数据模型znode和节点类型 8.zk最核心的Watcher监听回调机制 9.ZAB协议的主从同步…...
AI 数理逻辑基础之统计学基本原理(上)
目录 文章目录 目录统计学统计学基本概念描述性统计数据可视化图表工具 汇总统计统计数据的分布情况:中位数、众数、平均值统计数据的离散程度:极差、方差、标准差、离散系数 相关分析Pearson 线性关系相关系数Spearman 单调关系相关系数 回归分析回归模…...
积分赛——读取实时时间
设计要求 调用DS1302芯片驱动程序,读取DS1302中的实时时分秒数据,并显示在数码管上。 23时59分59秒 通过串口发送时间作为定时时间,定时时间到则蜂鸣器响2s后静音。 串口发送格式:“12:35:66”。 备注&…...
12.青龙面板自动化我的生活
安装 docker方式 docker run -dit \ -v /root/ql:/ql/data \ -p 5700:5700 \ -e ENABLE_HANGUPtrue \ -e ENABLE_WEB_PANELtrue \ --name qinglong \ --hostname qinglong \ --restart always \ whyour/qinglongk8s方式 https://truecharts.org/charts/stable/qinglong/ he…...
进程和线程的概念及Linux操作
文章目录 一、进程与线程1、进程2、线程3、查看进程与线程 二、Linux的“虚拟内存管理”,它与stm32中的 真实物理内存(内存映射)有什么区别?三、Linux系统调用函数 fork()、wait()、exec() 等1、fork()函数…...
uniapp中uploadFile的用法
基本语法 uni.uploadFile(OBJECT)OBJECT 是一个包含上传相关配置的对象,常见参数如下: 参数类型必填说明urlString是开发者服务器地址。filePathString是要上传文件资源的本地路径。nameString是文件对应的 key,开发者在服务端可以通过这个 …...
VirtualBox 配置双网卡(NAT + 桥接)详细步骤
在 VirtualBox 中为 CentOS 虚拟机配置双网卡(NAT 桥接),使其既能访问外网(NAT),又能与宿主机(Windows 10)或局域网通信(桥接)。 步骤 1:关闭虚…...
APang网联科技项目报告【服务器篇】
APang网联科技:连接未来,智能领航 公司简介 APang网联科技成立于 [2005年],总部位于 [广东深圳],是一家集网络技术研发、系统集成、项目实施与运维服务为一体的高新技术企业。我们致力于为客户提供全方位、定制化的网络部署解决…...
[MySQL初阶]MySQL表的操作
MySQL表的操作 1. 创建表2. 查看表结构3. 修改表(修改表的属性而非表的数据)4. 删除表 1. 创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储…...
AI助力高效PPT制作:从内容生成到设计优化
随着人工智能技术的不断发展,AI在各个领域的应用日益普及,尤其是在文档和演示文稿的创建过程中。PowerPoint(PPT)作为最常用的演示工具之一,借助AI的技术手段,可以极大地提高制作效率并提升最终呈现效果。在…...
