大多数有意思的 AI 应用都是流水线。你生成一张图片,然后按需抠掉背景,或者把它编辑成别的样子。你写一段脚本,然后为它生成配音,或者在保持脚本不变的情况下更换声音。我们通常用 Python 把这些步骤串起来,而一旦哪里看起来不对劲,就得回头靠 print 调试,找出是哪一步产生了奇怪的值。
内置于 Gradio 的 gr.Workflow 让流水线本身成为界面。你把各个步骤描述成由带类型节点组成的图,Gradio 则提供一块可拖拽的画布,其中每个节点都可运行,每个中间结果都清晰可见。同一张图同时也是一个 REST API,并且可以一条命令部署到 Hugging Face Spaces。
理解这个理念的最好办法,是看几个实际的工作流。下面的每个应用都是一个线上的 Huggingface 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 节点。这就是扇出模式的实际应用:一个想法可以同时输入多个算子,全部并行生成。
分析 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 配置,它只是调用所绑定的函数。
工作原理简述
每个工作流都是一张包含三类节点的图:引用(references)(你的输入)、算子(operators)(执行工作的步骤)和主体(subjects)(你的输出)。算子可以是你自己的 Python 函数、Hugging Face Inference Providers 上的模型、另一个 Gradio Space,或者 Hub 数据集中的一行。你通过在带类型的端口之间拖拽来连接它们,点击运行,然后看着每个结果就地显示出来。
从代码中调用
你构建的每个工作流同时也是一个 API,无需额外工作。每个输出都会成为以其标签命名的 REST 端点,你可以用 Gradio 客户端从 Python 调用它。下面是针对多端点演示 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
调用模型或 Space 的端点需要在 Hugging Face 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?每个端点也都可以通过 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"]}'
构建你自己的工作流
最快的上手方式是打开上面任意一个演示,点击 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 这样复杂的东西。请留意我们的下一篇文章,我们将逐步演示如何构建它。这里先抢先看一眼 😉👇
