基于 Go 语言和腾讯云 API 实现的语音交互原型,支持通过 TCP 协议进行音频收发,完成“语音识别→AI 对话→语音合成”的闭环流程,适用于单客户端场景下的语音交互演示(如面向老年人的暖心语音服务)。
这个项目是为了演示与硬件连接效果而生的简单产物,并不成熟。还存在多客户端隔离、密钥安全管理、错误处理和资源释放等问题。
- TCP 通信:监听指定端口(默认
8005),接收客户端音频数据并返回合成的语音回复。 - 语音识别:调用腾讯云 ASR API,将客户端发送的音频(WAV 格式)转换为文本。
- AI 对话:基于腾讯云混元大模型(
hunyuan-role),结合角色设定和对话历史生成回复。 - 语音合成:调用腾讯云 TTS API,将 AI 回复文本转换为音频并返回给客户端。
- Go 1.24+
- 腾讯云账号(需开通 ASR、TTS、混元大模型服务)
- 腾讯云 API 密钥(SecretId、SecretKey,需具备对应服务权限)
-
克隆仓库
git clone https://github.com/STAR0903/chat cd chat -
配置腾讯云密钥编辑
pkg/tencent.go,替换占位符为实际密钥:const ( SecretId = "你的腾讯云SecretId" SecretKey = "你的腾讯云SecretKey" )
-
安装依赖
go mod tidy
-
启动服务
go run main.go
服务将在
0.0.0.0:8005端口监听 TCP 连接。
chat/
├── main.go # 程序入口,TCP 连接管理与流程调度
├── data/
│ ├── set.txt # AI 助手角色设定(身份、对话准则等)
│ ├── input.wav # 临时存储客户端发送的音频
│ ├── output.wav # 临时存储合成的回复音频
│ └── history.txt # 对话历史记录(JSON 格式)
├── pkg/
│ ├── asr.go # 腾讯云 ASR 语音识别实现
│ ├── llm.go # 混元大模型对话逻辑(含历史记录管理)
│ ├── tencent.go # 腾讯云 API 密钥配置
│ └── tts.go # 腾讯云 TTS 语音合成实现
└── go.mod # 项目依赖配置
-
客户端连接:通过 TCP 工具(如
nc或自定义客户端)连接服务端:nc 127.0.0.1 8005
-
发送音频:向连接发送 WAV 格式音频(16k 采样率、单声道,需与 ASR 引擎匹配)。
-
接收回复:服务端处理完成后,会返回合成的 WAV 音频回复。
- 单客户端支持:所有连接共享
data/目录下的临时文件(input.wav、history.txt等),多客户端同时连接会导致数据冲突。 - 密钥管理:当前密钥硬编码在代码中,生产环境需改为环境变量或配置文件读取。
- 错误处理:部分场景下错误处理不完善(如 API 调用失败可能导致程序崩溃)。
- 音频格式限制:仅支持 16k 采样率中文音频,需客户端严格匹配格式。