You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nodejs调用OpenAI语音转写接口结果异常求助

解决Node.js调用OpenAI语音转写接口转写结果异常的问题

可能的问题及解决方案

1. 文件流读取不完整

你当前用data.file.read()同步读取文件内容,但Fastify Multipart返回的file是可读流,同步read()可能无法获取完整的音频数据(尤其是大文件)。直接传递流对象给FormData即可:

const formData = new FormData()
formData.append('model', this._config.audioModel)
formData.append('language', input.language)
// 直接传递file流,而非read()的结果,同时补充MIME类型帮助OpenAI识别格式
formData.append('file', data.file, {
  filename: data.filename,
  contentType: data.mimetype
})

2. Axios请求限制导致数据截断

音频文件可能超出Axios默认的请求体大小限制,导致数据被截断。在请求配置中取消大小限制:

const result = await axios.post('https://api.openai.com/v1/audio/transcriptions', formData, {
  headers: {
    Authorization: `Bearer ${this._config.apiKey}`,
    ...formData.getHeaders()
  },
  maxContentLength: Infinity,
  maxBodyLength: Infinity // 取消请求体大小限制
})

3. 错误日志不详细,无法定位问题

当前错误日志仅打印error对象,无法获取OpenAI返回的具体错误信息。修改catch块打印详细错误:

catch (error) {
  console.error('OpenAI转写错误:', {
    status: error.response?.status,
    message: error.response?.data?.error?.message,
    details: error.response?.data?.error?.details
  })
}

4. Fastify接收文件的配置问题

确保Fastify正确配置了multipart解析,没有限制文件大小或错误截断文件。在Nestjs的启动文件中添加:

// main.ts
import { NestFactory } from '@nestjs/core';
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
import fastifyMultipart from '@fastify/multipart';

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter()
  );
  await app.register(fastifyMultipart, {
    limits: {
      fileSize: 100 * 1024 * 1024 // 设置合适的文件大小限制,比如100MB
    }
  });
  await app.listen(3000);
}
bootstrap();

完整的正确实现示例

// Nestjs Service中的转写方法
async transcribeAudio(input: { language: string }, data: { file: NodeJS.ReadableStream; filename: string; mimetype: string }) {
  const formData = new FormData();
  formData.append('model', this._config.audioModel);
  formData.append('language', input.language);
  formData.append('file', data.file, {
    filename: data.filename,
    contentType: data.mimetype
  });

  try {
    const result = await axios.post('https://api.openai.com/v1/audio/transcriptions', formData, {
      headers: {
        Authorization: `Bearer ${this._config.apiKey}`,
        ...formData.getHeaders()
      },
      maxContentLength: Infinity,
      maxBodyLength: Infinity
    });
    return result.data;
  } catch (error) {
    console.error('转写请求失败:', {
      status: error.response?.status,
      message: error.response?.data?.error?.message,
      details: error.response?.data?.error?.details
    });
    throw new Error('音频转写失败');
  }
}

内容的提问来源于stack exchange,提问作者Thai Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:12:33