如何在现有OpenAI对话代码中集成文本转语音与语音转文本功能?
给OpenAI对话代码集成语音交互功能
要给你的单次对话代码加上语音输入输出功能,用几个轻量的Python库就能搞定,不用依赖外部付费API,步骤如下:
1. 安装必要依赖
先把需要的库装上:
# 基础语音处理库 pip install pyttsx3 speechrecognition # Windows用户如果安装pyaudio失败,先装pipwin再安装 pip install pipwin pipwin install pyaudio # macOS/Linux直接装pyaudio pip install pyaudio
2. 实现文本转语音(TTS)功能
用pyttsx3库,本地就能生成语音,不需要联网。写个简单的朗读函数:
import pyttsx3 def speak_text(text): # 初始化语音引擎 engine = pyttsx3.init() # 调整语速(默认200,范围0-300) engine.setProperty('rate', 180) # 可选:切换语音音色(部分系统有多个语音可选) # voices = engine.getProperty('voices') # engine.setProperty('voice', voices[0].id) engine.say(text) engine.runAndWait()
3. 实现语音转文本(STT)功能
用speech_recognition库调用麦克风,通过Google免费语音识别转文本:
import speech_recognition as sr def listen_speech(): recognizer = sr.Recognizer() # 用麦克风作为输入源 with sr.Microphone() as source: print("请说话...") # 降噪处理,提升识别准确率 recognizer.adjust_for_ambient_noise(source) audio = recognizer.listen(source) try: # 中文识别,英文识别改'en-US' text = recognizer.recognize_google(audio, language='zh-CN') print(f"你说的是:{text}") return text except sr.UnknownValueError: print("没听清,请再说一遍") return listen_speech() except sr.RequestError: print("语音识别服务不可用,请检查网络") return None
4. 整合到OpenAI对话代码
把上面的功能和原代码结合,改成循环对话模式,支持语音输入、语音播报AI回复:
import os import openai import pyttsx3 import speech_recognition as sr # 替换成你的OpenAI API密钥 openai.api_key = '你的API密钥' # 文本转语音函数 def speak_text(text): engine = pyttsx3.init() engine.setProperty('rate', 180) engine.say(text) engine.runAndWait() # 语音转文本函数 def listen_speech(): recognizer = sr.Recognizer() with sr.Microphone() as source: print("\n请说话...") recognizer.adjust_for_ambient_noise(source) audio = recognizer.listen(source) try: text = recognizer.recognize_google(audio, language='zh-CN') print(f"你:{text}") return text except sr.UnknownValueError: print("没听清,请再说一遍") return listen_speech() except sr.RequestError: print("语音识别服务异常,请检查网络") return None # 对话主循环 def chat_with_ai(): # 初始化对话历史 conversation_history = """The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly. Human: Hello, who are you? AI: I am an AI created by OpenAI. How can I help you today? """ while True: # 获取用户语音输入 user_input = listen_speech() if not user_input: continue # 触发退出关键词,结束对话 if user_input.lower() in ["退出", "拜拜", "再见"]: print("AI: 再见!") speak_text("再见!") break # 更新对话历史 conversation_history += f"\nHuman: {user_input}" # 调用OpenAI API生成回复 response = openai.Completion.create( model="text-davinci-002", prompt=conversation_history, temperature=0.9, max_tokens=150, top_p=1, frequency_penalty=0, presence_penalty=0.6, stop=[" Human:", " AI:"] ) # 提取并处理AI回复 ai_response = response.choices[0].text.strip() print(f"AI: {ai_response}") # 播报AI回复 speak_text(ai_response) # 更新对话历史,维持上下文 conversation_history += f"\nAI: {ai_response}" if __name__ == "__main__": chat_with_ai()
补充说明
- 语音识别需要联网(依赖Google免费服务),如果要离线识别,可以考虑CMU Sphinx,但准确率会明显降低。
- 可以根据需求调整
pyttsx3的语速、语音音色参数。 - 记得替换代码中的
你的API密钥为实际的OpenAI密钥。
内容的提问来源于stack exchange,提问作者JonsStuff
相关产品推荐
相关产品推荐

