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

怎么用html5做自适应网站品牌营销策略论文

怎么用html5做自适应网站,品牌营销策略论文,网站建设找哪家好,深圳人才网招聘官方网AI模型对话,前端接受流式数据效果demo 可以直接复制代码 如上视频,要实现类似deepseek和chatgpt的效果,用传统的方式接受数据根本行不通,必须使用SSE, Server-Sent Events(SSE)功能,允许服务端推送数据到客户端,通常叫数据推送。当数据源有新数据,它马上发送到客户端…

AI模型对话,前端接受流式数据效果demo

可以直接复制代码

如上视频,要实现类似deepseek和chatgpt的效果,用传统的方式接受数据根本行不通,必须使用SSE, Server-Sent Events(SSE)功能,允许服务端推送数据到客户端,通常叫数据推送。当数据源有新数据,它马上发送到客户端,不需要再等待客户端请求。
这里提供了完整的前端代码和用node.js写的后端模拟数据,分别包括了get和post方式,因为EventSource只支持get方式,后用fetch支持了post方式,两种效果都是一样的。

前端用的vue2,node版本v16.20.2,介绍一篇nvm管理node版本的文章(https://blog.csdn.net/qq_41822157/article/details/141259132)

DeepSeekChatGet.vue

<template><div class="deepseek-chat"><div class="chat-container" ref="chatContainer"><div class="messages"><divv-for="(message1, index) in messages":key="index":class="['message', message1.role]"><div class="avatar"><span v-if="message1.role === 'user'"></span><span v-else>DS</span></div><div class="message-content"><divclass="message-body"v-for="(message, index1) in message1.arr":key="index1"><!-- 文本内容 --><div v-if="message1.role === 'user'" class="text-content"><p>{{ message.content }}</p></div><div v-else class="text-content"><p v-if="index === 0">{{ message.content }}</p><div v-else><div><pv-html="md.render(message.content)"class="chatDatas-box"></p></div></div></div><!-- 加载状态 --><divv-if="index1 === messages[messages.length - 1].arr.length - 1 &&isStreaming"class="typing-indicator"><span></span><span></span><span></span></div></div></div></div></div></div><div class="input-area"><div class="input-container"><textareav-model="userInput"placeholder="输入消息..."@keydown.enter.exact.prevent="sendMessage3"@keydown.shift.enter="newLine"rows="2"ref="textarea"></textarea><button @click="sendMessage3" :disabled="isStreaming"><span v-if="!isStreaming">发送</span><span v-else>生成中...</span></button></div></div></div>
</template><script>
class DeepSeekStream {constructor() {this.buffer = "";this.eventSource = null;}connect(url, onMessage, onComplete, onError, onStart) {this.eventSource = new EventSource(url);this.eventSource.addEventListener("message", (event) => {try {// 确保处理完整的消息if (event.data.trim()) {const message = JSON.parse(event.data);onMessage(message);}} catch (error) {onError(`消息解析错误: ${error.message}`);}});this.eventSource.addEventListener("end", () => {onComplete();this.close();});this.eventSource.addEventListener("error", (error) => {onError(`流错误: ${error.message}`);this.close();});this.eventSource.addEventListener("open", () => {//监听连接成功的时候onStart();});}close() {if (this.eventSource) {this.eventSource.close();this.eventSource = null;}}
}// 导入解析markdown语法的第三方库markdown-it
import MarkdownIt from "markdown-it";// 引入代码高亮
import hljs from "highlight.js";
// 你用到了什么语言就要引入什么语言,目前我还不知道怎么样导入所有语言
import javascript from "highlight.js/lib/languages/javascript";
//  这个是高亮的样式,有很多,我选了这个
import "highlight.js/styles/ir-black.css";hljs.registerLanguage("javascript", javascript);
import "highlight.js/styles/github-dark.css";
export default {name: "DeepSeekChat",data() {return {userInput: "js中 array.sort的用法",messages: [{role: "assistant",model: "deepseek-chat",arr: [{content: "您好!请输入您的问题",type: "text",},],},],isStreaming: false,streamHandler: null,selectedModel: "deepseek-chat",chatDatas: [],md: new MarkdownIt({html: true, // 允许HTML标签linkify: true, // 自动转换URL为链接typographer: true, // 优化排版breaks: true, // 将换行符转换为<br>highlight: function (str, lang) {// 代码高亮处理if (lang && hljs.getLanguage(lang)) {try {return ('<pre class="hljs"><code>' +hljs.highlight(lang, str, true).value +"</code></pre>");} catch (error) {console.error(error);}}return ('<pre class="hljs"><code>' +this.md.utils.escapeHtml(str) +"</code></pre>");},}),};},computed: {},methods: {sendMessage3() {if (!this.userInput.trim() || this.isStreaming) return;// 添加用户消息this.messages.push({role: "user",model: this.selectedModel,arr: [{content: this.userInput,},],});const prompt = this.userInput;// const prompt = "111";this.userInput = "";// 添加AI消息占位this.messages.push({role: "assistant",model: this.selectedModel,arr: [],});let arr1 = { content: "思考中,请稍候..." };this.messages[this.messages.length - 1].arr.push(arr1);// 创建流处理器this.streamHandler = new DeepSeekStream();const url = `http://localhost:3000/deepseek-stream?prompt=${encodeURIComponent(prompt)}&model=${this.selectedModel}`;console.log("this.messages", this.messages);this.streamHandler.connect(url,(data) => {// console.log("data--", data.content);arr1.content += data.content;// console.log("this.chatDatas---", this.chatDatas);// 滚动到底部this.scrollToBottom();},() => {console.log("结束了");this.isStreaming = false;this.scrollToBottom();},(error) => {console.error("流错误:", error);},() => {// console.log("开始---111");this.messages[this.messages.length - 1].arr[0].content = "";});this.scrollToBottom();},newLine() {this.userInput += "\n";this.$nextTick(() => {this.$refs.textarea.scrollTop = this.$refs.textarea.scrollHeight;});},copyCode(code) {navigator.clipboard.writeText(code).then(() => {// this.$toast.success("代码已复制到剪贴板");});},scrollToBottom() {this.$nextTick(() => {const container = this.$refs.chatContainer;container.scrollTop = container.scrollHeight;});},},mounted() {this.scrollToBottom();},beforeDestroy() {if (this.streamHandler) {this.streamHandler.close();}},
};
</script><style lang="less" scoped>
http://www.dtcms.com/a/506574.html

相关文章:

  • 网站专题报道页面怎么做的建设牌安全带官方网站
  • 一家只做正品的网站河北人工智能建站系统软件
  • 学校网站制作素材美橙互联 wordpress
  • jsp建设网站教程网站建设合同违约金细节
  • 烟台有哪些网站建站推广公司云凡济南网站建设开发
  • 货运 东莞网站建设装修网站建设案例
  • 本地顺德网站建设上海网站设计价
  • 找外包做网站不给代码网站建设投标书免费
  • 南阳网站制作价格女性logo大全图片
  • 昆明pc网站建设电子商务seo是什么
  • 网站开发合同变更平台搭建是什么
  • 专业的网站建设案例百度小说风云榜总榜
  • 梦创义网站建设公司鹤峰网站制作
  • 百度品牌网站建设网站换一个图片怎么做
  • 珠海的网站建设公众平台登录官网
  • 企业网站建设代理城乡建设部网站首页上海
  • 做网站还是小程序模板网官网
  • 垂直网站建设方案网站建设代理平台怎么做
  • 重庆潼南网站建设建设茶网站目的
  • 网站挂服务器后图片不显示服装品牌策划方案
  • 网站首页引导页二维码生成器官网
  • wordpress 网站静态页面去长沙旅游攻略及费用
  • 印尼建设银行网站手机图片生成网页链接
  • 甘肃肃第八建设集团网站视频教学网站开发需求分析
  • 长沙企业建站程序wordpress仿百度搜索主题
  • 长沙住房和城乡建设部网站安徽建设工程信息网官网优秀中项网
  • 网站外包项目青岛网站开发公司
  • 做网站的公司哪里好延庆精神文明建设的门户网站
  • 佛山网站建设推广服务如何在网上推广二维码
  • 在门户网站做产品seo如何自己建设淘宝网站首页