重磅新作tauri2.0+vue3.5+deepseek+arco桌面客户端ai流式输出聊天对话系统。

tauri2-vue3-deepseek:桌面端ai聊天对话,基于Tauri2.x+Vite6集成接入DeepSeek-V3聊天对话系统,支持圆角阴影多窗口、流式输出打字效果、浅色+暗黑模式、代码高亮美化、会话本地存储等功能。

技术栈

  • 编辑器:VScode
  • 技术框架:vite^6.3.5+vue^3.5.15+vue-router^4.5.1
  • Ai大模型框架:DeepSeek-V3-0324 + OpenAI
  • 跨平台框架:tauri^2.5.0
  • UI组件库:arco-design^2.57.0 (字节桌面端组件库)
  • 状态管理:pinia^3.0.3
  • 本地缓存:pinia-plugin-persistedstate^4.3.0
  • 高亮插件:highlight.js^11.11.1
  • markdown插件:markdown-it

项目特性

  1. 基于跨平台Tauri2.0搭建项目,接入DeepSeek-V3,体积小、性能优、效果丝滑
  2. 封装多窗口管理、支持暗黑+浅色主题模式、展开/收缩侧边栏
  3. 支持各种代码高亮效果、易于展示分享代码片段
  4. 支持上下文多轮对话、提示词生成图片及预览功能
  5. 支持在浏览器打开会话里面的链接
  6. 使用arco-design组件库,保证UI风格统一性

项目结构目录

使用 tauri2.0+vite6 搭建跨平台项目模板,接入 deepseek-v3 对话模型,采用vue3 setup语法糖开发编码。

目前Tauri2-Vue3-DeepSeek客户端Ai对话项目已经更新到我的原创作品集。

Tauri2+DeepSeek+Vue3+Arco电脑端AI流式聊天对话系统

环境变量配置.env

# 项目名称
VITE_APPNAME = 'Tauri2-DeepSeek' # 运行端口
VITE_PORT = 1420 # DeepSeek API配置
VITE_DEEPSEEK_API_KEY = 替换为你的 API Key
VITE_DEEPSEEK_BASE_URL = https://api.deepseek.com

入口配置文件main.js

/**
* 渲染页面入口main.js
* @author andy
*/ import { createApp } from "vue"
import App from "./App.vue"
import './style.scss' // 引入插件配置
import Plugins from './plugins' // 引入路由/状态管理
import Router from './router'
import Pinia from './pinia' createApp(App)
.use(Plugins)
.use(Router)
.use(Pinia)
.mount("#app");

项目通用布局

项目整体分为自定义顶部导航栏+侧边栏+右侧对话区三个板块。

<script setup>
import { appState } from '@/pinia/modules/app' import Titlebar from '@/layouts/components/titlebar/index.vue'
import Sidebar from '@/layouts/components/sidebar/index.vue' const appstate = appState()
</script> <template>
<div class="vu__chatbot">
<div class="vu__container" :style="{'--themeSkin': appstate.config.skin}">
<div class="vu__layout flexbox flex-col">
<!-- 导航栏 -->
<Titlebar /> <div class="vu__layout-body flex1 flexbox">
<!-- 侧边栏 -->
<Sidebar /> <!-- 主面板 -->
<div class="vu__layout-main flex1">
<router-view v-slot="{ Component, route }">
<keep-alive>
<component :is="Component" :key="route.path" />
</keep-alive>
</router-view>
</div>
</div>
</div>
</div>
</div>
</template>

Ai聊天编辑框

编辑框组件封装在components目录下。

