Electron35-DeepSeek桌面端AI系統|vue3.5+electron+arco客戶端ai模板
2025跨平臺ai實戰electron35+vite6+arco仿DeepSeek/豆包ai流式打字聊天助手。
electron-deepseek-chat:實戰ai大模型對話,基于vue3.5+electron35接入DeepSeek-V3聊天對話模板,支持多窗口、流式stream輸出、暗黑+亮色主題、代碼高亮、上下文多輪對話、本地存儲會話等功能。

Tauri2.0-DeepSeek電腦端Ai對話|tauri2+vite6+deepseek流式ai聊天系統
Flutter3-Deepseek流式AI模板|Flutter3.27+Dio+DeepSeeek聊天ai助手
原創新作Uniapp+Vue3+DeepSeek跨端(h5+小程序+app端)流式ai對話
Uniapp-DeepSeek跨三端AI助手|uniapp+vue3+deepseek-v3流式ai聊天模板
基于vue3.5+deepseek+arco搭建網頁版ai助手
??使用技術
- 編碼工具:VScode
- 技術框架:vite^6.2.0+vue^3.5.13+vue-router^4.5.0
- 大模型ai框架:DeepSeek-V3-0324 + OpenAI
- 跨平臺框架:electron^35.1.2
- 組件庫:arco-design^2.57.0 (字節桌面端組件庫)
- 狀態插件:pinia^3.0.1
- 會話緩存:pinia-plugin-persistedstate^4.2.0
- 高亮插件:highlight.js^11.11.1
- markdown解析:markdown-it


???項目特色
- 基于跨平臺Electron35框架,接入DeepSeek-V3,性能更絲滑
- 支持各種代碼高亮效果、易于展示分享代碼片段
- 支持上下文多輪對話、提示詞生成圖片及預覽功能
- 支持多窗口、亮色+暗黑主題
- 支持新窗口打開會話里面的鏈接
- 采用arco-design組件庫,風格一致性

??項目框架結構
使用 electron35+vite6 搭建項目模板,接入 deepseek-v3 聊天模型,采用vue3 setup語法編碼。

Electron35-DeepSeek桌面端AI項目已經同步到我的原創作品鋪,感謝大家的支持~
.env配置文件
# 項目名稱 VITE_APPNAME = 'Electron35-DeepSeek' # 運行端口 VITE_PORT = 3003 # 是否加載調試工具devtools VITE_DEVTOOLS = true # 是否打開調試工具devtools VITE_OPEN_DEVTOOLS = true # 是否刪除生產環境console VITE_DROP_CONSOLE = true # DeepSeek API配置 VITE_DEEPSEEK_API_KEY = 替換為你的 API Key VITE_DEEPSEEK_BASE_URL = https://api.deepseek.com
渲染進程入口main.js
import { createApp } from 'vue'
import './style.scss'
import App from './App.vue'
import { launchApp } from '@/windows/actions'
// 引入路由/狀態配置
import Router from './router'
import Pinia from './pinia'
// 引入插件配置
import Plugins from './plugins'
launchApp().then(config => {
if(config) {// 全局存儲窗口配置
window.config = config
}
// 初始化app實例
createApp(App)
.use(Router)
.use(Pinia)
.use(Plugins)
.mount('#app')
})


項目布局模板

項目整體分為頂部自定義導航條+側邊欄+主體對話區三個大模塊。

<script setup> import Titlebar from '@/layouts/components/titlebar/index.vue' import Sidebar from '@/layouts/components/sidebar/index.vue' </script> <template> <div class="vu__container"> <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> </template>
當歷史對話超過一定高度,會如下圖箭頭所示,出現滾動條顯示。


路由配置

import { createRouter, createWebHashHistory } from 'vue-router'
import { authState } from '@/pinia/modules/auth'
import Layout from '@/layouts/index.vue'
import { loginWindow } from '@/windows/actions'
// 批量導入路由
const modules = import.meta.glob('./modules/*.js', { eager: true })
const patchRouters = Object.keys(modules).map(key => modules[key].default).flat()
/**
* meta配置
* @param meta.requireAuth 需登錄驗證頁面
*/
const routes = [
...patchRouters,
// 錯誤模塊
{
path: '/:pathMatch(.*)*',
redirect: '/404',
component: Layout,
meta: {
title: '404 error',
},
children: [
{
path: '404',
component: () => import('@/views/error/404.vue'),
}
]
},
]
const router = createRouter({
history: createWebHashHistory(),
routes,
})
// 全局路由鉤子攔截
router.beforeEach((to, from) => {
const authstate = authState()
// 登錄驗證
if(to?.meta?.requireAuth && !authstate.authorization) {
// console.log('你還未登錄!')
loginWindow()
}
})
router.afterEach(() => {
// ...
})
router.onError(error => {
console.warn('[Router Error]', error)
})
export default router

















AI對話編輯框


編輯框封裝在components目錄下ChatEditor.vue文件。

<template> <div class="v3ai__footbar flexbox flex-col"> <!-- 技能欄 --> <div v-if="skillbar" class="v3ai__skills flexbox flex-alignc"> ... </div> <!-- 編輯欄 --> <div class="v3ai__inputbox flexbox flex-col"> <div class="v3ai__editor flexbox"> ... </div> <!-- 操作欄 --> <div class="v3ai__tools flexbox flex-alignc"> <div class="option flex1 flexbox"> <div class="btn" :class="{'active': isDeep}" @click="isDeep =! isDeep"><i class="iconfont ai-deepthink"></i> 深度思考 <span class="fs-12">(R1)</span></div> <div class="btn" :class="{'active': isNetwork}" @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" :content-style="{'min-width': '125px'}"> <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-tooltip content="截圖提問" position="top" mini> <a-button shape="circle"><icon-scissor size="18" @click="handleCut" /></a-button> </a-tooltip> <a-dropdown :show-arrow="false" position="top" :popup-translate="[-10, -5]" :content-style="{'min-width': '160px'}"> <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" :disabled="!editorText?.trim() || sessionstate.loading" @click="handleSubmit"> <icon-arrow-up v-if="!sessionstate.loading" size="20" /> <icon-loading v-else size="18" /> </a-button> </div> </div> </div> </template>
Electron35接入DeepSeek-V3聊天模型
實現一個正常非流式輸出。
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) }) // 一次性返回非流式內容 console.log(completion.choices[0].message.content)
通過for循環stream分片返回,實現流式打字輸出效果。
// 使用數組存儲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() } } }
綜上就是Electron35+Vue3.5+DeepSeek開發客戶端ai流式對話的一些知識分享,感謝大家的閱讀與支持!
Tauri2.0-DeepSeek電腦端Ai對話|tauri2+vite6+deepseek流式ai聊天系統
flutter3-deepseek流式AI模板|Flutter3.27+Dio+DeepSeeek聊天ai助手
附上幾個最新實戰項目
Uniapp-DeepSeek跨三端AI助手|uniapp+vue3+deepseek-v3流式ai聊天模板
Vue3-DeepSeek-Chat流式AI對話|vite6+vant4+deepseek智能ai聊天助手
vue3-webseek網頁版AI問答|Vite6+DeepSeek+Arco流式ai聊天打字效果
Electron32-ViteOS桌面版os系統|vue3+electron+arco客戶端OS管理模板
uniapp+vue3酒店預訂|vite5+uniapp預約訂房系統模板(h5+小程序+App端)
flutter3-dymall仿抖音直播商城|Flutter3.27短視頻+直播+聊天App實例
Vite5+Electron聊天室|electron31跨平臺仿微信EXE客戶端|vue3聊天程序


浙公網安備 33010602011771號