谷歌SEO

谷歌SEO

Products

当前位置:首页 > 谷歌SEO >

前端如何实现AI流式文本输出效果?

96SEO 2026-08-03 21:40 1


🔥 前端也能玩转 AI 流式输出!从二进制流到打字机效果,一篇讲透

📌 前言 & 使用者痛点

痛点一:看到 ChatGPT 那种“打字机”效果。却不知道背后到底用了什么技术,导致在项目里复现时手足无措。

痛点二:大量文档只讲原理。却缺少一步步可运行的代码示例,初学者往往看不懂。

痛点三:在实际开发中。经常会碰到数据被截断、JSON 解析报错、流关闭不明确等坑,缺乏程序化的排查思路。

🎯 这篇文章适合谁

  • ✅ 了解 Vue 基础的前端初学者
  • ✅ 想接入 AI API 但不知道流式输出怎么处理的同学
  • ✅ 听过 Stream、SSE 但不知道是啥的同学
  • ❌ 已经很熟悉 ReadableStream 的大佬

📚 第一站:二进制流——水是怎么流动的

为什么数据是“流”?

You 在浏览器里看到的文字、图片、视频,在底层都是0 和 1 组成的二进制数据. 这些数据不是一次性全部到达,而是像水流一样。一小块一小块地流过来.

TextEncoder 与 TextDecoder

// 🔤 编码器:把字符串 → 二进制数组
const encoder = new TextEncoder;按理说,const bytes = encoder.encode;console.log,// Uint8Array
// 🔓 解码器:把二进制数组 → 字符串
const decoder = new TextDecoder;const str = decoder.decode;console.log,// "你好"

Uint8Array 是 JavaScript 中的一种类型化数组,只能存放 0~255 范围内的整数。按理说,

为什么要了解它?

Ai 服务端返回的数据*就是*这种 Uint8Array 二进制流。如果不认识它,后面的读取与解码过程将毫无头绪。

📚 第二站:ReadableStream——认识这根“水管”

什么是 ReadableStream?

ReadableStream 是浏览器原生提供的可读数据流 API,它代表一条可以逐块读取的数据通道。

基本使用方式

// fetch 返回一个包含 ReadableStream 的 response
const response = await fetch;按理说,console.log;// ReadableStream { locked: false,... }
// 从 stream 上获取读取器
const reader = response.body.getReader;

reader.read —— 拧开水龙头接水

// 每次 read 返回 { done: boolean。value: Uint8Array }
const { done,value } = await reader.read;// done === false → 还有数据,继续接
// done === true → 数据已读完
// value → 本次接到的一段二进制

📚 第三站:SSE 协议——水里加了什么“调料”

SSE 简介

SSE是一种服务器主动向浏览器推送文本数据的协议。

SSE 数据格式


再看data,{"id":"chatcmpl-xxx","choices":}
至于data,{"id":"chatcmpl-xxx"。"choices":}
data的观点是,{"id":"chatcmpl-xxx","choices":}
data这方面,
  • 每条消息以 "data: " 开头;
  • *换行符* 分隔不同消息;老实说,
  • "data: "

🐞 第四站:Vue 实战——逐行拆解执行流程

项目初始化


npm create vite@latest stream-demo -- --template vue
cd stream-demo
npm install

1️⃣ 响应式状态准备


import { ref } from 'vue';const question = ref;// 使用者输入框
const content = ref;
// AI 回答显示区
const stream = ref;// 流式/普通模式开关
``
Pain Point:content定义为ref`。页面不会自动更新,而只能手动触发渲染。

2️⃣ 调用 AI 接口 const update = async => { if return;content.value = '思考中...';const endpoint = `${import.meta.env.VITE_MIMO_API_BASE_URL}/chat/completions`;const headers = { Authorization: `Bearer ${import.meta.env.VITE_MIMO_API_KEY}`。'Content-Type': 'application/json',};说起来,const response = await fetch(endpoint,{ 至于method,'POST',headers,body: JSON.stringify({ 至于model。import.meta.env.VITE_MIMO_MODEL,messages:,stream: stream.value,// 👈 开启流式返回 }),});/* ---------- 流式处理开始 ---------- */ Pain Point:⚡️ 流式模式主要代码 if { content.value = '';// ===== 阶段 A:准备工具 ===== const reader = response.body.getReader;怎么说呢,// 获取读取器 const decoder = new TextDecoder;// UTF‑8 解码器 let done = false;let buffer = '';// ===== 阶段 B:循环读取 ===== while { const { done: doneReading,value } = await reader.read;done = doneReading;不过,
// 把上一次残留 + 本次新块拼起来再解码
const chunkValue = buffer + decoder.decode;buffer = '',// 按换行符切分并过滤出合法行
const lines = chunkValue.split
.filter);// ===== 阶段 C:逐行解析 =====
for {
const raw = line.replace.trim;if { // 收到结束标记
done = true;break,}
try {
const parsed = JSON.parse;const token = parsed.choices?.,.delta?.content,if {
content.value += token;// Vue 响应式自动更新页面
}
} catch {
// JSON 被截断 → 保存到 buffer 等下轮拼接
buffer += line + '
';}
}

}

  • Pain Point #1:`await reader.read` 会阻塞当前 async 函数,但不会卡死 UI;若忘记 `await` 则会得到未决 Promise,引发意外行为。老实说,

阶段细化演示

📦 第一次循环 – 正常两条 token

  1. 等待 reader.read → 收到第一块
  2. 解码 decoder.decode'data:{...\"从\"} 从data来看,{...\"前\"} '
  3. split & filter 得到两条合法行
  4. JSON.parse"从""前"
  5. 追加 content.value += token → 页面显示 “从前”

📦 第二次循环 – 数据被截断

  1. 收到包含 "在" 完整行 + 截断半句
  2. 完整行正常解析得到 "在" 并追加
  3. 截断半句 JSON.parse 报错,被捕获后存入 buffer

📦 第三次循环 – 拼接修复

  1. 新块只剩下被截断部分 "山"}]} "
  2. buffer + newChunk 恢复为完整 JSON 行
  3. 成功解析得到 "山" 并追加

📦 第四次循环 – 标记

  1. 最终一块返回 doneReading=true
  2. 循环退出。最终内容 “从前在山”

完整执行流程图

使用者点击提交 ──► fetch POST │ │ ▼ ▼ AI Server 按 token 推送 SSE ──► response.body │ │ getReader ▼ ▼ while { │ await reader.read ──► Uint8Array chunk decode │→ string 如 "data:{...}" split & filter │→ lines for each line: strip "data:" → if "" break → try JSON.parse → extract token → content += token catch → buffer += line ← 下轮拼接修复} }


常见坑 & 对策

痛点 描述 推荐方法
变量名冲突 reader.read 返回 {done,value} 与外层控制变量同名 使用解构重命名 {done: doneReading,value}
JSON 被截断 网络分片导致单条 SSE 消息跨块出现 buffer 暂存残余,在下一轮拼接后再解析
中文字符乱码 未传 {stream:true} 时中文被切割成非法字符 始终使用 decoder.decode
API Key 泄露 将密钥硬编码在前端源码中 使用 .env.local 并以 VITE_ 前缀暴露,仅供本地调试;老实说,生产环境建议走后端代理
未及时捕获 某些实现只依赖 reader.doneReading 导致最终一句未渲染 同时监听 doneReading && line==="" 双重退出条件

页面模板

{{ content }}


正在思考...

\ <\/div>\ <\/template>\

完整代码汇总

vue


标签: 打字机

SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback