Show HN: Jargo —— 用于对话式AI应用的Go语言版Pipecat
Jargo是Pipecat的早期Go语言移植,提供实时语音代理框架,支持WebRTC音频输入输出、流式语音转文字→推理→文字转语音管道、轮流对话和打断功能。旨在提供一个可自托管、可部署为二进制文件替代Python方案的解决方案。
Jargo是一个将Pipecat移植到Go语言的开源项目,专为构建实时语音AI代理而设计。它通过WebRTC接收音频输入,经过流式语音转文字(STT)→大语言模型(LLM)推理→文字转语音(TTS)的管道处理,再通过RTVI数据通道将音频输出到客户端,实现与现有RTVI客户端的互操作。项目目前处于早期开发阶段,API尚不稳定,可能会发生变化。
为什么选择Go而不是Python?Pipecat本身是基于Python的,但实时语音服务器通常不需要复杂的AI/数据科学生态系统——模型通常作为远程服务或ONNX运行时运行,剩下的工作主要是音频帧处理、WebRTC连接管理、并发控制和最终二进制打包。对于这些任务,Go语言更为合适:它可以编译为单个静态二进制文件,部署简单;内存占用低且可预测;启动速度快;并且能够实现真正的并发,同时处理多个会话而不受GIL限制。因此,Jargo应运而生,同时避免了依赖Daily等专有云服务的锁定。
Jargo的核心特性包括:使用纯Go的Pion库实现标准WebRTC,无需专有传输层;音频编码方面,默认使用纯Go的Opus编码器,也可选择libopus以获得更佳的语音质量;流式管道支持STT、LLM和TTS,并带有提示缓存;轮流对话和打断功能基于本地ONNX运行的Silero VAD和Smart Turn v3算法;所有服务(STT/LLM/TTS)都可通过小型接口进行插拔;架构采用独立的处理器,通过帧传递实现中断和并发。
依赖方面,Jargo使用cgo(不支持CGO_ENABLED=0),并需要一些本机库:libsoxr用于音频重采样(构建时链接),libopus是可选的C Opus编码器(通过-tags libopus选择),ONNX Runtime在运行时加载用于VAD和对话结束检测。容器镜像已包含所有这些依赖。
使用方式上,可以通过go get获取,本地构建时需要安装本机依赖,然后使用cgo运行示例。也提供Docker方式,镜像已包含所有依赖,只需设置相应的API密钥即可。项目包含两个示例:echo bot(无需API密钥)和完整的语音bot(需要DeepGram、Anthropic、ElevenLabs的API密钥)。
Jargo采用BSD-2-Clause许可证,与Pipecat相同,并保留上游Daily的版权声明。这是一个独立项目,与Daily无关联或背书。