连接、运行、部署:Gradio 中的 AI 工作流
大多数有趣的 AI 应用,本质上都是一条条流水线:先生成图像,再按需抠出背景,或者进一步编辑成新的内容;先写好脚本,再为它生成语音,或者在保留脚本不变的情况下更换声音。我们通常用 Python 把这些步骤串起来,一旦结果不对,就只能回到打印调试,查找究竟是哪一步产生了异常值。
Gradio 内置的 gr.Workflow,让流水线本身成为界面。你可以把各个步骤描述为由类型化节点组成的图,Gradio 则会提供一个支持拖放的画布:每个节点都能单独运行,所有中间结果也一目了然。同一张图还会自动成为 REST API,并可通过一条命令部署到 Hugging Face Spaces。
理解这一理念的最好方式,就是看看几个实际运行的工作流。下面的每个应用都是一个在线 Hugging Face Space,你可以直接打开、运行并复制。
编辑图像
上传一张图像,输入编辑指令(“把它变成下雪的冬日场景”“加一副太阳镜”“把车变成红色”),即可得到编辑后的照片。整个应用只有一个节点,负责调用 Hugging Face Inference Providers 上的 Qwen-Image-Edit。
将真实模型串成媒体工作室
一张图,三条流水线。输入提示词后,先用 FLUX 生成图像,再将它传给背景移除 Gradio Space,把图像变成贴纸。输入一个主题后,可以通过文本转语音 Gradio Space生成旁白,同时调用 LLM,为同一主题生成吸引人的节目标题。
整个过程只需一张画布:通过 Hugging Face Inference Providers 调用两个模型,再调用两个 Gradio Space。
由于这是一个工作流,三个输出分别对应各自的 REST 端点:/sticker、/voiceover 和 /episode_title。无需打开界面,就可以直接在代码中调用它们。可运行示例请参阅下方的 通过代码调用。
并行生成多路图像
输入一个创意,就能一次生成一组作品:由 FLUX 生成的基础图像、基于该图像重新创作的两种 AI 版本(柔和的水彩风格和霓虹赛博朋克风格),以及由 LLM 撰写的画廊标题。
每张图像都由模型节点通过 Inference Providers 根据提示词直接生成,标题则由调用 LLM 的 fn 节点生成。这正是 fan-out 模式:一个创意可以同时传给多个操作节点,并行完成生成。
分析 Hugging Face 数据集
输入 Hugging Face 数据集 ID,例如 stanfordnlp/imdb 或 mteb/tweet_sentiment_extraction,单个输入就会分发给四个操作节点。它们通过 Datasets Server API 实时分析数据集。
最终你会得到概览卡片、前几行数据预览、逐列统计信息和分布图表;这些结果都由各节点独立并行计算。工作流的优势正在于此!
运行你自己的 GPU 模型
到目前为止,每个节点都会调用 Hugging Face。但 fn 节点本质上就是 Python,因此也可以直接在 Space 的 GPU 上运行模型。
只需为绑定的函数添加 @spaces.GPU 装饰器。节点运行时,ZeroGPU 会为这次调用分配 GPU,运行模型后再释放资源。这样一来,我们不必始终依赖 Inference Providers 或现成的 Gradio Space。
来看看这个演示:它通过 Diffusers 加载 Lightricks/LTX-Video,将静态图片生成动画,而且整个流程只需一个节点即可完成。gr.Workflow 无需了解你的 GPU 配置,只要调用绑定的函数即可。
简单说说它是怎么工作的
每个 workflow 都是一张由三类节点组成的图:references(输入)、operators(执行具体操作的步骤)和 subjects(输出)。operator 可以是你自己编写的 Python 函数、Hugging Face Inference Providers 上的模型、另一个 Gradio Space,或 Hub 数据集中的一行数据。只需在类型匹配的端口之间拖线连接,点击 Run,就能看到每个结果直接显示在对应位置。
在代码中调用
你创建的每个 workflow 同时也是一个 API,无需额外配置。每个输出都会根据其标签生成对应的 REST endpoint,还可以通过 Gradio client 在 Python 中调用。下面是针对多 endpoint 演示 Space 的实时示例,无需 token,代码可以直接运行:
from gradio_client import Client
client = Client("ysharma/gr-workflow-multi-endpoint-API")
print(client.predict("hello there friend", api_name="/word_count")) # -> 3
print(client.predict(20, api_name="/fahrenheit")) # -> 68.0
如果 endpoint 调用了模型或 Space,就需要使用 Hugging Face token。因此,创建 client 时请传入 token:
from gradio_client import Client, handle_file
client = Client("ysharma/gr-workflow-image-editor", token="hf_...")
edited = client.predict(
handle_file("dog.jpg"),
"turn it into a snowy winter scene",
api_name="/edited_image",
)
更喜欢直接使用 HTTP?每个 endpoint 也都可以通过 curl 访问:
curl -s https://ysharma-gr-workflow-multi-endpoint-API.hf.space/gradio_api/call/word_count \
-H "Content-Type: application/json" -d '{"data": ["hello there friend"]}'
构建你自己的 workflow
最快的入门方式是打开上面的任意一个演示,点击 Duplicate,然后开始重新连接节点。如果使用 Python,代码可以简化为:
import gradio as gr
def your_function(text: str) -> str:
pass
gr.Workflow(bind=[your_function]).launch()
完整的使用流程、操作符类型、JSON schema 以及可复用模式,请参阅 Gradio 文档中的官方 gr.Workflow 指南。
借助 gr.Workflow,你甚至可以构建像 AUTOMATIC1111 这样复杂的项目。敬请期待我们的下一篇文章,届时我们将一步步带你完成构建。先来一睹为快 😉👇