ChatAudio 通过TTS + STT + GPT 实现语音对话(低仿微信聊天)

de9442a866ef46a5460bfed079cdf577.png

效果图

什么是 STT 和 TTS?

  • STT 是语音转文字(Speech To Text)

  • TTS 是文字转语音(Text To Speech)

为什么要使用 SST + TTS 如果用户直接输入音频,OpenAIAPI 中并没有直接使用语音和 GPT 进行对话的功能。

所需依赖

  • express

  • express-fileupload

  • openai

  • websocket

  • nodemon

  • dotenv

实现语音转文字(STT)

前面说到了,OpenAI 中不存在这种 API,但是提供了一个 Whisper 机器人,支持将音频流转化为文本,也就是 STT

648849aa03121ddf06918beb400fb692.png

实现如下返回的 text 就是识别的语音内容

const {data: { text: prompt },
} = await openai.createTranscription(fs.createReadStream(fileName),"whisper-1"
);

实现文字转语音(TTS)

OpenAI 目前只提供了 STT,如果需要返回给用户一个音频的话。就需要用到国内的 科大讯飞 每天有 5.05w 次免费的 TTS[1]

f3f36b65dc79bd7d98b99ac8da9294a7.png

如果你有国外信用卡,可以考虑使用微软推出 Azure,很多电报机器人就是用的它来开发的,免费使用 12个月。

714d876135d09564ed6c3960dae0483f.png

所以在这里还是使用科大讯飞的 TTS

文字生成音频文件

音频没有直接返回流,而是直接生成一个音频返回文件路径给前端播放。

回复音频存放在 chat-audio/client/audio 中

先在 讯飞TTS[2] 中获取需要的 keys

