跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
JavaScriptWeChatAI大前端

基于 uni-app 与 DeepSeek 的跨端 AI 流式对话系统实战

基于 uni-app 和 Vue3 构建的跨三端 AI 流式对话系统,接入 DeepSeek API 实现流式响应。支持 H5、小程序及 App 端运行,具备深色模式、深度思考链、KaTeX 公式渲染及代码高亮等功能。文章详解 mp-html 组件在小程序中的流式 SSE 处理方案及 Markdown 渲染优化细节,并提供项目配置参考。

极客工坊发布于 2026/3/24更新于 2026/5/87 浏览
基于 uni-app 与 DeepSeek 的跨端 AI 流式对话系统实战
uni-app+vue3 跨三端 AI 流式对话系统

本项目基于 uni-app+vue3+uv-ui 接入 deepseek api,搭建支持 H5、小程序及安卓端的 AI 流式对话系统。实现了浅色 + 深色主题切换,新增深度思考链、katex 数学公式、代码复制/高亮、链接/图片预览等功能。

项目界面展示

动态效果演示

技术栈选型

  • 编辑器:HbuilderX 4.87
  • 核心框架:uni-app+vue3+pinia2+vite5
  • 大模型:DeepSeek-V3.2
  • UI 组件:uni-ui+uv-ui
  • 渲染增强:highlight.js(代码高亮)、ua-markdown+mp-html(Markdown 解析)
  • 缓存方案:pinia-plugin-unistorage
  • 编译目标:Web+ 小程序+APP 端

目录结构概览

多端运行效果

App 端展示

项目架构

采用最新 uniapp+vue3 模板搭建,直接接入 deepseek-v3.2 大模型接口。项目结构清晰,支持快速部署到 h5、小程序和安卓端。

H5 布局

小程序适配

App 适配

核心功能亮点

  1. 流式打字效果:基于 uni-app+vue3 接入 deepseek api,实现类似原生聊天的打字机体验。
  2. 全平台覆盖:一次开发,编译至 H5、小程序端及安卓 APP。
  3. 深度思考链:支持展示模型的推理过程,提升回答透明度。
  4. 数学公式支持:新增 katex 渲染,完美显示复杂公式。
  5. 图表渲染:支持 Mermaid 图表(仅 H5 端),便于数据可视化。
  6. 代码块优化:顶部 sticky 粘性定位、横向滚动、行号显示及一键复制。
  7. 交互增强:支持代码高亮、上下文多轮对话、本地会话存储。
  8. 多媒体处理:支持链接跳转、图片在线预览。

深色模式切换

交互细节

Web 端采用 750px 排版居中布局,适配不同屏幕尺寸。

Web 端展示

Web 响应式

Web 详情

Web 聊天

Web 输入

环境配置

获取 deepseek apikey 后,替换项目根目录下 .env 文件中的 key 即可启动。

# 项目名称
VITE_APPNAME='Uniapp-DeepSeek'
# 运行端口
VITE_PORT=5173
# DeepSeek API 配置
VITE_DEEPSEEK_API_KEY= 替换为你的 APIKey
VITE_DEEPSEEK_BASE_URL= https://api.deepseek.com 

配置截图

API 设置

成功连接

页面布局实现

使用 uv3-layout 构建基础框架,包含导航栏、聊天视图区域及底部输入框。

布局结构

欢迎页

<template>
  <uv3-layout>
    <!-- 导航栏 -->
    <template #header>
      <Toolbar :title="chatSession?.title"/>
    </template>
    <view v-if="chatSession && !isEmpty(chatSession.data)" class="vu__chatview flexbox flex-col">
      <scroll-view :scroll-into-view="scrollIntoView" scroll-y="true" @scrolltolower="onScrollToLower" @scroll="onScroll" style="height: 100%;">
        <view class="vu__chatbot">...</view>
        <view id="scrollbottom-placeholder" style="height: 1px;"></view>
      </scroll-view>
      <!-- 滚动到底部按钮 -->
      <view class="vu__scrollbottom" @click="scrollToBottom">
        <text class="iconfont ai-arrD fw-700"></text>
      </view>
    </view>
    <!-- 欢迎信息 -->
    <view v-else class="vu__welcomeinfo">
      <view class="intro flex-c flex-col">
        <view class="logo flex-c" style="gap: 15px;">
          <view class="iconfont ai-deepseek" style="font-size: 40px;"></view>
          <text style="color: #999; font-size: 20px;">+</text>
          <image src="/static/uni.png" mode="widthFix" style="height: 30px; width: 30px;"/>
        </view>
        <view class="name"><text class="txt text-gradient">嘿~ Uniapp-DeepSeek</text></view>
        <view class="desc">我可以帮你写代码、答疑解惑、写作各种创意内容,请把你的任务交给我吧~</view>
      </view>
      <view class="prompt">
        <view class="tip flex-c">
          <text class="flex1">试试这样问</text>
          <view class="flex-c" @click="refreshPrompt">
            换一换
            <uni-icons type="refreshempty" color="#999" size="14"/>
          </view>
        </view>
        <view v-for="(item,index) in promptList" :key="index">
          <view class="option" @click="changePrompt(item.prompt)">
            {{item.emoji}}{{item.prompt}}
            <text class="arrow iconfont ai-arrR c-999"></text>
          </view>
        </view>
      </view>
    </view>
    <template #footer>
      <view :style="{'padding-bottom': keyboardHeight + 'px'}">
        <ChatEditor ref="editorRef" v-model="promptValue" :scrollBottom="scrollToBottom"/>
      </view>
    </template>
  </uv3-layout>
