译者 | 朱先忠
审校 | 重楼
简介
本文旨在指导您创建一个简单而强大的语音助手,以满足您的喜好。我们将使用两个强大的工具——Whisper和GPT来实现这一点。你可能已经知道GPT及其功能,但你知道Whisper是什么吗?
其实,Whisper是OpenAI公司开发的一种高级语音识别模型,可提供准确的音频到文本转录。
我们将带您完成示例工程构建的每一步,包括编码说明。最后,您将拥有一款可启动并正常运行的语音助手。
准备工作
打开AI API密钥
如果你已经有了OpenAI API密钥,你可以跳过这一节。
Whisper和GPT API都需要访问OpenAI API密钥。与ChatGPT的订阅需要支持固定费用不同,API密钥是根据您使用服务的数量进行支付的。
价格还算是比较合理的。在撰写本文时,Whisper的价格为0.006美元/分钟,GPT(模型为GPT-3.5-turbo)的价格为0.002/1K代币(代币约为0.75个单词)。
OpenAI的网站(作者自己的图片)
要获取密钥,请首先在OpenAI网站上创建一个帐户。登录后,单击右上角的姓名并选择查看API密钥。单击按钮“创建新密钥(Create new secret key)”后,将显示您的密钥。请确保保存此密钥,因为您将无法再次看到它。
示例工程依赖的第三方库
本小节介绍项目所需的开源代码库。本文示例项目包括使用OpenAI开发的Python库执行各种AI任务,以及使用pyttsx3生成语音,使用SoundDevice录制和播放音频,使用numpy和scipy进行数学运算等。和往常一样,在启动新项目时,您应该在安装包之前创建一个新的虚拟环境。
示例工程代码结构
我们的代码将围绕一个类构建,总共占用大约90行代码。在此,假设您对Python类语法知识已经有了基本的理解。整个类结构如下:
其中,Listen方法负责捕获用户的语音输入,并使用Whisper将其转换为文本。Think方法负责将文本发送到GPT,然后由GPT生成自然语言响应。speak方法负责将响应文本转换为可播放的音频。
注意:上图中最右边代表系统中的GPT助理部分(负责给出自然语言响应)。
下面这个过程是可以重复执行的,即用户可以通过发出另一个请求在对话中进行交互。
示例类对应的代码结构(作者自己的图片)
__init__函数
此函数负责初始化历史记录和设置API密钥。
我们需要一个历史记录来跟踪以前的消息。这基本上对应于我们助理的短期记忆,可以让它记住你在谈话中早些时候说的话。
listen函数
listen函数工作流程
这个方法相当于我们助理的耳朵功能。
listen函数允许接收来自用户的输入。此函数负责记录麦克风中的音频并将其转录为文本。
listen函数的具体作用如下:
- 录制音频时打印出“Listening…”信息。
- 使用声音设备以44100 Hz的采样率录制3秒的音频(或您想要的任何持续时间)。
- 将录制的音频保存为临时WAV文件中的NumPy数组。
- 使用OpenAI API的转录方法将音频发送给Whisper,由Whisper将其转录。
- 将转录后的文本打印到控制台,以确认转录成功。
- 以字符串形式返回转录后的文本。
在本例中,助理的监听时长为3秒钟,但您可以根据需要更改时间。
think函数
think函数工作流程
其实,我们系统中助理的大脑是由GPT驱动的。think函数负责接收助理听到的内容,并详细阐述回应内容。
值得注意的是,响应内容不是在您的本地计算机上创建的。文本需要发送到OpenAI的服务器,以便通过API进行处理。然后,响应内容被保存在响应变量中,用户消息和响应都被添加到历史记录中,即助手的短期记忆,负责为GPT模型提供上下文以生成响应。
speak函数
speak函数工作流程
speak函数负责将文本转换为语音,并将其回放给用户。此函数只接受一个参数:text。此参数应该是一个字符串,表示要转换为语音的文本。
当用文本字符串作为参数调用函数时,它会用命令engine=pyttsx3.init()初始化pyttsx3语音引擎。这个对象是引擎用来将文本转换为语音的主要接口。
然后,该函数指示语音引擎使用命令引擎将提供的文本转换为语音。这会将提供的要speak(由引擎读出)的文本排队。命令engine.runAndWait则负责告诉引擎处理排队的命令。
值得注意的是,Pyttsx3是在本地处理所有文本到语音的转换,这在系统的延迟方面是一个显著的优势。
最后的润色
到此,系统中助理部分已经准备好了。接下来,我们只需要创建一个辅助对象,然后开始对话。
对话是一个无限循环,当用户说出包含“Goodbye(再见)”的句子时,对话就结束了。
个性化体验技巧
总体来看,自定义GPT助手是轻而易举的事情!我们构建的代码是极具模块化的,它允许您通过添加各种功能进行自定义。以下是一些帮助您进行定制的参考想法:
- 给助理一个角色:改变最初的提示,让你的助理扮演你的英语老师、励志演说家或你能想到的任何其他角色!这方面定制,请查看Awesome ChatGPT Prompts了解更多想法。
- 更改语言:想使用另一种语言吗?没问题!只需将代码中的英语更改为您想要的语言即可。
- 构建应用程序:您可以轻松地将助手集成到任何应用程序中。
- 添加个性:通过添加自定义回复或使用不同的语调和语言风格,让你的助手拥有独特的个性。
- 与其他API集成:将您的助手与其他API进行集成,以提供更高级的功能,如天气预报或新闻更新等。
结论
在本文中,我们解释了如何检索OpenAI API密钥,并提供了用于捕获用户输入、生成响应以及将文本转换为语音以进行播放的listen、think和speak等函数的代码示例。
有了这些知识,您可以开始创建一款适合您自己特定需求的独特语音助手。总之,存在无限的可能性:从创建一个个人助理来帮助完成日常任务,到构建一个语音控制的自动化系统……有关本文示例的所有代码,您可以访问链接的GitHub存储库。
译者介绍
朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。
原文标题:Creating Your Personalized Voice Assistant with GPT and Whisper,作者:Donato Riccio