学习AI 工程师第 3 天:小程序中调用豆包模型,实现ai助手(打字机效果与流式输出)

A :流式输出(Streaming) :
【后端技术】指 AI 模型生成文本时‌逐块(chunk)返回数据‌,而非等全部内容生成完再一次性返回

‌B:打字机效果(Typing Effect)‌ :
【前端交互表现】指将接收到的文本‌逐字或逐段显示‌,它不仅能缓解用户等待的焦虑,还能模拟真实对话的感觉。

一、项目概述

微信小程序中接入(豆包模型)火山引擎豆包 API,并实现类似 ChatGPT 的打字机流式输出效果。
学习目标:

  1. 学习流式输出 SSE 的原理
  2. 小程序中,SSE 实现打字机效果的 AI 聊天框
  3. 解决流式输出的断行、乱码问题

项目技术:

  1. 打字机效果渲染:通过前端定时器模拟逐字输出。
  2. 聊天历史持久化:使用 wx.setStorageSync 保存记录。
  3. 工程化代码结构:配置分离、逻辑清晰、
二、核心知识点详解
  1. SSE (Server-Sent Events) 流式输出

1.1 概念:SSE 是一种基于 HTTP 的、允许服务器向客户端单向推送数据的技术。在大模型(LLM)应用中,它是实现 "流式输出" 的基石。

1.2 SSE 工作流程:

  • 客户端发起请求:建立一个长连接 HTTP 请求。
  • 服务器保持连接:Content-Type 设置为 text/event-stream。
  • 数据分批推送:服务器处理一点就推一点,格式通常为 data: {...}\n\n。
  • 客户端解析渲染:通过事件监听接收数据块并实时更新 UI。

1.3 技术选定 :

由于微信小程序原生 wx.request 对标准 SSE 流支持有限,本项目采用主流小程序实现ai助手的做法:

请求模式:设置 stream: false、一次性拿到完整回复后,前端通过定时器模拟 "打字机" 效果(兼容性极好,不需要处理复杂的流解析)。

  1. 小程序中打字机效果的 AI 聊天框实现:核心逻辑在于 startTypewriter 函数

2.1 实现思路 :

先占位:收到用户消息后,立即在界面上放一个 "Loading" 状态的空消息框。

锁索引:由于数组是动态变化的,必须提前锁定该条 AI 消息在 messages 数组中的下标(msgIndex),否则 setData 时可能会更新错位置。

2.2 定时器逐字追加 :

使用 setInterval 按照 TYPE_SPEED (30ms) 的间隔触发。

每次截取字符串 fullText.substring(0, currentIndex)。

通过 this.setData({messages\[${msgIndex}.content]: ...}) 进行局部更新。

三、完整实践代码

从模型的注册-模型3个核心参数的获取-小程序代码的实现-完整闭环:https://blog.csdn.net/qq_41930094/article/details/160587731?spm=1001.2014.3001.5501

相关推荐
m0_5873830010 小时前
西安同城拼车软件开发实战指南:从零搭建高效系统
人工智能·小程序·数据挖掘·系统架构·需求分析
weixin_lynhgworld13 小时前
抽取类盲盒小程序的五条合规红线意味着什么?
小程序
现任明教教主~13 小时前
运营级多门店洗车贴膜汽车在线核销保养服务系统洗车预约洗车系统消费分佣扫码核销系统
微信小程序·小程序·汽车
小小王app小程序开发14 小时前
盲盒微信小程序开发实战:架构、核心难点与实现方案
小程序
MoonMoonLee7 天前
小程序配置
小程序
2501_916007477 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
JQweryuiop7 天前
中小型游戏陪练工作室数字化管理实践:基于七彩屋电竞护航小程序订单、履约与绩效系统的落地复盘
大数据·游戏·小程序·架构
Ai-_Man7 天前
您您这可以把Mistral AI的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。
人工智能·ai·小程序·电脑
2501_916008897 天前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
微擎应用市场7 天前
简单拼车小程序系统:实现出行与物流资源的高效精准匹配
小程序