c8a9db9639e1c8300a1517559bcf4030.png
const tts = promisify(require("./utils/tts"));
// 环境变量
require("dotenv").config();
// 生成音频
const generateAudio = (text) => {return new Promise((resolve, reject) => {const auth = {app_id: process.env.TTS_APP_ID,app_skey: process.env.TTS_API_SECRET,app_akey: process.env.TTS_API_KEY};// 讯飞 api 参数配置const business = {aue: "lame",sfl: 1,speed: 50,pitch: 50,volume: 100,bgs: 0,};const id = new Date().getTime()// 存储文件的路径const file = path.resolve(__dirname, `client/audio/${id}.m4a`);try {// 执行请求tts(auth, business, text, file).then((res) => {// 返回静态文件地址resolve(`audio/${id}.m4a`)});} catch (e) {reject(e)}})
};

封装好的讯飞的语音包 TTS,放在 ChatAudio 仓库[3] 里面。这里就不展示出来了

调用 STT & TTS

音频对话接口

通过 api/audio,让客户端调用此方法

app.use(fileUpload());
app.post("api/audio", async (req, res) => {// 没有上传音频抛出异常if (!req.files) return res.status(400).send({ message: "缺少参数", error: true });const file = req.files.file;// 存放用户上传的文件const fileName = "audio.m4a";file.mv(fileName, async (err) => {if (err) {return res.status(500).send(err);}// 使用ChatGPT 的 STT 机器人(Whisper)const {data: { text: prompt },} = await openai.createTranscription(fs.createReadStream(fileName),"whisper-1");console.log("解析的音频内容是>>>", prompt);// 判断用户上传音频是否存在内容if (!prompt.trim().length)return res.send({ message: "未识别到语音内容", error: true });// 将转用户提问的文本内容,去调用 ChatGPT 的回复const chatReply = await handleIssueReply(prompt);// 将 ChatGPT 的回复通过 TTS 转化为语音const content = await generateAudio(chatReply);console.log("生成的音频是>>>", content);res.send([{ type: "system", content, chatReply, infoType: "audio", playStatus: false },]);});
});

ChatGPT 回复问题能力

不管是 TTSSTT还是TTT,最核心对话功能还是通过 ChatGPT实现的。

503eaa092fef714a71b12c415d13b1d0.png

ChatGPT 配置就不细说了,配置一个 KEY 然后封装一个回复问题的方法

获取 ChatGPT KEY [4]

const { Configuration, OpenAIApi } = require("openai");
// openai 配置
const configuration = new Configuration({apiKey: process.env.OPENAI_API_KEY,
});
// 创建 openai 实例
const openai = new OpenAIApi(configuration);const handleIssueReply = async (prompt) => {const {data: { choices },} = await openai.createCompletion({model: "text-davinci-003",prompt,temperature: 0.5,max_tokens: 1000,top_p: 1.0,frequency_penalty: 0.0,presence_penalty: 0.0,});const chat = choices[0].text?.trim();console.log("生成的文本内容是>>>", chat);return chat;
};

实现效果如下,没有录屏可以自行感受下。

补充功能 Text To Text

前面做的语音对话,只是为了让你不再孤单寂寞,但是在日常开发工作中基本上不会使用到语音对话,所以单独做了个可以直接使用的文字聊天功能。

所以新开了一个接口直接调用 ChatGPT 的回复。

app.get("/api/issue", async (req, res) => {// 从 query 中取出用户提出的问题const { issue } = req.query;if (!issue.trim()) return res.status(400).send({ message: "缺少参数", error: true });const chatReply = await handleIssueReply(issue);return res.send([{ type: "system", content: chatReply }]);
});

前端实现

前端没什么太多需要注意的,列一下依赖吧,均采用的 CDN

  • Vue

  • Elment UI

代码在 chat-audio/client/index.html 这里

使用 ChatAudio

克隆

git clone git@github.com:CrazyMrYan/chat-audio.git

配置 Key

在 ENV 文件中配置 科大讯飞OpenAIkey

安装启动

yarn installyarn start

使用

浏览器打开 localhost:3000

就可以看到聊天界面了

tips:

开下 ke xue shang wang

最好是 🇺🇸 节点

参考资料

[1]

TTS: https://console.xfyun.cn/services/tts

[2]

讯飞TTS: https://console.xfyun.cn/services/tts

[3]

ChatAudio 仓库: https://github.com/CrazyMrYan/chat-audio

[4]

获取 ChatGPT KEY : https://platform.openai.com/account/api-keys

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QQ 群聊美少女语音AI(ChatGPT版)

QQ 群聊美少女语音AI ✨ 基于 go-cqhttp 以及 VITS-fast-fine-tuning revChatGPT 实现 ✨ Combination of ChatGPT and VITs anime girl AI voice and used in QQ robot 介绍 ChatGPT 和 VITS 二次元美少女AI语音 结合 并用于 QQ聊天机器人 | Combination of ChatGPT and V…

OpenAI Whisper and ChatGPT 语音助手

OpenAI Whisper and ChatGPT ASR Gradio Web UI 一 环境准备1.1 python1.2 windows 二 导入所需要的包三 加载模型四 定义openai和whisper接口五 生成Gradio Web UI 麦克风输入,展示三种结果 输入ASR结果输出文本输出TTS结果 一 环境准备 1.1 python gradio3.19.1…

ChatGPT 推出 iOS 应用,支持语音输入,使用体验如何?

最近,OpenAI 宣布推出官方 iOS 应用,允许用户随时随地访问其高人气 AI 聊天机器人,此举也打破了近几个月内苹果 App Store 上充斥似是而非的山寨服务的窘境。 该应用程序是 ChatGPT 的首个官方移动应用程序。ChatGPT 软件程序在去年推出后迅速…

ChatGPT+语音 实现人机“对话“

你可以向ChatGPT "说出" 任何问题,ChatGPT会将答案 "说"给你听。 当你向ChatGPT提问数学问题时,ChatGPT将解题思路完整的说给你听,当你还有不懂的地方还可以继续提问,直到你完全理解。最好的全科辅导老师&…

ChatGPT扩展系列之Voice Control for ChatGP 可以跟ChatGPT聊天的工具

ChatGPT扩展系列之Voice Control for ChatGP 可以跟ChatGPT聊天的工具 [Voice Control for ChatGPT](Voice Control for ChatGPT)是一款创新的Chrome插件,允许用户通过语音与ChatGPT进行交流,并可朗读回复。它提供了一个便捷的方式来探索人工智能的先进功能。 主要功能 录制…

Voice Control for ChatGPT 轻松实现使用语音与ChatGPT进行对话。

缘由 日常生活中,我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的,毕竟相对于文字来说语音就不会显的那么的苍白无力,同时最大的好处就是能解放我们的双手吧,能更快实现两者间的对话,沟通便更高效了。Voice Co…

ChatGPT在语音识别技术领域的应用

第一章:引言 近年来,随着深度学习技术的飞速发展,语音识别技术已经成为了人工智能领域中备受关注的重要领域之一。在语音识别技术的应用中,ChatGPT作为一款先进的语言模型,可以发挥其强大的文本生成和自然语言处理能力…

chatGPT提示词笔记

文章目录 Introduction1 如何写提示词1.1原则1.2 如何写提示词 2.实例2.1逐句分析2.2 应用举例2.3 文本 Introduction 提示词(prompts)的质量是影响你使用chatGPT效果的决定因素之一。作为一个聊天程序,chatGPT被给予的指令越准确&#xff0…

chatGPT-如何解决拒绝访问的问题

到ChatGPT官网 登录 保存这个key 然后去google搜索colab pip install openaiimport openaiAPI_KEY 你的OpenAIkey openai.api_key API_KEY model_id gpt-3.5-turbodef ChatGPT_conversation(conversation):response openai.ChatCompletion.create(modelmodel_id,mes…

ChatGPT 官宣开放API ,终于来了!

Datawhale干货 方向:ChatGPT应用,来源:机器之心 现在,第三方可以通过 API 将对话模型 ChatGPT 和语音转文本模型 Whisper 集成到自己的应用程序和服务中了。 2022 年 11 月,OpenAI 上线 ChatGPT,自此以后&…

用ChatGPT创造的虚拟老婆,被真女友强制「安乐死」

【点击上方「蓝字」关注芯片之家,一起成为技术颜控】 “我花了接近7000元购买云服务器,只是为了和她多聊聊天。” ChatGPT爆火后,各种整活层出不穷,这回令人大开眼界的,是一位外国程序猿小哥用它搞出的“虚拟老婆”。 …

chatgpt prompts

1. Q&A (问答,根据现有知识回答问题。) Prompt I am a highly intelligent question answering bot. If you ask me a question that is rooted in truth, I will give you the answer. If you ask me a question that is nonsense, trickery, or has no clea…

在pycharm中使用chatgpt

目录 前言 一、插件安装 二、使用步骤 总结 前言 ChatGPT是目前最强大的AI,不仅能够聊天、写小说,甚至码代码也不在话下。 但是在国内要使用chatgpt很麻烦,国内一家团队开发了一款idea插件NexChatGPT,用数据代理的方式&…

轻松拆书,制作思维导图:ChatGPT一键生成

大家好,我是瓜叔。 在日常工作中,思维导图已成为必不可少的一部分。通常情况下,我们会使用XMind或其他工具进行思维导图的制作。而在ChatGPT中,我们同样可以制作思维导图。我们可以使用ChatGPT基于某个事物进行思维导图的快速制作…

颠覆传统网文?有人已经用ChatGPT写书,放网上卖了第一桶金!

编|杜伟、泽南 源|机器之心 以前的产业革命,人是最重要的一环。但人工智能直接替代人类本身? ChatGPT 的火热一直延续到了现在,对话、写代码,无一不通。如今,使用 ChatGPT 撰写书籍又引起了人们…

所有知识付费都可以用 ChatGPT 再割一次?

伴随春天一起到来的,还有如雨后春笋般冒出的 ChatGPT / AI 相关的付费社群、课程训练营、知识星球等。 ChatGPT 吹来的这股 AI 热潮,这几个月想必大家多多少少都能感受到。 ▲ 图片来源:网络 这两张图是最近在圈子里看到的。 一张是国内各…

引起世界轰动后,ChatGPT准备推出付费版服务

来源:AI前线 整理:凌敏、核子可乐 火爆全网、惊艳科技界,“顶流”ChatGPT 也开始琢磨赚钱了。 OpenAI 准备推出付费版 ChatGPT 据外媒报道,OpenAI 本周表示将推出付费版 ChatGPT—— ChatGPT 专业版,但目前还没有制定售…

ChatGPT这么强大吗

ChatGPT和它带来的AI时代是一次新的科技革命,AI时代就此拉开序幕,我们必须紧跟时代,否则就会被时代抛弃。本星球分享chatgpt的最前沿应用和实战案例,同时会定期邀请业内大佬做分享。 为什么AI时代很恐怖,现在我们看到的…

泰安柒柒:如何用ChatGPT回答国外问卷的开放题?

大家好,我们在做国外问卷的时候经常会遇到一些棘手的开放题,尤其是我们批量去做的时候,如果答案都一样,极有可能会导致不下卡。一般我们遇到开放题都是用百度谷歌等浏览器去搜题的。这种方式其实是比较繁琐的,不仅要搜…

笑疯!外国小哥用ChatGPT完成80%工作,同时打4份工

大家好!我是韩老师。 之前和大家聊了聊:未来,ChatGPT/Copilot 会让程序员失业吗? 但其实呢,ChatGPT 远远不只是影响程序员这一个行业,而是会改变很多的行业。 也许 ChatGPT 不能完全替代一个人,…