Asterisk 如何集成 OpenAI Realtime

OpenAI火的一塌糊涂,各种应用都计划和OpenAI集成,完成AI智能化整合。开源项目的优势之一就是用户的创新意识,Asterisk开源用户也是如此。很多功能都是来自于用户的灵感。OpenAI已经有一个接口集成一些实时应用集成。通过realtime接口可以轻松和第三方集成。以下是一位开源研究者通过Asterisk集成的OpenAI的realtime应用场景。

基本要求

  • OpenAI API密钥和token,需具备访问实时模型的权限。
  • 已安装了Asterisk或者FreePBX

目标实现流程

实现通过Asterisk与OpenAI实时模型进行低延迟无缝通信

开发FreePBX插件,实现FreePBX智能化

使用ExternalMedia构建Asterisk的ARI应用程序,灵活的可扩展性支持构建一个后端 Node.js 应用程序,复制OpenAI 实时测试场景的功能来验证实现机制

此项目脚本建立与OpenAI实时API(gpt-4o-realtime-preview-2024-12-17)的WebSocket连接,发送来自本地PCM文件(input_audio.pcm)的音频,并实时接收文本转录和音频响应。通过分块发送音频来模拟流式传输,并将返回的音频保存为PCM文件。

主要组件

模块:使用ws进行WebSocket通信,fs进行文件操作,dotenv加载环境变量(如OpenAI API密钥)。

WebSocket:通过API密钥和beta标头认证连接到wss://api.openai.com/v1/realtime。

音频处理:读取16位PCM音频,以100毫秒为单位发送数据块(24kHz下4800字节),接收PCM16格式的音频响应,并将其追加到文件中。

日志记录:在控制台记录带时间戳的事件(连接、发送数据块、响应、错误)。

OpenAI交互:配置API返回文本和音频响应,包含友好英语语音的自定义指令。

具体执行流程

初始化:加载API密钥,设置输入/输出文件路径,初始化空的输出PCM文件。

WebSocket连接:与认证后的OpenAI实时API建立连接。

音频发送:读取input_audio.pcm,将其分割为4800字节的数据块(24kHz下100毫秒),以base64编码格式发送每个数据块,间隔100毫秒,并提交缓冲区。

响应请求:请求文本和音频(PCM16格式)响应,附带具体指令。

消息处理:处理传入消息:记录错误、文本转录(部分和完整)以及音频增量。将音频增量追加到输出文件。响应完成时关闭连接。

错误处理:捕获并记录WebSocket错误和执行失败。

主要功能特点

通过100毫秒的数据块间隔模拟实时音频流。

支持OpenAI的文本和音频响应。

将音频响应以带时间戳的名称保存为PCM文件。

注意,此项目仅是开发人员的研究项目,某些功能还未完成,读者可以作为一个学习的模型,站在“巨人”的肩膀上做进一步的实现。

项目地址https://github.com/infinitocloud/asterisk_to_openai_rt/tree/main

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论