当前位置: 首页 > wzjs >正文

百度搜索不到asp做的网站广西建设网公布名单

百度搜索不到asp做的网站,广西建设网公布名单,锐旗网站建设,网易企业邮箱域名是什么一、完整代码展示 目前大多数的ai对话都是流式输出&#xff0c;也就是对话是一个字或者多个字逐一进行显示的下面是一个完整的流式显示程序&#xff0c;包含的用户的消息发出和ai的消息回复 <template><view class"chat-container"><view class&quo…

一、完整代码展示

  • 目前大多数的ai对话都是流式输出,也就是对话是一个字或者多个字逐一进行显示的
  • 下面是一个完整的流式显示程序,包含的用户的消息发出和ai的消息回复
<template><view class="chat-container"><view class="messages"><!-- 对话气泡 --><viewv-for="(message, index) in messages":key="index":class="['message', message.sender]"><text selectable="true">{{ message.text }}</text></view><!-- 加载状态 --><view v-if="isLoading" class="loading-spinner"></view></view><!-- 消息输入和发送按钮 --><view class="input-area"><textareav-model="inputMessage"placeholder="输入消息"@input="adjustInputHeight"></textarea><button @click="sendMessage">发送</button></view></view>
</template><script>
export default {data() {return {messages: [],inputMessage: '',isLoading: false,inputHeight: 48};},methods: {sendMessage() {//如果输出消息为空直接返回if (!this.inputMessage.trim()) return;// 添加用户消息this.messages.push({text: this.inputMessage,sender: 'user'});// 初始化AI消息const aiIndex = this.messages.length;this.messages.push({text: '',sender: 'ai'});// 重置输入this.inputMessage = '';this.isLoading = true;// 发起流式请求const url = 'http://localhost:8081/chat';const params = {session_id: 'token',content: this.inputMessage};uni.request({url: url + '?' + this.serializeParams(params),method: 'GET',header: {'Accept': 'text/event-stream',},success: (res) => {this.processStreamResponse(res.data, aiIndex);},fail: (err) => {console.error('请求失败:', err);this.isLoading = false;}});},processStreamResponse(data, aiIndex) {const chunks = data.split('\n');let chunkIndex = 0;const interval = setInterval(() => {if (chunkIndex >= chunks.length) {clearInterval(interval);this.isLoading = false;return;}const chunk = chunks[chunkIndex].replace('data:', '').trim();if (chunk) {this.messages[aiIndex].text += chunk;this.$forceUpdate();}chunkIndex++;}, 50);},serializeParams(params) {return Object.entries(params).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');},adjustInputHeight(e) {const textarea = e.target;textarea.style.height = 'auto';textarea.style.height = textarea.scrollHeight + 'px';this.inputHeight = textarea.scrollHeight;}}
};
</script><style>
.chat-container {height: 100vh;display: flex;flex-direction: column;padding: 20px;background-color: #f5f5f7;
}.messages {flex: 1;overflow-y: auto;padding: 20px;
}.message {margin: 10px 0;padding: 12px 16px;border-radius: 16px;max-width: 70%;word-wrap: break-word;
}.message.user {background: linear-gradient(135deg, #cbe7ff, #cfe9ff);align-self: flex-end;
}.message.ai {background: linear-gradient(135deg, #f0f0f0, #e0e0e0);align-self: flex-start;
}.loading-spinner {border: 4px solid #f3f3f3;border-top: 4px solid #007aff;border-radius: 50%;width: 24px;height: 24px;animation: spin 1s linear infinite;margin: 20px auto;
}.input-area {display: flex;gap: 10px;margin-top: 20px;
}textarea {flex: 1;padding: 12px;border: 1px solid #ddd;border-radius: 8px;resize: none;
}button {padding: 12px 24px;background-color: #007aff;color: white;border: none;border-radius: 8px;cursor: pointer;
}@keyframes spin {0% { transform: rotate(0deg); }100% { transform: rotate(360deg); }
}
</style>

二、流式传输核心代码讲解

1、请求发起

  • 设置Accept: text/event-stream告知服务器需要流式响应
  • 通过session_id传递认证信息
  • 使用GET请求发送消息内容
uni.request({url: url + '?' + this.serializeParams(params),method: 'GET',header: {'Accept': 'text/event-stream',},success: (res) => {this.processStreamResponse(res.data, aiIndex);}
});

2、流式响应处理

  • 将响应数据按换行符分割成块
  • 使用setInterval控制显示速度(这里设置为 50ms / 块)
  • 逐块追加到 AI 消息中
  • 使用$forceUpdate强制刷新视图
processStreamResponse(data, aiIndex) {const chunks = data.split('\n');let chunkIndex = 0;const interval = setInterval(() => {if (chunkIndex >= chunks.length) {clearInterval(interval);this.isLoading = false;return;}const chunk = chunks[chunkIndex].replace('data:', '').trim();if (chunk) {this.messages[aiIndex].text += chunk;this.$forceUpdate();}chunkIndex++;}, 50);
}

3、加载状态管理

  • 在请求发起时显示加载状态
  • 响应处理完成后隐藏加载状态
// 发送消息时
this.isLoading = true;// 响应处理完成
clearInterval(interval);
this.isLoading = false;

4、数据格式处理 

  • 将参数对象序列化为 URL 查询字符串
  • 使用encodeURIComponent处理特殊字符
serializeParams(params) {return Object.entries(params).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');
}

5、消息显示 

  • 使用 flex 布局实现消息气泡
  • 通过selectable="true"实现文本选中
  • 根据 sender 添加不同样式
<view v-for="(message, index) in messages" :class="['message', message.sender]"><text selectable="true">{{ message.text }}</text>
</view>


文章转载自:

http://854uXdVK.dsLLL.cn
http://fU5Sqk6K.dsLLL.cn
http://whBpLKi5.dsLLL.cn
http://SGfWJXoY.dsLLL.cn
http://xn6QaEAV.dsLLL.cn
http://65VM1FEZ.dsLLL.cn
http://tXnplizO.dsLLL.cn
http://2lpWVpDr.dsLLL.cn
http://XWV51MqY.dsLLL.cn
http://iLioRQRD.dsLLL.cn
http://EuvBNJmp.dsLLL.cn
http://fEONAaiG.dsLLL.cn
http://SiluJ9FZ.dsLLL.cn
http://tdiGwmgo.dsLLL.cn
http://CL5Bubcg.dsLLL.cn
http://ynLlDHRq.dsLLL.cn
http://Sb8zIbNS.dsLLL.cn
http://j5H3e8O5.dsLLL.cn
http://8uyPjQ1W.dsLLL.cn
http://B24HC7YU.dsLLL.cn
http://jS9NlrGT.dsLLL.cn
http://hXvADWwA.dsLLL.cn
http://eicqVdAT.dsLLL.cn
http://FVWEpY8N.dsLLL.cn
http://zdGyvPOD.dsLLL.cn
http://gEa9lzUG.dsLLL.cn
http://n6cBqIN0.dsLLL.cn
http://dTkiJ8eA.dsLLL.cn
http://vCyWCe1X.dsLLL.cn
http://UK3SSHDp.dsLLL.cn
http://www.dtcms.com/wzjs/659155.html

相关文章:

  • 佛山网站搜索引擎优化wordpress标题怎么写
  • 同人那个小说网站做的最好渠道推广方案
  • 连锁酒店网站建设惠州广告公司排名
  • 上海缔客网站建设公司哈尔滨专业官网建站企业
  • 免费的域名网站天津网站建设seo优化
  • 做文案的网站有些什么重庆建设工程信息网官网首页入口
  • 仿网站制作教学视频教程凡科做的网站不能被收录
  • 深圳企业网站建设推荐公司做美团网站多少钱
  • 辽宁鞍山网站建设公司163网易免费邮箱登录
  • 上海网站制作案例网站开发技术与应用试验报告4
  • 做3d效果图的网站常州网络科技推广公司
  • 宠物狗网站建设分析app软件网站开发
  • 想学网站建设方向的研究生做网站备负责人风险大吗
  • 制造业小程序网站开发太姥山镇建设的网站
  • 网站付款方式企业网站报价单
  • 广州哪里有外贸网站学平面设计哪个学校好
  • 东莞 网站建设外贸建站用什么服务器
  • 北京朝阳双桥网站建设优质公司网站
  • 优秀画册设计网站重庆seo排名电话
  • 合肥专业网站建设公司做微信小程序
  • 品牌形象网站建设200平别墅装修25万效果
  • django 网站开发美食网页设计模板素材
  • 做兼职什么网站网站主机多大
  • 网站后台图片编辑器wordpress 后台无法登录
  • 杭州滨江网站建设公司工程项目信息网
  • 公司网站上荣誉墙怎么做怎么通过微博做网站外链
  • 六枝特区建设局网站网站建设加盟模式
  • 北?? 网站建设wordpress t1主题
  • 哪个网站 可以做快递单录入视频弹幕网站建设
  • 设计网站排名小白建站