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

如何自定义Gradio应用界面并基于首个界面输出触发函数

问题描述

我希望基于function1的输出触发function2,目前通过两个Interface结合Blocks实现了该功能,但不想使用额外界面。

我的尝试代码

# 定义函数
def function1(input1):
    # 你的代码
    return 'hello'

def function2(create_ticket):
    # 你的代码
    return 'Your ticket has been created 🏆'

interface1 = gr.Interface(fn=listen_audio, inputs=gr.Audio(sources="microphone", type="filepath"),outputs="text")

interface2 = gr.Interface(fn=function2, inputs=["checkbox"], outputs="text")

lst = [x for x in dir(interface1) if '__' not in x]
# 使用Blocks组合界面
with gr.Blocks() as demo:
    with gr.Row():
        with gr.Column():
            interface1.render()
        with gr.Column():
            interface2.render()
demo.launch()

期望实现的代码(示例)

import gradio as gr

def listen_audio(input1):
    return 'problem'

def function2(output_of_listen_audio_function):
    return 'Ticket has been created'
demo = gr.Interface(fn=listen_audio, inputs=gr.Audio(sources="microphone", type="filepath"), outputs="text", 
                    flagging_options=["Create Ticket"],
                    # allow_flagging = "never"
                    )
demo.launch()

应用前端界面

解决方案

方法1:使用Blocks组件(推荐,灵活可控)

用Blocks可以在同一个界面内直接关联音频处理结果和工单创建逻辑,不需要拆分多个Interface:

import gradio as gr

def listen_audio(input1):
    # 替换为你的音频实际处理逻辑
    return '检测到的问题描述'

def function2(problem_text):
    # 替换为创建工单的实际业务逻辑
    return f"已为问题「{problem_text}」创建工单 🏆"

with gr.Blocks() as demo:
    # 音频输入组件
    audio_input = gr.Audio(sources="microphone", type="filepath", label="麦克风输入")
    # 显示音频处理结果的文本框
    result_text = gr.Textbox(label="处理结果")
    # 触发工单创建的按钮
    create_ticket_btn = gr.Button("创建工单")
    # 显示工单创建状态的文本框
    ticket_result = gr.Textbox(label="工单状态")

    # 音频输入变化时自动处理并显示结果
    audio_input.change(fn=listen_audio, inputs=audio_input, outputs=result_text)
    # 点击按钮时,把处理结果传给function2生成工单
    create_ticket_btn.click(fn=function2, inputs=result_text, outputs=ticket_result)

demo.launch()

方法2:基于Interface的标记功能实现

如果想沿用你给出的带flagging_options的思路,可以通过自定义标记事件触发function2:

import gradio as gr

def listen_audio(input1):
    return '检测到的问题描述'

def function2(problem_text):
    return f"已为问题「{problem_text}」创建工单 🏆"

def handle_flag(flag_data, flag_option):
    if flag_option == "Create Ticket":
        # 提取音频处理后的结果
        problem_text = flag_data[1]
        return function2(problem_text)
    return ""

demo = gr.Interface(
    fn=listen_audio,
    inputs=gr.Audio(sources="microphone", type="filepath"),
    outputs="text",
    flagging_options=["Create Ticket"],
    flagging_callback=gr.CSVLogger()  # 可替换为自定义日志回调
)

# 绑定标记事件,触发工单创建
demo.flagging_event(fn=handle_flag, inputs=[demo.data, demo.flag_option], outputs=gr.Textbox(label="工单状态"))

demo.launch()

内容的提问来源于stack exchange,提问作者vishvas chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:57:41