You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradio实时语音助手搭建困惑:输入输出变量配置疑问

类Siri实时连续对话语音助手的Gradio输入输出配置方案

一、当前配置的合理性

你当前用gr.inputs.Microphone做语音输入、gr.outputs.Textbox做文本输出,基础交互是可行的,但要实现类Siri的完整体验,还缺了语音输出组件——毕竟Siri是用语音回应的,只输出文本不够贴合需求。

二、适配实时连续对话的输入输出组合

Gradio强制要求定义输入输出组件,针对你的实时连续对话需求,推荐用以下组件搭配:

  • 输入组件:选择gr.Audio(source="microphone", streaming=True)(注意Gradio 3.x版本已经废弃旧的gr.inputs模块,新组件支持流式输入,更适合实时场景)
  • 输出组件:
    • gr.Textbox():用来展示语音转写的用户提问文本,以及AI生成的回复文本,方便用户查看文字记录
    • gr.Audio(label="语音回复", streaming=True):把AI的文本回复转换成语音输出,还原Siri的语音交互逻辑

三、简化版代码示例

import gradio as gr
# 假设你已经实现了这三个核心函数
from your_module import speech_to_text, text_to_speech, get_chat_response

def handle_continuous_chat(audio_data, chat_history):
    # 1. 语音转文字
    user_text = speech_to_text(audio_data)
    # 2. 结合历史生成对话回复
    ai_text = get_chat_response(user_text, chat_history)
    # 3. 更新对话历史
    chat_history.append((user_text, ai_text))
    # 4. 文字转语音
    ai_audio = text_to_speech(ai_text)
    return ai_text, ai_audio, chat_history

with gr.Blocks() as demo:
    gr.Markdown("# 类Siri实时对话助手")
    # 存储对话历史的状态组件
    chat_history = gr.State([])
    # 流式麦克风输入
    mic_input = gr.Audio(source="microphone", streaming=True, label="请说话")
    # 文本输出区
    text_output = gr.Textbox(label="对话内容")
    # 语音输出区
    audio_output = gr.Audio(label="语音回复", streaming=True)
    
    # 绑定流式交互逻辑
    mic_input.stream(handle_continuous_chat, inputs=[mic_input, chat_history], outputs=[text_output, audio_output, chat_history])

demo.launch()

四、关键注意点

  • 实时连续对话必须用stream()方法绑定交互,而不是普通的点击触发,这样才能实现边说话边处理的实时效果
  • 要保留对话上下文,必须用gr.State()组件存储历史记录,不然每次交互都是独立的,没法连贯对话
  • 如果还在使用Gradio 2.x版本,gr.inputs.Microphone可以继续用,但建议升级到3.x版本,新组件的流式支持更完善

内容的提问来源于stack exchange,提问作者Ivory Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:13:21