# voice_dt **Repository Path**: weyee/voice_dt ## Basic Information - **Project Name**: voice_dt - **Description**: 语音对话数字人 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-06-20 - **Last Updated**: 2025-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 语音多模态对话系统(voice-dt) ## 项目简介 本项目是一个集成了语音识别(ASR)、大语言模型(LLM)对话、语音合成(TTS)能力的多模态语音对话系统。用户可以通过API或Web界面上传音频,系统自动完成语音转文本、智能对话、文本转语音等流程,适用于语音助手、智能客服、语音交互等场景。 ## 主要功能 - **语音识别(ASR)**:基于Whisper模型,将音频转为文本。 - **大语言模型对话(LLM)**:支持Ollama等大模型API,实现智能对话。 - **语音合成(TTS)**:基于edge-tts,将文本转为自然语音。 - **API接口**:提供标准RESTful接口,支持ASR、LLM、TTS服务。 - **Web界面**:基于Gradio,支持音频上传与对话演示。 ## 依赖环境 - Python >= 3.11 - 主要依赖包: - edge-tts - fastapi - gradio - gunicorn - jupyter - openai-whisper - pydantic - requests 完整依赖见 `pyproject.toml`。 ## 安装与运行 1. **安装依赖** ```bash pip install uv # 安装uv工具 uv sync ``` 2. **下载Whisper模型** 运行会自动下载Whisper模型到`model/`目录。但是速度会很慢,建议离线下载好模型文件后,复制到`model/`目录。 3. **启动API服务** ```bash bash start.sh # 或手动运行 # gunicorn api:app -k uvicorn.workers.UvicornWorker --bind=0.0.0.0:6688 ``` 4. **启动Web界面** ```bash python webui.py ``` ## API接口说明 - `POST /asr` 语音识别 - 入参:`{"audio_path": "音频文件路径或URL"}` - 返回:`{"code":0, "content": "识别文本"}` - `POST /llm` 智能对话 - 入参:`{"text": "用户输入", "system_message": "系统提示词", "message": [历史对话]}` - 返回:`{"code":0, "content": "回复内容"}` - `POST /tts` 语音合成 - 入参:`{"text": "要合成的文本"}` - 返回:`{"code":0, "content": "音频Base64"}` ## Web界面使用 提供了两个版本的`webui` 1. `webui_simple.py`:简单版的,用户测试简单的对话,一问一答,大模型无记忆,页面只能存储单次对话记录。 2. `webui_complete.py`:完整版的,可以执行复杂对话,支持多个客户端进行问答,且相互无干扰,大模型具备上下文记忆,页面可存储多条对话记录。 ## 目录结构说明 ``` ├── api.py # FastAPI主接口 ├── webui_simple.py # Gradio Web界面(简单版) ├── webui_complete.py # Gradio Web界面(完整版) ├── utils/ # 工具模块(ASR/LLM/TTS等) ├── model/ # Whisper等模型文件 ├── tmp/ # 临时音频文件 ├── start.sh # 一键启动API服务脚本 ├── pyproject.toml # 依赖配置 ├── README.md # 项目说明 ``` ## 许可证 本项目采用 MIT License,详见 LICENSE 文件。 --- 如有问题欢迎提Issue或联系作者。