豆包AI的API支持语音识别,但必须通过WebSocket发送符合五项参数的原始PCM二进制流(单声道、16kHz、int16、小端序),并严格配置ARK_APP_ID与ARK_ACCESS_TOKEN认证凭证,否则返回400错误或连接中断。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

豆包AI的API确实支持语音识别功能,但必须严格按其端到端实时语音大模型协议传入音频数据,否则服务端直接拒绝解析或返回400错误。你不能上传MP3、WAV文件或base64字符串,只能通过WebSocket发送原始PCM二进制流。
确认API接入前提
先检查是否已获取合法调用凭证:必须拥有ARK_APP_ID和ARK_ACCESS_TOKEN两个环境变量,缺一不可。若未配置,后续所有连接都会在StartSession阶段被服务端中断。
确保你的Node.js服务已部署WebSocket客户端,并能维持长连接——豆包RealtimeAPI不接受HTTP POST上传音频,只认WebSocket二进制帧。
准备符合要求的PCM音频
音频必须满足五项硬性参数,任意一项不符,ASR引擎将静默丢弃整段流:
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
• 格式:PCM(未经压缩,不是WAV容器)
• 声道:单声道(【双声道音频会导致ASR完全无响应】)
• 采样率:16000 Hz(不是44100、48000或8000)
• 位深:int16(即每个采样点占2字节)
• 字节序:小端序(Little-Endian)
如果你用Web Audio API采集麦克风,需手动将Float32Array重采样为int16并翻转字节序;若用FFmpeg转换本地录音,命令必须是:ffmpeg -i input.mp3 -ar 16000 -ac 1 -f s16le -acodec pcm_s16le output.pcm。
建立WebSocket连接并发送StartSession
第一步:向/api/v1/ai/speech-recognition发起WebSocket连接,携带认证头Authorization: Bearer {ARK_ACCESS_TOKEN}和X-App-ID: {ARK_APP_ID}。
第二步:连接成功后,立即发送StartSession事件(Event ID 100),JSON体中必须包含:
{"audio_config": {"sample_rate": 16000, "channels": 1, "format": "pcm", "bit_depth": 16}, "model": "doubao-asr-v2"}
注意:【audio_config字段不可省略,且键名大小写敏感,写成sampleRate或SampleRate都会触发400】。服务端收到后返回Session ID,后续所有TaskRequest都需带上它。
分块推送音频流
第一步:将PCM文件按每20ms切片(即每次发送320字节:16000 Hz × 1通道 × 2字节 × 0.02秒)。
第二步:对每个切片构造TaskRequest事件(Event ID 200),二进制帧结构为:4字节事件ID(小端序)+ 4字节payload长度(小端序)+ JSON头部(含session_id)+ 原始PCM数据。
第三步:连续发送,间隔不超过100ms——超时会触发server_vad自动结束检测,导致ASRResponse丢失中间结果。
这一步操作起来很简单,直接把文件拖进去就行,但务必确保每个帧的PCM数据紧贴JSON头部之后,中间不能插入任何空字节或分隔符。



















