语音AI对话系统(WebSocket版)
基于FastAPI实现,支持前端通过WebSocket推送语音数据,串联ASR(语音转文字)→ LLM(大模型对话)→ TTS(文字转语音)全流程,返回语音结果给前端。
快速启动
- 创建Conda虚拟环境:
conda create -n audio-ai-chat python=3.10 -y - 激活环境:
conda activate audio-ai-chat - 安装依赖:
pip install -r requirements.txt - 配置环境变量:复制
.env.example为.env,修改服务地址、密钥等配置 - 启动服务:
python run.py - 接口文档:访问
http://localhost:8000/docs(FastAPI自动生成)
目录说明
audio_ai_chat/ # 项目根目录(包名,Python可导入)
├── audio_ai_chat/ # 核心代码目录(与根目录同名,避免导入冲突)
│ ├── __init__.py # 包初始化文件(空文件即可)
│ ├── main.py # 项目启动类(FastAPI入口+WebSocket路由)
│ ├── config/ # 配置文件目录
│ │ ├── __init__.py
│ │ ├── settings.py # 核心配置(ASR/LLM/TTS服务地址、WS参数等)
│ │ └── logger.py # 日志配置(格式、输出路径、级别)
│ ├── core/ # 核心业务逻辑(调整服务调用方式)
│ │ ├── __init__.py
│ │ ├── websocket_handler.py# 调整为:通过工厂类获取服务实例
│ │ ├── asr/ # ASR服务目录(多版本实现)
│ │ │ ├── __init__.py
│ │ │ ├── base.py # ASR统一接口抽象类
│ │ │ ├── version1.py # ASR版本1(如:本地离线版)
│ │ │ ├── version2.py # ASR版本2(如:百度云ASR)
│ │ │ └── factory.py # ASR工厂类(根据配置创建实例)
│ │ ├── llm/ # LLM服务目录(多版本实现)
│ │ │ ├── __init__.py
│ │ │ ├── base.py # LLM统一接口抽象类
│ │ │ ├── openai_llm.py # LLM版本1(OpenAI)
│ │ │ ├── local_llm.py # LLM版本2(本地部署LLM)
│ │ │ └── factory.py # LLM工厂类
│ │ └── tts/ # TTS服务目录(多版本实现)
│ │ ├── __init__.py
│ │ ├── base.py # TTS统一接口抽象类
│ │ ├── ali_tts.py # TTS版本1(阿里云)
│ │ ├── pyttsx3_tts.py # TTS版本2(本地pyttsx3)
│ │ └── factory.py # TTS工厂类
│ ├── codec/ # 数据编解码目录(存放加密/解密逻辑)
│ │ ├── __init__.py
│ │ └── ProtocolCodec.py # 已有:WS数据加密/解密、协议编解码
│ ├── models/ # 数据模型目录(Pydantic/数据结构定义)
│ │ ├── __init__.py
│ │ └── ws_models.py # WebSocket消息结构(请求/响应模型、错误模型)
│ └── utils/ # 工具函数目录
│ ├── __init__.py
│ ├── exceptions.py # 自定义异常(如服务调用失败、解码失败)
│ └── helpers.py # 通用工具(日志封装、异步重试、数据格式转换)
├── logs/ # 日志输出目录(自动创建)
│ └── app.log # 应用日志文件(按配置滚动生成)
├── .env # 环境变量文件(敏感配置,不提交Git)
├── .env.example # 环境变量示例(提交Git,指导配置)
├── requirements.txt # 依赖包清单
├── README.md # 项目说明(启动方式、配置说明、接口文档)
└── run.py # 项目启动脚本(简化启动命令)
握手流程
前端 后端
| |
|--- 建立 WebSocket 连接 ---->|
|<--- 连接接受(101状态码)---|
| |
|--- 发送身份信息(user_id+token)--->|
| |
|<--- 校验结果(成功/失败)---|
| |
|--- 发送业务数据(音频/文本)--->|
|<--- 推送业务结果(TTS/回复)---|