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

举报
yxybox 发表于 2025/03/28 23:31:00 2025/03/28
90 0 0
【摘要】 2025年AI实战:vue3.5+deepseek api+openai+vant4打造一款高颜值流式AI会话小助手。flutter3.27实战抖音app短视频+直播实例https://bbs.huaweicloud.com/blogs/446491原创Flutter3.27仿携程app酒店预订系统https://bbs.huaweicloud.com/blogs/447463使用技术技术框...

2025年AI实战:vue3.5+deepseek api+openai+vant4打造一款高颜值流式AI会话小助手。

  • flutter3.27实战抖音app短视频+直播实例

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

  • 原创Flutter3.27仿携程app酒店预订系统

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

未标题-i.png

未标题-c.png

使用技术

  • 技术框架:vite^6.2.0+vue^3.5.13+vue-router^4.5.0
  • 大模型框架:DeepSeek-R1 / OpenAI
  • UI组件库:vant^4.9.17 (有赞vue3移动端组件库)
  • 状态管理:pinia^3.0.1
  • 高亮插件:highlight.js^11.11.1
  • markdown解析:markdown-it
  • 本地缓存:pinia-plugin-persistedstate^4.2.0

p-2.gif

p-2-3.gif

p-2-5.gif

项目框架结构

360截图20250315092255602.png

024360截图20250314215829952.png

.env配置

# title
VITE_APP_TITLE = 'Vue3-DeepSeek-Chat'

# port 默认http://localhost:5173/
VITE_PORT = 3001

# 运行时自动打开浏览器
VITE_OPEN = true

# 开启https
VITE_HTTPS = false

# 是否删除生产环境 console
VITE_DROP_CONSOLE = true

# DeepSeek API配置
VITE_DEEPSEEK_API_KEY = 替换为你的 API Key
VITE_DEEPSEEK_BASE_URL = https://api.deepseek.com

布局模板

<template>
  <div class="flexbox flex-col" style="height:100%;">
    <Toolbar :title="chatSession?.title" />

    <div class="v3ai__scrollview flex1">
      <!-- Chat对话 -->
      <div v-if="chatSession && !isEmpty(chatSession.data)" class="v3ai__chatbot" ref="scrollRef" @scroll="onScroll">
        <div class="v3ai__chatbot-sessions">
          ...
        </div>
        <!-- 滚动底部 -->
        <div class="v3ai__scrollbottom flex-c" :class="{'is-bottom': reachBottom}" @click="scrollToBottom"><i class="iconfont ai-arrD"></i></div>
      </div>
      <!-- 导语 -->
      <div v-else class="v3ai__chatbot-intro">
        <i class="logo iconfont ai-deepseek"></i>
        <h3 class="name"><span class="txt text-gradient">嗨~ Vue3-DeepSeek</span></h3>
        <p class="desc">你身边的智能小帮手,我可以帮你搜索、答疑、写作,请把你的任务交给我吧~</p>
        <div class="prompt">
          <p class="tip flex-c"><span class="flex1">你可以这样问</span><span class="flex-c" @click="refreshPrompt">换一换<i class="iconfont ai-shuaxin"></i></span></p>
          <ul class="list">
            <li v-for="(item,index) in promptList" :key="index">
              <div class="txt" @click="changePrompt(item.prompt)">{{item.emoji}} {{item.prompt}}</div>
            </li>
          </ul>
        </div>
      </div>
    </div>

    <!-- 编辑器 -->
    <ChatEditor ref="editorRef" :value="promptValue" :reachBottom="reachBottom" :scrollBottom="scrollToBottom" />
  </div>
</template>

001360截图20250314173304502.png

002360截图20250314173353264.png

002360截图20250314173353265.png

002360截图20250314173515120.png

003360截图20250314173625200.png

004360截图20250314173718465.png

004360截图20250314173826448.png

004360截图20250314173826450.png

005360截图20250314160202064.png

006360截图20250314174617574.png

006360截图20250314174710455.png

007360截图20250314174943383.png

008360截图20250314175147391.png

008360截图20250314175203238.png

011360截图20250314175618071.png

013360截图20250314175854679.png

路由配置

/**
 * 路由配置
 * @author andy
 */

import { createRouter, createWebHashHistory } from 'vue-router'
import { appStore } from '@/pinia/modules/app'

// 批量导入modules路由
const modules = import.meta.glob('./modules/*.js', { eager: true })
const patchRoutes = Object.keys(modules).map(key => modules[key].default).flat()

const routes = [
  // 错误模块
  {
    path: '/:pathMatch(.*)*',
    component: () => import('@views/error/404.vue'),
    meta: {
      title: '404 error'
    }
  },
  ...patchRoutes
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

// 全局钩子拦截
router.beforeEach((to, from, next) => {
  const store = appStore()
  if(to?.meta?.isAuth && !store.isLogged) {
    next('/login')
  }else {
    next()
  }
})

router.afterEach(() => {
  // ...
})

router.onError(error => {
  console.warn('Router Error>>', error.message);
})

export default router

未标题-h.png

vue3调用deepseek

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)

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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