连接chatgpt的桌面语音助手

news2025/3/24 18:10:51

要创建一个连接到 ChatGPT 的桌面语音助手,可以使用 Python 编写一个程序来实现语音识别、与 ChatGPT API 交互以及语音合成的功能。以下是一个完整的解决方案和技术实现步骤:


所需工具和库

  1. 语音识别

    • 使用 speech_recognition 库捕获用户的语音输入。
    • 需要麦克风支持。
  2. ChatGPT API

    • 使用 OpenAI 提供的 API(如 GPT-3.5 或 GPT-4)处理用户的问题并生成响应。
    • 需要一个 OpenAI 账号和 API 密钥。
  3. 语音合成(TTS, Text-to-Speech)

    • 使用 pyttsx3gTTS(Google Text-to-Speech)将 ChatGPT 的文本响应转换为语音输出。
  4. 其他依赖

    • openai:用于调用 OpenAI API。
    • pyaudio:支持语音识别。
    • playsoundsimpleaudio:播放语音合成后的音频文件(如果需要)。

实现步骤

1. 安装必要的库

在终端中运行以下命令安装所需的 Python 库:

pip install speechrecognition pyttsx3 openai playsound pyaudio

注意pyaudio 可能需要额外的系统依赖项。如果安装失败,请参考 PyAudio 安装指南。


2. 编写代码

以下是一个完整的示例代码:

import speech_recognition as sr
import pyttsx3
import openai
import os

# 初始化语音引擎
engine = pyttsx3.init()

# 设置 OpenAI API 密钥
openai.api_key = "YOUR_OPENAI_API_KEY"

# 配置语音参数
engine.setProperty('rate', 150)  # 设置语速
engine.setProperty('volume', 1.0)  # 设置音量

# 语音识别函数
def recognize_speech():
    recognizer = sr.Recognizer()
    with sr.Microphone() as source:
        print("请说话...")
        recognizer.adjust_for_ambient_noise(source)  # 减少环境噪音的影响
        audio = recognizer.listen(source)
        try:
            text = recognizer.recognize_google(audio, language="zh-CN")  # 使用 Google 的语音识别服务
            print(f"你说的是: {text}")
            return text
        except sr.UnknownValueError:
            print("无法识别语音")
            return ""
        except sr.RequestError as e:
            print(f"语音识别服务出错: {e}")
            return ""

# 调用 ChatGPT API 获取响应
def get_chatgpt_response(prompt):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",  # 使用 GPT-3.5 模型
        messages=[
            {"role": "system", "content": "你是一个智能助手,能够回答用户的问题。"},
            {"role": "user", "content": prompt}
        ]
    )
    return response.choices[0].message.content

# 语音合成函数
def speak(text):
    print(f"助手回答: {text}")
    engine.say(text)
    engine.runAndWait()

# 主程序
def main():
    while True:
        # 语音输入
        user_input = recognize_speech()
        if not user_input:
            continue

        # 如果用户说“退出”或“停止”,结束程序
        if "退出" in user_input or "停止" in user_input:
            speak("好的,再见!")
            break

        # 调用 ChatGPT 获取响应
        response = get_chatgpt_response(user_input)

        # 语音输出
        speak(response)

if __name__ == "__main__":
    main()

代码解析

  1. 语音识别

    • 使用 speech_recognition 库捕获用户的语音输入。
    • 通过 recognize_google 方法将语音转换为文本。
  2. 调用 ChatGPT API

    • 使用 OpenAI 的 ChatCompletion API 发送用户输入,并获取 ChatGPT 的响应。
    • messages 参数中,定义了系统角色(system)和用户角色(user),以模拟对话。
  3. 语音合成

    • 使用 pyttsx3 将 ChatGPT 的文本响应合成为语音。
    • engine.say() 用于生成语音,engine.runAndWait() 用于播放语音。
  4. 主循环

    • 程序持续监听用户的语音输入,直到用户说出“退出”或“停止”。

运行程序

  1. 设置 OpenAI API 密钥
    替换代码中的 YOUR_OPENAI_API_KEY 为你自己的 OpenAI API 密钥。可以从 OpenAI 官网 获取。

  2. 运行代码
    在终端中运行以下命令启动程序:

    python your_script_name.py
    
  3. 测试功能

    • 对着麦克风说话,程序会将你的语音转换为文本。
    • ChatGPT 处理文本后返回响应,程序将其合成为语音并播放。

优化建议

  1. 多语言支持

    • 修改 recognize_googlelanguage 参数,支持其他语言(如英语、法语等)。
  2. 离线语音合成

    • 如果不想依赖在线服务,可以使用离线 TTS 引擎(如 espeakFestival)。
  3. 改进用户体验

    • 添加唤醒词(如“嘿,助手”)以避免误触发。
    • 使用更高级的语音合成引擎(如 gTTSAzure Speech Service)提高语音质量。
  4. 错误处理

    • 增强对网络问题、API 调用失败等情况的处理。

总结

通过上述代码,你可以创建一个简单的桌面语音助手,结合语音识别、ChatGPT 和语音合成技术,实现与用户的自然语言交互。这个项目不仅可以作为学习 AI 和语音技术的实践,还可以扩展为更复杂的应用,例如智能家居控制、教育助手等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例9,TableView15_09带排序的导出表格示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

spring boot 登入权限RBAC模式

首先准备好5张表 user_info表,用户的信息表 role表,角色表(比如超级管理员、管理员、审核员、采购......) 创建user_role表,user_info表,role表的中间表 注意了,role_id和user_id是 u…

调用API拿到的值——存储方式

