Advertisement

【Gradio】Building With Blocks 使用 Gradio 块像函数一样

阅读量:

先决条件:本指南是在模块介绍的基础上编写的。请确保首先阅读那份指南。

简介

你知道吗,Gradio Blocks 应用除了是一个全栈机器学习演示外,它还是一个普通的老式 Python 函数!

这意味着,如果你有一个名为 demo 的 gradio Blocks(或 Interface)应用,你可以像使用任何 Python 函数一样使用 demo

所以像 output = demo("Hello", "friend") 这样做将会在输入"Hello"和"friend"上在 demo 中定义的第一个事件,并将其存储在变量 output 中。

如果我让你感到困倦🥱,请忍耐一下!通过使用像函数这样的应用程序,你可以无缝地组合 Gradio 应用程序。以下部分将展示如何操作。

将块视为函数

我们假设有以下示例,可以将英文文本翻译成德文文本。

复制代码
 import gradio as gr

    
 from transformers import pipeline
    
  
    
  
    
 # 初始化transformers库的翻译管道,使用t5-base模型进行翻译
    
 pipe = pipeline("translation", model="t5-base")
    
  
    
  
    
 # 定义翻译函数,将输入的英文文本翻译为德文
    
 def translate(text):
    
     # 使用管道进行翻译并返回翻译结果
    
     return pipe(text)[0]["translation_text"]
    
  
    
  
    
 # 使用Gradio构建界面
    
 with gr.Blocks() as demo:
    
     # 创建一个行容器,用于布局英文输入和德文输出
    
     with gr.Row():
    
     # 第一列用于输入英文文本和翻译按钮
    
     with gr.Column():
    
         english = gr.Textbox(label="English text")  # 英文输入框
    
         translate_btn = gr.Button(value="Translate")  # 翻译按钮
    
     # 第二列用于显示翻译后的德文文本
    
     with gr.Column():
    
         german = gr.Textbox(label="German Text")  # 德文输出框
    
  
    
  
    
     # 定义按钮点击事件,当点击翻译按钮时,调用翻译函数
    
     translate_btn.click(translate, inputs=english, outputs=german, api_name="translate-to-german")
    
     # 添加示例输入,以便快速测试
    
     examples = gr.Examples(examples=["I went to the supermarket yesterday.", "Helen is a good swimmer."],
    
                        inputs=[english])
    
  
    
  
    
 # 启动Gradio界面
    
 demo.launch()
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-17/H37tq2JF5VpLhga1biGZdPOfRxCm.png)
64129d2ade14c7c01e28cfe6a9ae2937.png

我已经提前在 Hugging Face 空间的 gradio/english_translator 上托管了它。

您也可以在下面看到演示:
f50153eb71d301864563667319a018c6.png

现在,假设你有一个生成英文文本的应用程序,但你想要额外生成德文文本。

您可以选择:

  1. 将我的英语到德语翻译的源代码复制并粘贴到您的应用程序中。

  2. 将我的英语-德语翻译加载到您的应用程序中,并将其视为普通的 Python 函数。

选项 1 在技术上总是可行的,但它经常带来不必要的复杂性。

选项 2 允许您借用所需的功能,而无需紧密耦合我们的应用程序。

您只需在源文件中调用****Blocks.load 类方法。之后,您就可以像使用普通 Python 函数一样使用我的翻译应用了!

以下代码片段和演示展示了如何使用****Blocks.load

请注意,变量 english_translator 是我的英语到德语的应用程序,但在 generate_text 中像普通函数一样使用。

复制代码
 import gradio as gr

    
 from transformers import pipeline
    
  
    
  
    
 # 从Gradio Hub加载英语到德语的翻译模型
    
 english_translator = gr.load(name="spaces/gradio/english_translator")
    
 # 初始化一个文本生成模型,这里使用distilgpt2
    
 english_generator = pipeline("text-generation", model="distilgpt2")
    
  
    
  
    
 # 定义一个函数用于生成英语文本并翻译成德语
    
 def generate_text(text):
    
     # 使用GPT-2模型根据输入的种子文本生成英语文本
    
     english_text = english_generator(text)[0]["generated_text"]
    
     # 调用之前加载的翻译模型将生成的英文翻译成德文
    
     german_text = english_translator(english_text)
    
     # 返回生成的英文文本和对应的德文翻译
    
     return english_text, german_text
    
  
    
  
    
 # 使用Gradio Blocks构建界面
    
 with gr.Blocks() as demo:
    
     # 划分行和列布局放置输入框和生成的文本显示区域
    
     with gr.Row():
    
     with gr.Column():
    
         seed = gr.Text(label="Input Phrase")  # 输入种子文本的输入框
    
     with gr.Column():
    
         english = gr.Text(label="Generated English Text")  # 显示生成的英文文本
    
         german = gr.Text(label="Generated German Text")  # 显示翻译成德文的文本
    
     # 创建一个按钮用于触发文本生成和翻译的操作
    
     btn = gr.Button("Generate")
    
     # 设置按钮的点击事件:生成英语文本、翻译成德语,并展示结果
    
     btn.click(generate_text, inputs=[seed], outputs=[english, german])
    
     # 提供一个示例输入文本以供快速测试
    
     gr.Examples(["My name is Clara and I am"], inputs=[seed])
    
  
    
  
    
 # 启动Gradio应用
    
 demo.launch()
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-17/u69owYQAXjWTSE5vCZagmeJ7VsLG.png)

c3a395ef1607af4d018c893976cd5fe2.png
cbb965e8129c8f376d0b92dfbfdee83a.png

如何控制应用程序中使用哪个功能

如果您加载的应用程序定义了多个函数,您可以使用 fn_indexapi_name 参数指定要使用的函数。

在我们的英语到德语演示代码中,您会看到以下行:

复制代码
    translate_btn.click(translate, inputs=english, outputs=german, api_name="translate-to-german")
    
    javascript
    
    

api_name 为我们的应用程序中的这个函数提供了一个独特的名称。您可以使用这个名称来告诉 gradio 您希望在上游空间中使用哪个函数:

复制代码
    english_generator(text, api_name="translate-to-german")[0]["generated_text"]
    
    markdown

您也可以使用 fn_index 参数。想象一下我的应用程序还定义了一个英语到西班牙语的翻译功能。为了在我们的文本生成应用程序中使用它,我们将使用以下代码:

复制代码
    english_generator(text, fn_index=1)[0]["generated_text"]
    
    markdown

在 gradio 空间中的函数是从零开始索引的,所以由于西班牙语翻译器将是我的空间中的第二个函数,你应该使用索引 1。

告别词

我们展示了如何将 Blocks 应用程序视为常规 Python,以帮助您跨不同应用程序组合功能。任何 Blocks 应用程序都可以像函数一样对待,但一个强大的模式是在将其作为自己应用程序中的函数之前,先 load 一个托管在 Hugging Face Spaces 的应用程序。您还可以加载托管在 Hugging Face 模型中心的模型 - 请参阅使用 Hugging Face 集成指南以获取示例。

https://huggingface.co/spaces

https://huggingface.co/models

https://www.gradio.app/guides/using-hugging-face-integrations

全部评论 (0)

还没有任何评论哟~