Electron41 + Vite8.3 + Vue3 接入 DeepSeek-V4.1-Flash,手搓客户端 AI 对话,丝滑到离谱
vite8-electron-ai:Electron 41 + Vue3 + Vite8 + Arco + OpenAI 接入 DeepSeek-V4.1,从 0 到 1 打造电脑端专属 AI 搭子 🧠💻
技术栈:
- Electron 41
- Vue 3
<script setup> - Vite 8
- Arco Design
- OpenAI SDK 接入 DeepSeek-V4.1
从项目脚手架开始,从0-1 搭建一个AI 桌面端:
- 流式打字输出
- 浅色 / 深色主题
- 深度思考(reasoner)
- Markdown / 代码块 / 复制 / 下载
- KaTeX 数学公式
- Mermaid 图表渲染
- 多轮对话 + 本地持久化会话
项目目录结构
基于 electron41+vite8 搭建项目,调用deepseek-v4.1-flash 快速大模型, vue3 setup 语法编码页面。
electron41-vue3-deepseek已经正式更新到我的原创作品小店。
Electron41+Vite8+DeepSeek桌面版AI流式会话模板Exe
核心特性
🔄 流式对话引擎
| 能力 | 说明 |
|---|---|
| SSE 流式输出 | 基于 openai sdk ,逐字渲染打字效果,延迟 < 100ms |
| 打字机动画 | 类似deepseek打字输出效果 |
| 多轮上下文 | 维护 messages 数组,自动携带历史对话,支持上下文窗口管理 |
| 本地会话存储 | 基于 uni.setStorageSync 持久化会话列表 |
🧠 深度思考链(Reasoning Chain)
| 能力 | 说明 |
|---|---|
| 思维链展示 | 解析 DeepSeek v4.1 的 reasoning_content 字段,以可折叠面板展示推理过程 |
| 渐进式渲染 | 思考链与正文同步流式输出,思考中显示脉冲动画 |
| 状态标识 | 区分「思考中 / 已思考 」状态,UI 差异化呈现 |
📐 数学公式渲染(KaTeX)
| 能力 | 说明 |
|---|---|
| 行内/块级公式 | 支持 $...$ 行内公式与 $$...$$ 块级公式 |
📊 Mermaid 图表渲染(H5 端)
| 能力 | 说明 |
|---|---|
| 实时渲染 | 识别 ```````mermaid```` 代码块,调用 Mermaid.js 渲染为 SVG |
| 交互支持 | 支持缩放、平移,点击节点可触发回调 |
💻 代码块增强
| 能力 | 说明 |
|---|---|
| Sticky 顶部栏 | 代码块语言标识 + 复制按钮固定吸顶,滚动不消失 |
| 横向滚动 | 长代码行横向滚动,不破坏布局 |
| 语法高亮 | 基于 highlight.js 按需加载语言包,支持 50+ 语言 |
| 一键复制 | 点击复制按钮,写入系统剪贴板,带成功反馈 |
🔗 链接与图片
| 能力 | 说明 |
|---|---|
| 链接跳转 | 自动识别 URL,H5 端 _blank 新窗口打开 |
| 图片预览 | 识别 Markdown 图片,点击预览 |
接入最新deepseek-flash大模型
const completion = await openai.chat.completions.create({
// 单一会话
/* messages: [
{role: 'user', content: editorValue}
], */
// 多轮会话
messages: props.multiConversation ? historySession.value : [{role: 'user', content: editorValue}],
// 对话模型
model: 'deepseek-flash',
// 是否深度思考
thinking: {'type': chatState.thinkingEnabled ? 'enabled' : 'disabled'},
// 流式输出
stream: true,
// 限制一次请求中模型生成的最大 token 数。取值范围为 1 到 384K(393216)。未设置时,非思考模式默认 8K,思考模式默认 64K
// max_tokens: 8192,
// 严谨采样 越低越严谨(默认1) 介于 0 和 2 之间。更高的值,如 0.8,会使输出更随机,而更低的值,如 0.2,会使其更加集中和确定。
temperature: 0.4,
})
项目布局结构
<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>
2026 最硬核实战:Electron41 + Vue3 + Vite8 从 0 到 1 手搓 DeepSeek 桌面 AI 客户端 就分享到这里了,希望以上的项目分享对大家有些启发帮助哈~