2025实战ai又一新作:基于vue3+arco.design整合deepseek-v3聊天大模型搭建网页版ai助手。
deepseek-vue3-webai支持上下文多轮对话、流式输出效果、支持暗黑+亮色模式、代码高亮等功能。
运用技术
- 前端框架:vite^6.2.0+vue^3.5.13+vue-router^4.5.0
- 大模型ai框架:DeepSeek-R1 + OpenAI
- 组件库:arco-design^2.57.0 (字节桌面端组件库)
- 状态管理:pinia^3.0.1
- 本地存储:pinia-plugin-persistedstate^4.2.0
- 高亮插件:highlight.js^11.11.1
- markdown解析:markdown-it
功能特点
- 基于vite6构建,接入deepseek-v3性能更优
- 支持上下文多轮对话、流式输出
- 支持代码高亮、生成图片功能
- 支持各种代码高亮,便于展示和分享代码片段
- 使用arco-design组件库,风格统一
项目框架目录
布局模板
<script setup> import Sidebar from '@/layouts/components/sidebar/index.vue' </script> <template> <div class="vu__container"> <div class="vu__layout flexbox flex-col"> <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>
<template> <div class="vu__sidebar" :class="{'collapsed': appstate.config.collapsed}"> <a-button class="vu__sidebar-collapse" shape="circle" @click="handleCollapse"></a-button> <aside class="vu__sidebar-aside flex1 flexbox flex-col"> <div class="vu__aside-head"> <router-link to="/" class="logo"><i class="iconfont ai-deepseek"></i><span class="fs-14 ff-ab">Vue3-WebSeek</span></router-link> <div class="btn-create flex-c mt-15" @click="handleCreate"><i class="iconfont ai-newchat fs-20"></i>新建对话</div> </div> <div class="vu__aside-navlinks flexbox flex-col"> <div class="section-navitem" @click="toLink('/aihub')"> <span class="icon flex-c"><icon-compass size="18" /></span> <div class="title">AI 导航</div> </div> <a-dropdown trigger="hover" :show-arrow="false" position="rt" :popup-offset="15" :content-style="{'min-width': '150px'}"> <div class="section-navitem"> <span class="icon flex-c"><icon-command size="18" /></span> <div class="title">AI 技能</div> <i class="iconfont ai-arrR c-999 fs-12"></i> </div> <template #content> <a-doption><i class="iconfont ai-aisousou"></i> AI搜索</a-doption> <a-doption><i class="iconfont ai-fanyi"></i> 快速翻译</a-doption> <a-doption><i class="iconfont ai-xiezuo"></i> 帮我写作</a-doption> <a-doption><i class="iconfont ai-tuxiang"></i> 图像生成</a-doption> <a-doption><i class="iconfont ai-aicode"></i> AI编程</a-doption> </template> </a-dropdown> </div> <a-divider style="margin: 0;" /> <div class="vu__aside-sessions flex1 flexbox flex-col"> <div class="vu__aside-navlinks"> <div class="section-navitem plain"> <span class="icon flex-c"><icon-message size="18" /></span> <div class="title">最近对话</div> <i class="clean iconfont ai-qingli" @click="handleClean"></i> </div> </div> <a-scrollbar :outer-style="{'height': '100%'}"> <template v-if="sessionstate.session.length"> <SessionList /> </template> <template v-else> <a-empty description="暂无对话" /> </template> </a-scrollbar> </div> <div class="vu__aside-navlinks" @click="toLink('/setting')"> </div> </aside> </div> </template>
vue3仿deepseek/豆包编辑器
<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"> <a-textarea v-model="editorText" :auto-size="autoSize" placeholder="有问题,尽管问" @input="handleInput" /> </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> 深度思考 (R1)</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> </template> </a-dropdown> <a-tooltip content="添加图片" position="top" mini> <a-button shape="circle"><icon-image size="18" /></a-button> </a-tooltip> <a-dropdown :show-arrow="false" position="top" :popup-translate="[-10, -5]"> <a-button shape="circle" style="background: none;"><icon-plus size="18" /></a-button> <template #content> <a-doption value="pyq"><icon-apps /> 文件</a-doption> <a-doption value="qq"><icon-apps /> PDF文档分析</a-doption> <a-doption value="qq"><icon-apps /> Word文档分析</a-doption> <a-doption value="qq"><icon-apps /> 网页总结</a-doption> </template> </a-dropdown> <a-divider direction="vertical" style="margin: 0 8px 0 5px;" /> <a-button 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>
vue3接入deepseek-v3
const completion = await openai.chat.completions.create({ messages: [ {role: 'user', content: editorValue} ], model: 'deepseek-chat', // deepseek-chat对话模型 deepseek-reasoner推理模型 stream: false, // 流式输出 max_tokens: 8192, // 限制一次请求中模型生成 completion 的最大 token 数(默认使用 4096) temperature: 0.4, // 严谨采样 越低越严谨(默认1) }) // 处理返回数据 console.log(completion.choices[0].message.content)
综上就是vite6+deepseek-v3实战网页版智能ai聊天会话的一些分享,希望对大家有所帮助~