const FormData = require('form-data');

    const data = new FormData();

    console.log('buffer: ', buffer);
    console.log('typeof buffer: ', typeof buffer);

    const filename = new Date().getTime().toString() + '.webm';
    data.append('model', 'whisper-1');
    data.append('file', bufferToStream(buffer));
    
    console.log('data: ', data);

    let config = {
        method: "post",
        maxBodyLength: Infinity,
        url: "https://api.openai.com/v1/audio/transcriptions",
        headers: {
        Authorization:
            `Bearer ${process.env.OPENAI_API_KEY}`,
            "Content-Type": "multipart/form-data",
            ...data.getHeaders(),
        },
        data: data,
    };

    await axios.request(config)

我正在try 将文件发布到OpenAI以获取转录.但我经常收到400个错误请求.

我使用的是JavaScript(不是TypeScrip),所以我不能使用FormData包,至少我试过了,它对我没有帮助.

Error: Data after transformation must be a string, an Array Buffer, a Buffer, or a Stream

我试用了Postman,它很有效,它为我提供了以下代码片段:

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('model', 'whisper-1');
data.append('file', fs.createReadStream('/Users/UserName/Downloads/session-1708252969167.webm'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://api.openai.com/v1/audio/transcriptions',
  headers: { 
    'Authorization': {{OPENAI_API_KEY}}, 
    'Cookie': '__cf_bm=5L5OJyh1Yd28yUT9Uv0TT9F5POhL1fzeraSZF1C.9OA-1708337727-1.0-AV+XT0hftIn7mtJxICJduMQBpFcB9UQvbil6GmgI2BX7rw0BZRvuseeN0QgeuIt7KyNTxGJs/xcWIKMpkQdvzC4=; _cfuvid=3uLOzYX3DlLxSjGMLDqD0qcGIj.4zkEXt2czm9OiEfU-1708251423683-0.0-604800000', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

我也try 了这个代码片段,但它抛出了一个400错误.

我做错了什么?

推荐答案

此代码将起作用

另存为trans.js

const axios = require('axios');
const fs = require('fs');
const FormData = require('form-data');

// Function to make the API call
async function callOpenAI() {
  try {
    const fileStream = fs.createReadStream('audio.webm');

    const formData = new FormData();
    formData.append('file', fileStream);
    formData.append('model', 'whisper-1');

    const response = await axios.post('https://api.openai.com/v1/audio/transcriptions', formData, {
      headers: {
        'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
        ...formData.getHeaders() // Get headers manually
      }
    });

    console.log(response.data);
  } catch (error) {
    console.error('Error:', error.response.data);
  }
}

// Call the function
callOpenAI();

postman 判断API

enter image description here

enter image description here

Set environment variable for API KEY

继续狂欢吧

OPENAI_API_KEY=[your API KEY]

enter image description here

Install dependencies

npm install axios fs form-data

Run it

node trans.js

Result

enter image description here

Javascript相关问答推荐

react 路由加载程序行为

React:未调用useState变量在调试器的事件处理程序中不可用

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

硬币兑换运行超时

基于变量切换隐藏文本

函数返回与输入对象具有相同键的对象

使用Java脚本根据按下的按钮更改S文本

为什么按钮会随浮动属性一起移动?

如何从隐藏/显示中删除其中一个点击?

如何在coCos2d-x中更正此错误

未加载css colored颜色 ,无法将div设置为可见和不可见

触发异步函数后不能显示数据

将相关数据组合到两个不同的数组中

不协调嵌入图片

在Puppeteer中使用promise进行日志(log)记录时出现TargetCloseError

Plotly.js栏为x轴栏添加辅助文本

在使用JavaScript以HTML格式显示Google Drive中的图像时遇到问题

如何用react组件替换dom元素?

检测带有委托的元素内部的点击,以及元素何时按其类名被选中

try 导入material 时出现错误NG0203