
如何在 Dify.AI 搭建听懂又会说的语音助手STT 与 TTS 接入完整指南【免费下载链接】difyBuild Agentic workflows, RAG pipelines, with rich AI model and tool support on one collaborative workspace. Deploy on cloud, VPC, or self-hosted, so teams move from prototype to production without rebuilding the stack.项目地址: https://gitcode.com/GitHub_Trending/di/difyDify.AI 是一个 LLM 应用开发平台除了文本对话它内置了语音转文字Speech-to-TextSTT和文字转语音Text-to-SpeechTTS两条链路让你的应用既能听懂用户也能开口回答。本文面向刚接手 Dify.AI 语音助手搭建的新手开发者从真实客服场景出发讲清最短上手路径、两个接口的参数细节以及上线前最容易踩的四个坑全程只需 30 分钟。️ 从一个客服电话开始为什么应用需要耳朵和嗓子想象一个电商客服机器人。用户在电话里说我上周买的耳机什么时候发货 这时系统要完成三件事先把这段话变成文本STT交给大模型理解并生成回答再把回答念出来TTS。少了第一步机器人聋少了第三步机器人像复读机体验大打折扣。Dify.AI 把这两步做成了应用级的能力开关STT 挂在语音输入上TTS 挂在每条回复上。你不需要自己写音频处理代码只需要配置模型提供商、打开两个开关然后调用两个 HTTP 接口。⚡ 最短路径从 0 到出声的 5 步准备模型。在工作区的模型供应商里配置一家提供语音能力的提供商并填入 API Key。STT 和 TTS 可以来自同一家如 OpenAI也可以分开配。打开 STT 开关。进入目标应用聊天、聊天流或工作流模式均可的功能设置启用语音转文字。打开 TTS 开关并选音色。启用文字转语音再从该提供商提供的音色列表里挑一个例如nova。发布应用拿到该应用的访问地址。前端接线录音上传走/audio-to-text回复播放走/text-to-audio代码见第四节。最小可用配置长这样应用功能设置中要生效的两个字段{ speech_to_text: { enabled: true }, text_to_speech: { enabled: true, voice: nova } }后端会按这套配置校验请求开关未打开时直接返回STT/TTS 未启用错误不会白跑模型调用。 STT 与 TTS 详解格式、上限与音色语音转文字STT接口与限制STT 的入口是POST /audio-to-text以 multipart 表单提交字段名为file成功返回一个包含text字段的 JSON。它只接受音频文件的 MIME 类型且大小卡在 30MB这两条规则在 api/services/audio_service.py 中硬编码校验。项目说明请求方式POST /audio-to-textmultipart/form-data字段file支持格式mp3、m4a、wav、amr、mpga文件大小上限30MB超出返回 413常用提供商OpenAIWhisper、Azure、Google、阿里云典型报错415 格式不支持、STT 未启用、提供商未配置该能力文字转语音TTS给回复配上声音TTS 的入口是POST /text-to-audioJSON 请求体包含三个字段字段必填作用text二选一要合成的文本message_id二选一传某条历史消息的 ID服务端直接取该消息的回复来合成免去重复传文本voice否音色不传时自动取该提供商音色列表的第一个以 OpenAI TTS 为例可选音色大致是这一档不同提供商列表不同以模型供应商页面实际显示为准音色风格适合场景alloy中性通用播报nova明快客服、导购等友好交互echo / onyx男性资讯、严肃内容fable / shimmer女性 / 中性故事、创意内容注意 TTS 的返回体不是 JSON而是音频流本身MIME 由实际返回的音频容器决定前端拿 blob 直接播放即可。 完整示例一个会听的客服助手整条链路按时序展开是这样的后端侧不需要你新写接口AudioService已经把两步都封装好了见api/controllers/web/audio.py如果要在自定义后端中复用核心就是这两行text AudioService.transcript_asr(app_modelapp, fileupload)[text] audio AudioService.transcript_tts(app_modelapp, sessionsession, message_idmsg_id, voicenova)前端侧录音结束后的处理逻辑const stt await fetch(${base}/audio-to-text, { method: POST, body: fd }); const text (await stt.json()).text; // 先走正常聊天拿到 message_id再合成语音 const tts await fetch(${base}/text-to-audio, { method: POST, body: JSON.stringify({ message_id, voice: nova }) }); new Audio(URL.createObjectURL(await tts.blob())).play(); 避坑清单上线前对一遍症状对策识别结果不准、整句丢失先确认录音没被压缩到失真嘈杂环境加前端降噪录音语言与 STT 模型不匹配时换支持该语言的模型合成语音听着播音腔不自然换音色客服场景nova通常比默认第一个音色自然长文本拆短句分段合成语气更连贯中文应用接英文用户识别成乱码在 STT 提供商处选择多语言模型或在应用提示词中声明用户语言让模型按正确语言转写用户觉得反应慢半拍限制单次录音时长10 秒内TTS 返回后先建 Audio 对象再等 blob 加载完对延迟敏感的场景考虑流式播放而非整段下载另外两个高频错误码值得记住415是文件格式不在白名单413是超过 30MB都发生在调用模型之前属于客户端可自助解决的问题。✅ 边界与方向需要说明的是Dify.AI 目前的语音链路是先上传、再合成的请求-响应模式还没有实时的双向音频流想做边说边听的通话体验需要自己在外部叠一层音频通道。演进方向上情感化合成、跨语言实时对话和专属音色克隆是社区最关心的能力建议关注版本更新。如果你正准备做一个能听能说的助手应用按本文的五步路径配置一遍今天就能听到第一声回复。【免费下载链接】difyBuild Agentic workflows, RAG pipelines, with rich AI model and tool support on one collaborative workspace. Deploy on cloud, VPC, or self-hosted, so teams move from prototype to production without rebuilding the stack.项目地址: https://gitcode.com/GitHub_Trending/di/dify创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考