deepseek-v3+vue3.5网页版webai流式对话模板

举报
yxybox 发表于 2025/04/02 22:33:48 2025/04/02
87 0 0
【摘要】 vue3-webai-deepseek:基于vite6+vue3.5+deepseek api+arcoDesign搭建网页版流式输出效果AI聊天对话小助手。集成了Vue3 接入 DeepSeek API 的完整聊天会话大模型。支持上下文多轮对话、图像生成、亮色+暗黑主题模式、代码高亮、本地缓存。

2025实战ai应用:vue3.5+deepseek-v3-0324+openai+arcoDesign搭建网页版web流式ai聊天模板。

  • 基于vite6+deepseek-v3搭建智能ai聊天助手

https://bbs.huaweicloud.com/blogs/450148

    未标题-aa.png

    未标题-d.png

    技术栈

    • 技术框架: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

    p1.gif

    p4-1.gif

    p4-3.gif

    项目框架目录

    360截图20250325220544741.png

    002360截图20250325163310433.png

    002360截图20250325162855042.png

    003360截图20250325164657175.png

    007360截图20250325165830309.png

    008360截图20250325170304101.png

    009360截图20250325170338101.png

    010360截图20250325170556229.png

    011360截图20250325171125895.png

    014360截图20250325172027915.png

    011360截图20250325171200852.png

    012360截图20250325171645879.png

    016360截图20250329212110062.png

    项目布局模板

    整个项目分为侧边栏+顶部导航条+AI对话内容区三个板块。

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

    对话框

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

    未标题-b.png

    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.6, // 严谨采样 越低越严谨(默认1)
    })
    
    // 返回ai内容
    console.log(completion.choices[0].message.content)

    作者:xiaoyan2017
    链接:https://www.cnblogs.com/xiaoyan2017/p/18795796
    来源:博客园
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    作者其他文章

    评论(0

    抱歉,系统识别当前为高风险访问,暂不支持该操作

      全部回复

      上滑加载中

      设置昵称

      在此一键设置昵称,即可参与社区互动!

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。