OpenAI text-davinci-002无输出问题排查求助
问题排查与修复方案
核心问题分析
你的代码存在几个关键问题导致无输出:
- 语音识别失败无提示且静默跳过:
except:块直接执行continue,如果语音未被Google识别,程序会直接回到监听循环,根本没触发OpenAI调用逻辑,你误以为是模型无输出。 - 回复内容处理逻辑错误:
response_str.split("Ava: ", 1)[0]会清空模型返回的有效内容——模型返回的是Ava:之后的回复内容,这一步分割会取到分割符前的空字符串,最终导致response_str为空。 - 缺少API调用异常处理:如果OpenAI请求出错(如网络波动、参数问题),程序会直接终止或无提示,无法定位问题。
修复后的代码
import openai import pyttsx3 import speech_recognition as sr from api_key import API_KEY openai.api_key = API_KEY engine = pyttsx3.init() r = sr.Recognizer() mic = sr.Microphone(device_index=1) print("可用麦克风列表:", sr.Microphone.list_microphone_names()) conversation = "" user_name = "Josode" bot_name = "Ava" while True: with mic as source: print("\nlistening... speak clearly into mic.") r.adjust_for_ambient_noise(source, duration=0.2) audio = r.listen(source) print("no longer listening.\n") try: user_input = r.recognize_google(audio) print(f"{user_name}: {user_input}") except sr.UnknownValueError: print("无法识别语音,请重新说话") continue except sr.RequestError as e: print(f"语音识别服务请求失败: {e}") continue prompt = f"{user_name}: {user_input}\n{bot_name}:" conversation += prompt try: response = openai.Completion.create( engine="text-davinci-002", prompt=conversation, max_tokens=100, temperature=0.7, stop=[f"\n{user_name}:"] ) response_str = response["choices"][0]["text"].strip() print(f"{bot_name}: {response_str}") conversation += f"{response_str}\n" engine.say(response_str) engine.runAndWait() except Exception as e: print(f"OpenAI API调用出错: {e}") continue
关键修复点说明
- 细化语音识别异常处理:区分无法识别语音、服务请求失败两种异常,给出明确提示,避免静默跳过。
- 修正回复内容处理:直接提取模型返回的文本并去除首尾空白,删除错误的分割操作,保留完整回复。
- 添加API异常捕获:捕获OpenAI调用中的所有异常并打印错误信息,方便排查问题。
- 优化模型参数:添加
temperature控制回复随机性,添加stop参数让模型在生成完Ava的回复后自动停止,避免生成无关内容。 - 增加调试输出:打印识别到的用户输入,确认语音识别环节是否正常。
额外排查建议
- 先测试语音识别功能:确认
user_input能正确打印你说的内容,排除语音输入环节的问题。 - 单独测试OpenAI调用:暂时注释语音相关逻辑,手动输入
user_input验证模型是否返回内容。
内容的提问来源于stack exchange,提问作者DZR
相关产品推荐
相关产品推荐

