<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      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助手

      vue3-webseek網頁版AI問答|Vite6+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

      ???項目特色

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

      ??項目框架結構

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

      Electron35-DeepSeek桌面端AI項目已經同步到我的原創作品鋪,感謝大家的支持~

      electron35+deepseek+vite6桌面端AI流式聊天對話EXE

      .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聊天程序

      tauri2.0-admin桌面端后臺系統|Tauri2+Vite5+ElementPlus管理后臺EXE程序

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

       

      posted @ 2025-04-17 12:47  xiaoyan2017  閱讀(912)  評論(0)    收藏  舉報
      友情鏈接: UP主小店B站
      主站蜘蛛池模板: 在线看片免费人成视频久网| 午夜一区欧美二区高清三区| 色悠悠国产精品免费在线| 啊轻点灬大JI巴太粗太长了欧美| 成人拍拍拍无遮挡免费视频| 青春草在线视频观看| 另类专区一区二区三区| 亚洲乱色伦图片区小说| 在线精品国产中文字幕| 我国产码在线观看av哈哈哈网站| 少妇特黄a一区二区三区| 免费久久人人香蕉av| 无码精品人妻一区二区三区中| 午夜射精日本三级| 伊人精品久久久大香线蕉| 中文字幕国产日韩精品| 久久精品国产www456c0m| 精品无码国产一区二区三区51安| 久久精品国产亚洲av久| 欧美成本人视频免费播放| 欧美视频网站www色| 秋霞在线观看秋| 亚洲人妻中文字幕一区| 国产片av在线观看国语| 欧美三级a做爰在线观看| 亚洲区一区二区三区精品| 国产在线超清日本一本| 3d无码纯肉动漫在线观看| 国产精品伦理一区二区三| 精品久久精品午夜精品久久| 国产精品视频不卡一区二区| 国偷自产一区二区三区在线视频| 蜜桃麻豆www久久囤产精品| 无码人妻斩一区二区三区| 最新国产精品拍自在线观看| 翁源县| 亚洲国内精品一区二区| 久久不见久久见www日本| 亚洲女同精品久久女同| 国产精品亚洲综合网一区| 黑人巨茎大战白人美女|