Loading... # 一、概述 ## 1. 简介 Dify 是一个开源的 LLM 应用开发平台,当前已支持音频输入功能。但该功能需要前提条件:本地部署音频识别模型并开放对应的 API 接口。本文记录完整的部署过程,方便后续回溯。 ### A. 是什么 FunASR 是阿里巴巴达摩院开源的语音识别工具包,funasr-api 项目将其封装为 RESTful API 服务,可与 Dify 无缝集成。 ### B. 为什么学 - 实现 Dify 应用的语音输入功能 - 掌握本地语音识别模型的部署方法 - 了解 OpenAI 兼容 API 的配置流程 ### C. 学完能做什么 - 本地部署 FunASR 语音识别服务 - 在 Dify 中配置自定义语音识别模型 - 创建支持语音输入的 AI 应用 ## 2. 前置知识 ### A. 必备技能 - Linux 基础操作 - Python 虚拟环境管理 - Docker 基础(可选) ### B. 推荐知识 - 语音识别基本概念 - RESTful API 调用 # 二、环境准备 ## 1. 系统要求 - 操作系统:Linux(推荐 Ubuntu 20.04+) - Python 版本:3.8+ - 硬件:支持 CUDA 的 GPU(推荐)或 CPU - 存储空间:至少 20GB(用于模型文件) ## 2. 硬件要求 - GPU:NVIDIA 显卡,显存 8GB+ - CPU:8 核心以上(若使用 CPU 推理) - 内存:16GB+ ## 3. 软件依赖 - ffmpeg:用于音频格式转换 - Python 3.8+ - pip 包管理器 # 三、语音识别模型部署 ## 1. 项目获取 使用 funasr-api 项目进行部署,该项目提供完整的模型加载和 API 接口功能。 GitHub 地址:https://github.com/Quantatirsk/funasr-api 下载项目源码: ```bash wget https://github.com/Quantatirsk/funasr-api/archive/refs/heads/main.zip unzip funasr-api-main.zip cd funasr-api-main ``` ## 2. 模型下载 需要下载以下语音识别模型: | 模型名称 | 功能说明 | |---------|---------| | iic/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727 | 实时标点预测 | | iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch | 标点预测模型 | | iic/speech_fsmn_vad_zh-cn-16k-common-pytorch | 语音活动检测 | | iic/speech_ngram_lm_zh-cn-ai-wesp-fst | 语言模型 | | iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online | 在线 ASR 模型 | | iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch | 离线 ASR 模型 | 模型下载后,放置到本地缓存目录: ```bash /root/.cache/modelscope/hub/ ``` 最终模型位置示例: ```bash /root/.cache/modelscope/hub/iic/speech_ngram_lm_zh-cn-ai-wesp-fst ``` ## 3. 安装 ffmpeg ffmpeg 用于音频格式转换,安装方式: Ubuntu/Debian: ```bash sudo apt update sudo apt install ffmpeg ``` CentOS/RHEL: ```bash sudo yum install epel-release sudo yum install ffmpeg ``` 验证安装: ```bash ffmpeg -version ``` ## 4. Python 环境配置 创建虚拟环境并安装依赖: ```bash # 创建虚拟环境 python3 -m venv venv source venv/bin/activate # 安装依赖 pip install -r requirements.txt ``` ## 5. 配置文件设置 复制并修改配置文件: ```bash cp .env.example .env ``` 配置文件内容: ```bash # 服务器配置 HOST=0.0.0.0 PORT=9584 DEBUG=false # 设备配置 DEVICE=cuda:0 # auto, cpu, cuda:0, npu:0 # Worker 配置 WORKERS=1 # 这里的 INFERENCE_THREAD_POOL_SIZE 不能设置为 auto,否则启动会有报错 # INFERENCE_THREAD_POOL_SIZE=auto # ASR 模型配置 # ASR 模型加载模式:realtime, offline, all ASR_MODEL_MODE=all # 启动时自动预加载的自定义 ASR 模型(逗号分隔) # 可选值:fun-asr-nano # AUTO_LOAD_CUSTOM_ASR_MODELS=fun-asr-nano # 是否启用实时标点模型(用于中间结果展示) ASR_ENABLE_REALTIME_PUNC=true # 远场过滤配置 ASR_ENABLE_NEARFIELD_FILTER=true ASR_NEARFIELD_RMS_THRESHOLD=0.01 ASR_NEARFIELD_FILTER_LOG_ENABLED=true # 鉴权配置(可选) # APPTOKEN=your_token_here # APPKEY=your_key_here # 日志配置 LOG_LEVEL=INFO LOG_FILE=logs/funasr-api.log LOG_MAX_BYTES=20971520 LOG_BACKUP_COUNT=50 ``` 配置注意事项: 1. INFERENCE_THREAD_POOL_SIZE 不能设置为 auto,否则启动会报错 2. 尝试启动 fun-asr-nano 模型可能不成功,建议使用默认的 paraformer-large ## 6. 启动服务 ```bash python start.py ``` 服务启动后,监听地址为 http://localhost:9584 ## 7. 本地验证 使用 curl 进行测试: ```bash curl -X POST "http://localhost:9584/v1/audio/transcriptions" \ -F "file=@/root/.cache/modelscope/hub/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online/example/asr_example.wav" \ -F "model=whisper-1" \ -F "response_format=json" ``` 成功返回示例: ```json { "text": "识别出的文字内容" } ``` # 四、Dify 模型配置 ## 1. 添加模型供应商 在 Dify 管理后台操作: 1. 点击"设置"-"模型供应商" 2. 选择"OpenAI-API-compatible" 3. 点击"添加模型" ## 2. 配置语音识别模型 选择模型类型为 Speech2Text,填写配置信息: | 配置项 | 值 | |-------|-----| | 模型名称 | 自定义名称(如 funasr) | | API 端点 | http://your-server:9584/v1/audio/transcriptions | | API Key | (可选,若配置了鉴权) | 配置完成后,点击"添加"。 # 五、创建语音识别应用 ## 1. 新建聊天应用 1. 在 Dify 中创建一个新的聊天应用 2. 点击"功能"选项卡 3. 可以看到新增的"语音转文字"选项 ## 2. 启用语音转文字 1. 打开"语音转文字"开关 2. 点击"发布"-"发布更新" **重要提示**:如果只打开开关,没有点击"发布更新",直接点击预览,此时可以看到小话筒,但发送语音会提示"Speech to text is not enable"。这是因为 app_config 文件中的语音识别变量还是 false,所以必须先点击"发布更新"。 ## 3. 测试语音识别 1. 点击预览按钮 2. 点击小话筒图标 3. 靠近麦克风说话 4. 语音将识别成文字 5. 点击发送,识别结果发送给 AI # 六、系统架构 整体架构如下: ```mermaid graph LR A[用户] -->|语音输入| B[Dify应用] B -->|音频数据| C[FunASR API] C -->|识别结果| B B -->|文字对话| D[LLM模型] D -->|回复| B B -->|文字/语音| A ```  # 七、常见问题 ## 1. 模型加载失败 **问题**:启动时报错模型文件不存在 **解决**:检查模型是否下载到正确的缓存目录 /root/.cache/modelscope/hub/ ## 2. CUDA 内存不足 **问题**:GPU 显存不够 **解决**:将 DEVICE 配置改为 cpu,或减少 WORKERS 数量 ## 3. ffmpeg 未安装 **问题**:音频处理失败 **解决**:使用包管理器安装 ffmpeg ## 4. 语音识别不准确 **问题**:识别结果错误较多 **解决**: - 确保音频质量良好 - 检查采样率是否为 16kHz - 尝试调整 ASR_NEARFIELD_RMS_THRESHOLD 参数 ## 5. Dify 提示 Speech to text is not enable **问题**:语音转文字开关已打开但无法使用 **解决**:必须点击"发布更新",仅打开开关不会生效 # 八、性能优化 ## 1. GPU 加速 - 使用 CUDA 设备进行推理 - 批量处理音频请求 ## 2. 模型选择 - 实时场景:使用 online 模型 - 离线场景:使用 offline 模型,准确率更高 ## 3. 缓存策略 - 启动时预加载常用模型 - 使用 Redis 缓存识别结果 # 九、参考资料 1. [funasr-api 项目地址](https://github.com/Quantatirsk/funasr-api) 2. [FunASR 官方文档](https://github.com/alibaba-damo-academy/FunASR) 3. [Dify 官方文档](https://docs.dify.ai) 最后修改:2026 年 02 月 17 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