在Dify中构建语音对话系统需配置ChatTTS模型、设计含用户输入/LLM解析/TTS合成的Workflow,支持情感识别与多语言自动判断,最终返回Base64编码MP3音频。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify中构建可“开口说话”的语音对话系统,需将用户输入文本实时转为语音并返回可播放音频,整个流程必须支持情感识别、语速调节与多语言自动判断,且不能依赖外部代码编写。
配置TTS模型服务接入
进入Dify控制台 → 左侧导航栏点击「模型管理」→ 点击右上角「+ 添加模型」→ 在「模型类型」下拉菜单中选择「Text-to-Speech」。
填写模型基础信息:模型名称填“ChatTTS-Chinese”,提供方选“Xinference”,API端点填http://xinference-host:9997/v1/audio/speech,认证方式选「无认证」(若部署在内网)或「Bearer Token」(填入Xinference的API Key)。
【必须确认Xinference已加载ChatTTS模型且状态为running】。若未加载,需先在Xinference服务中执行xinference launch --model-name chat-tts --model-size 1.7b --device cuda;未启用GPU时会严重卡顿甚至超时失败。
创建语音合成Workflow
回到Dify首页 → 点击「应用」→ 「新建应用」→ 选择「Workflow」模板 → 命名为“VoiceDialog-TTS”。
拖入第一个节点:「用户输入」→ 配置字段名“text”,字段类型为「段落」,最大长度设为5000,勾选「必填」。
拖入第二个节点:「LLM」→ 模型选qwen2.5 → 在System提示词中粘贴以下内容:
你是一个语音参数解析器。请严格根据用户输入{{#1768335663610.text#}},输出标准JSON:{"text":"","motion":"neutral","emotion_scale":0.5,"speed_ratio":1.0,"language":"auto"}。仅输出JSON,不加任何说明、换行或额外字符。
开启「结构化输出」→ 粘贴对应JSON Schema → 保存节点。
添加TTS调用节点并处理音频流
方法一:使用内置TTS节点(推荐)
拖入「TTS」节点 → 在「模型」下拉中选择刚配置的“ChatTTS-Chinese” → 绑定输入变量:text字段来自LLM节点的text,motion来自motion,speed_ratio来自speed_ratio,language来自language。
关键设置:勾选「返回Base64编码音频」→ 输出格式选MP3 → 音频采样率固定为24000Hz(ChatTTS默认兼容值,设为其他值将静音)。
方法二:手动调用自定义API节点(适配非标准TTS服务)
拖入「HTTP请求」节点 → 方法选POST → URL填{{tts_api_endpoint}}(需提前在环境变量中定义)→ Body选JSON → 写入:
{"text":"{{llm_output.text}}","voice":"default","motion":"{{llm_output.motion}}","speed_ratio":{{llm_output.speed_ratio}},"language":"{{llm_output.language}}","format":"mp3"}
注意:此方式必须确保响应体是完整MP3二进制数据,且Header中包含Content-Type: audio/mpeg,否则Dify无法识别为有效音频。
连接播放与返回结果
第一步:拖入「条件分支」节点 → 设置判断逻辑为「TTS节点是否成功返回音频」→ 成功分支连向「返回结果」节点,失败分支连向「返回错误提示」节点。
第二步:在「返回结果」节点中,配置「返回字段」为audio_base64 → 类型选「文件」→ 文件名设为"output.mp3" → MIME类型填audio/mp3。
第三步:启用「Web UI预览」开关 → 保存并发布应用 → 在聊天界面输入任意中文句子,如“今天天气真好”,点击发送。


