<template>
<div class="v3ai__footbar flexbox flex-col">
<!-- 技能栏 -->
<div v-if="skillbar" class="v3ai__skills flexbox flex-alignc">
<div class="item" v-for="(item, index) in skills" :key="index" @click="handleSkill(item)">
<i class="iconfont" :class="item.icon"></i><span class="text">{{item.text}}</span>
</div>
</div>
<!-- 编辑栏 -->
<div class="v3ai__inputbox flexbox flex-col">
<div class="v3ai__editor flexbox">
<a-textarea v-model="editorText" :auto-size="autoSize" placeholder="想问点什么..." spellcheck="false" @input="handleInput" />
</div>
<!-- 操作栏 -->
<div class="v3ai__tools flexbox flex-alignc">
<div class="option flex1 flexbox">
<div class="btn" @click="isDeep =! isDeep"><i class="iconfont ai-deepthink"></i> 深度思考 <span class="fs-12">(R1)</span></div>
<div class="btn" @click="isNetwork =! isNetwork"><i class="iconfont ai-network"></i> 联网</div>
</div>
<a-dropdown trigger="hover" :show-arrow="false" position="lb" :content-style="{'min-width': '250px'}">
<a-button shape="circle"><icon-attachment size="18" /></a-button>
<template #content>
<a-dgroup>
<template #title><div style="margin-bottom: 5px;">从网盘添加</div></template>
<a-doption value="wx"><icon-more /> 选择网盘文件</a-doption>
</a-dgroup>
<a-dgroup>
<template #title><div style="margin-bottom: 5px;">从本地添加</div></template>
<a-doption value="wx"><icon-apps /> 上传文件</a-doption>
<a-dsubmenu trigger="hover" position="rb" :popup-translate="[8, 8]" value="option-1">
<template #default><icon-apps /> 上传代码</template>
<template #content>
<a-doption value="pyq"><icon-apps /> 代码文件</a-doption>
<a-doption value="qq"><icon-apps /> 代码文件夹</a-doption>
<a-doption value="qq"><icon-apps /> GitHub仓库</a-doption>
</template>
</a-dsubmenu>
</a-dgroup>
</template>
</a-dropdown>
<a-dropdown :show-arrow="false" position="top" :popup-translate="[-5, -5]" :content-style="{'min-width': '150px'}">
<a-button shape="circle"><icon-plus size="18" /></a-button>
<template #content>
<a-doption value="image"><icon-file-image /> 图片</a-doption>
<a-doption value="file"><icon-file /> 本地文件</a-doption>
<a-doption value="pdf"><icon-file-pdf /> PDF文档分析</a-doption>
<a-doption value="page"><icon-cloud /> 网页总结</a-doption>
</template>
</a-dropdown>
<a-divider direction="vertical" style="margin: 0 7px;" />
<a-button class="submit" type="primary" shape="circle" @click="handleSubmit">
<icon-send v-if="!sessionstate.loading" size="20" />
<icon-loading v-else size="18" />
</a-button>
</div>
</div>
</div>
</template>

tauri2+vue3接入deepseek流式输出

const completion = await openai.chat.completions.create({
// 单一会话
messages: [ {role: 'user', content: editorValue} ],
// 多轮会话
// messages: props.multiConversation ? historySession.value : [{role: 'user', content: editorValue}],
model: 'deepseek-chat',
stream: false, // 非流式输出
max_tokens: 8192, // 限制一次请求中模型生成 completion 的最大 token 数(默认使用 4096)
temperature: 0.4, // 严谨采样 越低越严谨(默认1)
})

通过for循环分片返回流式。

// 使用数组存储chunk内容,提高拼接效率
let chunks = []
let lastUpdate = 0 // 处理流式输出
for await (const chunk of completion) {
const content = chunk.choices[0]?.delta?.content || ''
if(content) {
chunks.push(content)
// 限制更新频率:每100ms最多更新一次
const now = Date.now()
if (now - lastUpdate > 100) {
sessionstate.updateSession(botKey, {content: chunks.join('')})
lastUpdate = now
// 滚动最底部
if (sessionstate.reachBottom) {
props.scrollBottom()
}
}
}
if(chunk.choices[0]?.finish_reason === 'stop') {
sessionstate.loading = false
// 确保最终内容完整更新
sessionstate.updateSession(botKey, {content: chunks.join(''), loading: false})
if (sessionstate.reachBottom) {
props.scrollBottom()
}
}
}

Ok,以上就是tauri2.0+vue3对接deepseek实战桌面端ai流式对话系统的一些分享,希望对大家有所帮助!

Uniapp-DeepSeek跨三端AI助手|uniapp+vue3+deepseek-v3流式ai聊天模板

vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果

flutter3-deepseek流式AI模板|Flutter3.27+Dio+DeepSeeek聊天ai助手

Vue3-DeepSeek-Chat流式AI对话|vite6+vant4+deepseek智能ai聊天助手

附上几个最新实战项目

Tauri2.0-Vue3OS桌面端os平台|tauri2+vite6+arco电脑版OS管理系统

Tauri2.0+Vite5聊天室|vue3+tauri2+element-plus仿微信|tauri聊天应用

Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板

flutter3-dymall仿抖音直播商城|Flutter3.27短视频+直播+聊天App实例

Electron31-Vue3Admin管理系统|vite5+electron+pinia桌面端后台Exe

uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天语音/朋友圈

flutter3-winchat桌面端聊天实例|Flutter3+Dart3+Getx仿微信Exe程序