</template>

Markdown 渲染方案

在小程序中,rich-text 组件对部分标签支持有限。这里改用 mphtml 配合 markdown-it 解析器,能更稳定地处理 HTML 标签结构。经测试,该方案在 H5、小程序及 App 端均能流畅支持流式输出。

<template>
  <view class="ua__markdown">
    <mp-html :content="parseNodes" @linktap="handleLinkTap"/>
  </view>
</template>
const props = defineProps({
  // 解析内容
  source: String,
  // 是否显示代码块行号 (关闭后性能更优)
  showLine: {
    type: [Boolean, String],
    default: true
  },
  // 开启 katex
  katex: {
    type: Boolean,
    default: true
  },
  // markdown-it 插件配置
  plugins: {
    type: Array,
    default: () => []
  }
})

Markdown 渲染效果

公式渲染

代码高亮

表格支持

(此处省略部分渲染效果截图)

小程序流式 SSE 处理

小程序端无法直接使用标准 Fetch 或 WebSocket 进行 SSE 流式传输,需利用 uni.request 开启 enableChunked 特性来实现分块接收。

// #ifdef MP-WEIXIN
try {
  this.loading = true
  this.answerText = ''
  this.reasoningText = ''
  this.lastUpdate = 0

  // 发起新请求前终止旧请求
  const requestTask = await uni.request({
    url: baseURL + '/v1/chat/completions',
    method: 'POST',
    header: {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${apiKEY}`
    },
    data: {
      // 多轮会话
      messages: this.multiConversation ? this.historySession : [{ role: 'user', content: editorValue }],
      model: this.chatState.thinkingEnabled ? 'deepseek-reasoner' : 'deepseek-chat',
      stream: true, // 流式输出
      max_tokens: 8192, // 限制一次请求中模型生成 completion 的最大 token 数
      temperature: 0.4 // 严谨采样,越低越严谨
    },
    enableChunked: true, // 开启分块传输 transfer-encoding chunked
    success: (res) => {
      const { statusCode } = res
      if (statusCode !== 200) {
        console.error('请求失败,状态码:', statusCode)
        this.loading = false
        this.answerText = ''
        this.reasoningText = ''
        uni.showToast({ title: errorMsgCode[statusCode], icon: 'none' })
        return
      }
      console.log('request success', res)
    },
    fail: (error) => {
      console.log('request fail', error)
      this.loading = false
      this.answerText = ''
      this.reasoningText = ''
      uni.showToast({ title: error.errMsg, icon: 'none' })
    }
  })

  requestTask.onChunkReceived((res) => {
    // 处理接收到的数据块
    // ... 解析逻辑
  })
} catch (error) {
  this.loading = false
  this.chatState.updateSession(this.botKey, { loading: false })
  throw new Error(`request error: ${error.message || '请求异常'}`)
}
// #endif

小程序流式效果

目录

  1. uni-app+vue3 跨三端 AI 流式对话系统
  2. 技术栈选型
  3. 项目架构
  4. 核心功能亮点
  5. 环境配置
  6. 项目名称
  7. 运行端口
  8. DeepSeek API 配置
  9. 页面布局实现
  10. Markdown 渲染方案
  11. 小程序流式 SSE 处理
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型后训练技术全解析:Llama3.1、DeepSeek-V3 等关键实践
  • std::execution 实战指南:C++26 高性能并发编程关键技术
  • JavaScript 响应对象 Response 详解
  • Visual C++ 运行库安装与 DLL 缺失问题解决指南
  • ORA-24550 Signal Received 错误排查与解决方案
  • gRPC 跨语言通信实战:C++ 服务端与 C# 客户端搭建
  • 低空无人机 AI 算法详解:覆盖公安、消防、水利等 11 大行业
  • 豆包 Seedream 4.0 多图融合与主体一致性技术评测
  • Linux Ext2 文件系统深度解析
  • AIGC 中的变分自编码器(VAE)代码与实现
  • 动态规划专题:子序列问题的核心思路与实战
  • Ubuntu Linux 安装搜狗拼音输入法
  • OpenClaw Gateway 安装失败 systemctl --user is-enabled unavailable 排查与解决
  • Android DataBinding 从入门到进阶
  • 网络安全工程师职业解析与入门指南
  • 基于 Python 的数字签名教务管理系统
  • CycleGAN 详解与实现
  • llama.cpp 量化技术详解:降低大模型内存占用
  • Spring 事务管理与传播机制详解
  • MiniMax 开源 Office 文档引擎与飞猪旅行 Skill 技术解析

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online