71 lines
4.7 KiB
Markdown
71 lines
4.7 KiB
Markdown
# 语音AI对话系统(WebSocket版)
|
||
基于FastAPI实现,支持前端通过WebSocket推送语音数据,串联ASR(语音转文字)→ LLM(大模型对话)→ TTS(文字转语音)全流程,返回语音结果给前端。
|
||
|
||
## 快速启动
|
||
1. 创建Conda虚拟环境:`conda create -n audio-ai-chat python=3.10 -y`
|
||
2. 激活环境:`conda activate audio-ai-chat`
|
||
3. 安装依赖:`pip install -r requirements.txt`
|
||
4. 配置环境变量:复制`.env.example`为`.env`,修改服务地址、密钥等配置
|
||
5. 启动服务:`python run.py`
|
||
6. 接口文档:访问 `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/回复)---| |