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

如何在现有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:48:22