1.响应结果示例: "purposeTagList":["稳中向好及进中提质"] 2.数据库中定义的 3.值的获取: F1 JsonNode purposeTagListNode dataNode.path("purposeTagList");if (purposeTagListNode.isArray()) {StringBuilder purp…

第一讲 | 解锁C++编程能力:基础语法解析

C入门基础 一、C的第一个程序二、命名空间三、C输入&输出四、缺省参数/默认参数五、函数重载六、引用1.引用的特性2.引用的使用引用做返回值场景 3.const引用只有指针和引用涉及权限放大、缩小的问题,普通变量没有 4.指针和引用的关系 七、inline八、nullptr 一…

C++ --- 多态

1 多态的概念 多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运⾏时多 态(动态多态),这⾥我们重点讲运⾏时多态,编译时多态(静态多态)和运⾏时多态(动态多态)。编译时 多态(静态多态)主要就是我…

HAL库中使用空闲中断+DMA接收数据,接收失败的问题

问题: 串口屏与单片机通过串口(USART1)进行通信,调试时发现问题,现象如下: 手动页面的几个文本,输入的数字不会显示出来,比如初始值为0,输入200,200会一闪而…

使用pycel将Excel移植到Python

1.适用需求 有些工作可能长期适用excel来进行公式计算,当需要把工作流程转换为可视化界面时,开发人员不懂专业逻辑,手动摸索公式很大可能出错,而且费时费力 2.可用工具及缺点 pandas 方便进行数据处理,支持各种格…

学习应用层

应用层概述 客户/服务器方式(C/S)和对等方式(P2P) 动态主机配置协议DHCP 客户/服务器方式 DHCP报文会被封装成为UDP用户数据报,DHCP服务器端口号是UDP67,用户是UDP68。 广播发送,是因为并不知道…

C/C++转换为字符串宏和字符串拼接宏的综合使用

本文内容参考: C/C++ 宏拼接和宏展开为字符串 - DoubleLi - 博客园 特此致谢! 1. 转换为字符串宏与字符串拼接宏 (1)转换为字符串宏 转换为字符串的宏为: #define STR(x) #x //转字符串 (2)字符串拼接宏 字符串拼接的宏为: #define CONCAT(x,y) x##y //拼接 2…

掌握新编程语言的秘诀:利用 AI 快速上手 Python、Go、Java 和 Rust

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

个人常用的chrome好用插件

chrome可以说是兼容性和实用性较高的浏览器 没有复杂的ui 沉重的广告 加上各种各样的浏览器插件 现在罗列一下个人常用的几款好用的插件 1. Adblock Plus 一款免费的广告拦截器,可以拦截大部分网站上的广告推荐,还你一个干净舒服的页面 以下为b站演示…

数据库设计-笔记2

1.介绍一下MySQL 历史与发展 MySQL 最初由瑞典的 MySQL AB 公司开发,于 1995 年正式发布。2008 年,MySQL AB 公司被 Sun Microsystems 收购,之后 Sun 又被甲骨文(Oracle)公司收购,MySQL 成为 Oracle 旗下…

损失函数理解(二)——交叉熵损失

损失函数的目的是为了定量描述不同模型(例如神经网络模型和人脑模型)的差异。 交叉熵,顾名思义,与熵有关,先把模型换成熵这么一个数值,然后用这个数值比较不同模型之间的差异。 为什么要做这一步转换&…

基于随机森林回归预测葡萄酒质量

基于随机森林回归预测葡萄酒质量 1.作者介绍2.随机森林算法与数据集介绍2.1定义2.2核心思想2.3主要步骤2.4数据集介绍 3.算法实现3.1数据加载与探索3.2数据可视化3.3数据预处理(标准化、划分训练/测试集)3.4模型训练与优化(随机森林回归 超参…

【Qt】QWidget属性2

🏠个人主页:Yui_ 🍑操作环境:Qt Creator 🚀所属专栏:Qt 文章目录 1. windowOpacity属性2. cursor属性2.1 自定义光标 3. font属性4.tooltip属性5. focusPolicy属性6. 总结 由于QWidget的常见属性实在太多&a…

OpenGL ES ->乒乓缓冲,计算只用两个帧缓冲对象(Frame Buffer Object)+叠加多个滤镜作用后的Bitmap

乒乓缓冲核心思想 不使用乒乓缓冲,如果要每个滤镜作用下的绘制内容,也就是这个滤镜作用下的帧缓冲,需要创建一个Frame Buffer Object加上对应的Frame Buffer Object Texture使用乒乓缓冲,只用两个Frame Buffer Object加上对应的F…

数据库练习2

目录 1.向heros表中新增一列信息,添加一些约束,并尝试查询一些信息 2.课堂代码练习 3.题目如下 一、单表查询 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4…

macOS Sequoia 15.3 一直弹出“xx正在访问你的屏幕”

🙅 问题描述 macOS 系统升级后(15.2或者15.3均出现过此问题),不管是截图还是开腾讯会议,只要跟捕捉屏幕有关,都一直弹出这个选项,而且所有软件我都允许访问屏幕了,这个不是询问是否…

C# 调用 VITS,推理模型 将文字转wav音频调试 -数字人分支

Microsoft.ML.OnnxRuntime.OnnxRuntimeException: [ErrorCode:InvalidArgument] Input name: input_name is not in the metadata在 Microsoft.ML.OnnxRuntime.InferenceSession.LookupInputMetadata(String nodeName) 位置 D:\a\_work\1\s\csharp\src\Microsoft.ML.OnnxRuntim…

【Docker系列一】Docker 简介

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…