无法将Whisper转录文本传递给OpenAI text-davinci生成响应的问题
问题排查:语音转文本后无法触发GPT响应
核心问题
- Gradio的
launch()是阻塞式方法,启动Web界面后会占用主线程,导致后续的GPT调用逻辑(main()函数)完全无法执行。 - 原代码将语音转写与GPT响应拆分为独立流程,全局变量
prompt_input无法在UI线程和主线程间正确同步,GPT始终读取初始空字符串。
修复后的完整代码
import openai import gradio as gr import whisper # 初始化Whisper模型 whisper_model = whisper.load_model("base") # 配置OpenAI API openai.api_key = '你的API_KEY' openai.api_base = 'https://api.openai.com' def transcribe_and_respond(audio): # 1. 语音转文本 audio = whisper.load_audio(audio) audio = whisper.pad_or_trim(audio) mel = whisper.log_mel_spectrogram(audio).to(whisper_model.device) # 检测语言 _, probs = whisper_model.detect_language(mel) print(f"Detected language: {max(probs, key=probs.get)}") # 解码音频 options = whisper.DecodingOptions() result = whisper.decode(whisper_model, mel, options) user_prompt = result.text # 2. 调用GPT生成响应 if not user_prompt: return "请输入语音内容", "" try: response = openai.Completion.create( engine='text-davinci-003', prompt=f'User: {user_prompt}\nBot: ', max_tokens=1024, n=1, stop=None, temperature=0.7 ) bot_response = response.choices[0].text.strip() except Exception as e: bot_response = f"GPT调用出错: {str(e)}" return user_prompt, bot_response # 构建Gradio界面 gr.Interface( title='语音转文本+GPT聊天', fn=transcribe_and_respond, inputs=gr.Audio(source="microphone", type="filepath"), outputs=[ gr.Textbox(label="转写文本"), gr.Textbox(label="GPT响应") ], live=True ).launch(share=True)
修改说明
- 将语音转写和GPT响应整合到同一个函数
transcribe_and_respond中,保证流程连贯。 - 移除了阻塞主线程的独立
main()循环,让所有逻辑在Gradio的交互框架内运行。 - 添加了异常捕获,方便排查GPT调用时的错误(比如API密钥无效、网络问题等)。
- 调整了Gradio的输出为两个文本框,分别展示转写结果和GPT响应,更直观。
内容的提问来源于stack exchange,提问作者Thanatosq
相关产品推荐
相关产品推荐

