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

Node.js发送音频文件至koboldcpp报错求助:WAV读取失败

解决koboldcpp接收WAV文件报错的问题

问题根源

你的代码错误地将音频流包裹在对象中传递给axios,导致koboldcpp接收到的不是原始WAV文件内容,而是序列化后的JSON数据,因此Whisper无法解析。

修复方案

方案1:使用FormData(推荐,符合OpenAI兼容接口规范)

koboldcpp的/v1/audio/transcriptions接口遵循OpenAI的API规范,需要通过multipart/form-data格式上传文件。

首先安装依赖:

npm install form-data

修改后的代码:

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

var upload_wave_to_kobolcpp = function(){
    return new Promise(async(resolve, reject) => {        
        try {
            const audioFilePath = './public/audio.wav';
            const formData = new FormData();
            // 添加音频文件到表单,字段名必须为`file`
            formData.append('file', fs.createReadStream(audioFilePath), {
                filename: 'audio.wav',
                contentType: 'audio/wav'
            });
            // 指定模型(koboldcpp兼容whisper-1参数)
            formData.append('model', 'whisper-1');

            dd.d('audio read success');
            const response = await axios.post("http://127.0.0.1:5001/v1/audio/transcriptions", 
                formData, 
                {
                    headers: {
                        // 自动生成正确的请求头,包含boundary
                        ...formData.getHeaders()
                    },
            });
            dd.d('audio send success');
            console.log(response.data);
            resolve(response.data);
          } catch (error) {
            console.error('Error:', error);
            reject(error);
          }
    });
}

方案2:直接传递音频流

如果不想使用FormData,也可以直接将ReadStream作为请求体传递,但需确保Content-Type正确:

var upload_wave_to_kobolcpp = function(){
    return new Promise(async(resolve, reject) => {        
        try {
            const audioFilePath = './public/audio.wav';
            const audioStream = fs.createReadStream(audioFilePath);

            dd.d('audio read success');
            const response = await axios.post("http://127.0.0.1:5001/v1/audio/transcriptions", 
                audioStream, 
                {
                    headers: {
                        'Content-Type': 'audio/wav',
                    },
            });
            dd.d('audio send success');
            console.log(response.data);
            resolve(response.data);
          } catch (error) {
            console.error('Error:', error);
            reject(error);
          }
    });
}

关键说明

  • 不要将音频流包裹在对象中传递,否则axios会自动序列化为JSON,导致接口无法识别
  • FormData方式更稳妥,适配大多数兼容OpenAI接口的服务,且能自动处理请求头和文件边界
  • 无需手动设置Content-Length,axios会自动计算

内容的提问来源于stack exchange,提问作者Fenix Lam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:49:57