跳转到内容
主站 新闻 控制台

连接、运行、部署:Gradio 中的 AI 工作流

· Hugging Face
教程模型卡

大多数有趣的 AI 应用都是由多个步骤组成的流水线。你可以先生成一张图片,然后按需抠出背景,或者将其编辑成全新的内容。你可以先写一段脚本,再为它生成语音,或者在保持脚本不变的情况下替换声音。我们通常会用 Python 将这些步骤连接起来,而一旦某个结果看起来不对,就会回到使用 print 调试,找出究竟是哪一步产生了异常值。

直接集成在 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 Spaces 的调用。

由于这是一个工作流,三个输出也分别拥有自己的 REST 端点:/sticker、/voiceover 和 /episode_title。你可以直接从代码中调用任意一个端点,而无需打开 UI。下面的从代码调用部分提供了一个可运行示例。

👉 试用 AI 媒体工作室

并行扩展图片生成

输入一个想法,即可一次性生成一组艺术作品:一张由 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,运行模型,然后释放 GPU。我们并不总是需要依赖 Inference Providers 或现有的 Gradio Spaces。

可以看看这个演示:它使用通过 Diffusers 加载的 Lightricks/LTX-Video,为静态图片制作动画,整个过程只通过一个节点完成。gr.Workflow 无需了解任何 GPU 配置,只需要调用绑定的函数即可。

👉 试用 ZeroGPU 动画工具

工作原理概览

每个工作流都是一张由三类节点组成的图:引用(references)(你的输入)、操作节点(operators)(执行任务的步骤)以及主题(subjects)(你的输出)。操作节点可以是你自己的 Python 函数、Hugging Face Inference Providers 上的模型、另一个 Gradio Space,或者 Hub 数据集中的一行。你只需在类型化端口之间拖动连线,点击运行,然后观察每个结果在对应位置显示出来。

从代码调用

你构建的每个工作流也会自动成为一个 API,无需额外操作。每个输出都会变成一个以其标签命名的 REST 端点,你可以使用 Gradio 客户端从 Python 中调用它。下面是一个针对多端点演示 Space 的实时示例,无需令牌即可直接运行:

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 令牌权限下运行,因此在创建客户端时需要传入令牌:

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 访问:

Terminal window
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 这样复杂的应用。敬请期待我们的下一篇文章,我们将逐步介绍如何构建它。下面先来一睹为快 😉👇