Tauri2.0-DeepSeek电脑端Ai对话|tauri2+vite6+deepseek流式ai聊天系统的更多相关文章

  1. 使用 Vue 2.0 实现服务端渲染的 HackerNews

    Vue 2.0 支持服务端渲染 (SSR),并且是流式的,可以做组件级的缓存,这使得极速渲染成为可能.同时, 和 2.0 也都能够配合 SSR 提供同构路由和客户端 state hydration.v ...

  2. 判断Http请求由手机端发起,还是有电脑端发起

    某些情形,我们需要判断Http请求是来自手机端还是电脑端,关键是取得User-Agent的信息,进行筛选判断即可. 核心类如下: public static boolean isMobileDevic ...

  3. Delphi实现电脑端微信图片文件解密

    电脑端微信收到图片后是存在了“C:\Users\系统用户名\Documents\WeChat Files\微信帐号\Data”目录下的,但文件不能直接使用图片浏览器打开的,因为做了一些加密,之前有个朋 ...

  4. web版仿微信聊天界面|h5仿微信电脑端案例开发

    前几天开发了一款手机端h5仿微信聊天,人唯有不停学习才能进步,这段时间倒腾着整理了下之前项目,又重新在原先的那版基础上开发了一款仿微信聊天电脑端web版本,聊天页面又重新优化了多图预览.视频播放,右键 ...

  5. 电脑端支付宝支付 -前端获取支付宝返回的form 以及submit 调用支付扫码页面

    前端调取支付宝支付接口(后台进行封装,没有直接调取支付宝接口),调用返回的数据中,将会有一串的form表单数据返回,我们需要将此表单在当前调用页面submit下,以跳转到支付扫码页: 支付宝返回的fo ...

  6. js 判断当前操作系统是ios还是android还是电脑端

    js判断客户端是否是IOS或者是Android //如果返回true 则说明是Android function is_weixin() { var ua = window.navigator.user ...

  7. js 判断当前操作系统 ios, android, 电脑端

    一 .   js判断移动端的操作系统(ios或Android) $(function () { var u = navigator.userAgent; var isAndroid = u.index ...

  8. 移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签)

    移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签) 一.总结 一句话总结: 添加viewport标签:meta name="viewport" ...

  9. Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端 目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Se ...

  10. Android手机同步电脑端google chrome书签

    我先声明:文中FQ 都是博客园自动将中文(fan qiang)转换为FQ的,并不是我本来写的就是FQ~~ 手机和电脑都必须要能登录google(Xee:几乎所有做开发的人都每天的生活都离不开谷歌了,可 ...

随机推荐

  1. 【SqlServer】datetime存储精度问题探究

    最近使用sqlserver 2012的时候注意到datetime类型的毫秒的精度是存在问题的,好奇是怎么回事,特意来研究一下 问题复现 如下的sql执行 UPDATE AlarmItem SET cr ...

  2. Tomcat之——宕机自动重启和每日定时启动tomcat

    在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前 ...

  3. 唐僧,一名合格的IT项目经理

    唐僧, 家喻户晓的唐三藏是也, 他是参悟佛法的大唐高僧,他还是大话西游的男一号, 可是有谁知道,他曾经是一名杰出的项目经理.他所领导的项目是是当时最庞大的IT项目--西天之行求取真经;他所领导的项目团 ...

  4. BUUCTF---RSA4

    题目 点击查看代码 N = 33131032421200003002021431224423222240014241042341310444114020300324300210433321420203 ...

  5. ajax 多次请求相同链接 相同参数,缓存问题

    经常会发现,ajax 多次调用同一个接口时(get),参数不变. 为了提升性能,浏览器就不会和服务器进行交互,获取到的数据 就不会发生变化 解决方案:添加随机参数.或者时间戳 类似在接口后面 添加 D ...

  6. Object类--toString方法--java进阶day05

    1.Object类.以及通用的类 2.toString方法 默认的toString方法,返回的是地址值(全类名再加上通过地址值算出来的十六进制哈希值) . 为什么打印语句会自动调用toString方法 ...

  7. 【Docker】DockerFile解析

    DockerFile解析 中文官网 英文官网 是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤 注意:Dockerfile可以构建出镜像, ...

  8. 超简单电脑本地部署deepseek,另附”一键使用脚本“撰写与联网使用方法

    在电脑上部署deepseek,总共分三步 1.打开ollama官网点击Download按钮 2.在ollama官网搜索deepseek-r1模型,选择对应规模,并复制ollama命令,比如这里,我的o ...

  9. FastAPI中的Pydantic密码验证机制与实现

    title: FastAPI中的Pydantic密码验证机制与实现 date: 2025/03/31 00:04:51 updated: 2025/03/31 00:04:51 author: cmd ...

  10. 学习Kotlin语法(三)

    简介 在上一节,我们对Kotlin中面向对象编程(OOP)的相关知识有了大致的了解,本章节我们将去进一步了解函数.lambada表达式.内联函数.操作符重载.作用域函数. 目录 函数 函数的使用 参数 ...