必须启用stream=true并配置SSE解析才能实现实时逐字输出;需完成实名认证、开通模型、创建API Key并保存Endpoint ID;前端用fetch+getReader()处理data:流,后端代理避免密钥暴露与跨域。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Web应用中实时显示豆包AI的逐字输出效果,必须启用流式响应(stream=true),否则只能等到全部文本生成完毕才一次性返回。
获取豆包API密钥与Endpoint
访问火山引擎控制台(https://console.volcengine.com/),用手机号完成注册并【必须完成个人实名认证】,否则模型服务无法开通。
登录后搜索进入“火山方舟(ARK)”,在模型广场搜索 Doubao-lite-32k 或 Doubao-pro-128k,点击开通服务,状态变为“已启用”后方可使用。
左侧菜单进入“API Key 管理”→“创建 API Key”,名称随意(如 doubao-web-stream),权限选“读写”,生成后【立即复制保存,页面关闭后不可再查看】。
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
返回模型列表,点击已开通的豆包模型,复制其 Endpoint ID(格式为 ep-xxxxxxxxxxxxxxxx)。
构造符合流式要求的HTTP请求
向豆包API发送POST请求时,必须将 stream 字段设为 true,且请求头 Content-Type 必须为 application/json。
Authorization 头格式为:Bearer <你的API Key>,注意是 Bearer 后跟一个空格,再粘贴完整 key。
请求体至少包含以下字段:
{"model": "Doubao-lite-32k", "messages": [{"role": "user", "content": "你好"}], "stream": true}
若漏掉 "stream": true,接口将默认返回非流式结果,前端无法实现逐字渲染。
前端解析SSE流式数据
使用 fetch 发起请求后,需通过 response.body.getReader() 获取可读流,并用 decoder.decode() 解码 UTF-8 字节流。
豆包返回的是标准 Server-Sent Events(SSE)格式,每行以 data: 开头,末尾带双换行符;需手动剥离 data: 前缀并 JSON.parse() 解析。
当收到 data: [DONE] 行时,表示流结束,应主动调用 reader.cancel() 释放连接。
注意:不能直接用 response.json(),那会等待整个响应体加载完毕,彻底失去流式意义。
后端代理规避跨域与密钥暴露
第一步:在Node.js(或Python/PHP)后端新建一个 /api/doubao/stream 接口,接收前端POST过来的用户消息。
第二步:后端用 axios 或 fetch 向豆包真实Endpoint发起带 Authorization 头的请求,【严禁将API Key直接传给前端】。
第三步:后端开启流式转发——监听豆包响应的 data 事件,立即将原始 data: 行写回前端响应体,保持 chunked 编码。
第四步:前端仍调用你自己的 /api/doubao/stream,全程不接触任何密钥,也不受浏览器跨域限制。


















