Electron35-DeepSeekAI原创跨平台electron35+vite6仿deepseek客户端ai对话。
基于
electron35+vite6+vue3.5+deepseek-v3+arcoDesign
搭建客户端仿deepseek/豆包ai流式输出聊天模板。集成了Electron35
对接DeepSeek API
聊天会话大模型。支持亮色+暗黑主题模式、代码高亮、本地缓存。
技术栈
- 开发工具:vscode
- 技术框架:vite6.2.0+vue3.5.13+vue-router^4.5.0
- 大模型框架:DeepSeek-V3-0324 + OpenAI
- 跨平台框架:electron^35.1.2
- UI组件库:arco-design^2.57.0 (字节桌面端组件库)
- 状态组件:pinia^3.0.1
- 会话缓存:pinia-plugin-persistedstate^4.2.0
- 高亮插件:highlight.js^11.11.1
- markdown解析:markdown-it
功能特性
- 基于跨平台Electron35+Vite6框架,接入DeepSeek-V3,性能更优
- 支持各种代码高亮、易于展示分享代码片段
- 支持上下文多轮会话、提示词生成图片及预览
- 支持多窗口、亮色+暗黑主题
- 支持新窗口打开会话里面的链接
项目框架目录
采用electron35+vite6
搭建项目模板,接入deepseek-v3
模型,流式stream输出返回结果。
electron35-vue3-deepseek客户端ai项目已经发布到我的原创作品集。
.env配置
去deepseek官网申请apiKey,替换.env
文件里的VITE_DEEPSEEK_API_KEY
即可体验deepseek-v3模型。
# 项目名称
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编辑器
<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+vite6对接deepseek-v3搭建桌面端ai对话的一些知识分享。
往期热文
-
基于vue3.5+deepseek+vant4+markdown仿DeepSeek-R1流式聊天
https://blog.csdn.net/yanxinyun1990/article/details/146306730 -
基于Vite6+Deepseek+ArcoDesign+Markdown构建网页版AI流式
https://blog.csdn.net/yanxinyun1990/article/details/146571816 -
原创自研electron31+vite5+pinia2仿微信客户端Exe聊天实例
https://blog.csdn.net/yanxinyun1990/article/details/140284304 -
flutter3.27实战抖音app商城|flutter3.x+getX仿抖音直播+短视频+聊天
https://blog.csdn.net/yanxinyun1990/article/details/145471476 -
uniapp-vue3-wechat:基于uniapp+vue3仿微信app聊天
https://blog.csdn.net/yanxinyun1990/article/details/138317354 -
Electron31-ViteAdmin桌面端后台|electron31+element-plus客户端后台
https://blog.csdn.net/yanxinyun1990/article/details/141310166 -
自研tauri2.0-vue3-os桌面端仿macos管理系统
https://blog.csdn.net/yanxinyun1990/article/details/144626469 -
原创uniapp+vue3+pinia2跨三端(H5+App+小程序)酒店预订模板
https://blog.csdn.net/yanxinyun1990/article/details/144321309