openai-whisper-asr-webservice提供的asr的api其實并不兼容openai的api,所以在dify中是不能直接添加到語音轉文字的模型中,對比了下兩個api的傳參情況,其實只要改動一處,就能支持:
openai兼容的asr調用中formdata中音頻文件是file=XXX這樣的,而openai-whisper-asr-webservice提供的asr的api中formdata中音頻文件是audio_file=XXX這樣的。感覺使用openresty的lua簡單處理一下改formdata中的信息轉發到后端就可以搞定,折騰了半天沒有進展 😦 只好先用nodejs做個express服務來轉發下,效果是ok的。
const express = require("express");
const app = express();
const multer = require("multer");
const uploader = multer({ storage: multer.memoryStorage() });
const FormData = require('form-data');
const fetch = require('node-fetch');
const asrurl="http://127.0.0.1:9000/asr?output=json"app.post("/v1/audio/transcriptions", uploader.single("file"), (req, res)=> {let newForm = new FormData();newForm.append('audio_file', req.file.buffer,{ filename: req.file.originalname, contentType: req.file.mimetype });fetch(asrurl, { method: 'POST', body: newForm, headers: newForm.getHeaders() }).then(resp=>resp.json()).then(response=> res.json({"text":response.text}) ).catch(error=>{ res.status(500).send(error.message); });
});var server=app.listen(9100,()=>{ console.log("openai whisper 進程啟動 "); });
這樣可以在dify中添加openai兼容模型,選擇speech2text模型,模型名稱隨便填,API endpoint URL
填 http://ip:9100/v1
又更新了下代碼:采用內存存儲上傳文件,減少寫入磁盤文件和讀取磁盤文件環節