# 语音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/回复)---|