大多數有趣的 AI 應用都是由多個步驟組成的管線。例如,你可以先生成一張圖片,然後選擇去背或編輯成新的內容;或者撰寫一段腳本,接著為其生成語音,或在保留腳本的同時替換語音。我們通常在 Python 中將這些步驟串接起來,一旦發現任何異常,就必須回到程式碼中進行除錯,以找出是哪個步驟產生了錯誤的值。
\n\nGradio 內建的 gr.Workflow 功能,將管線本身轉化為直觀的介面。你只需將各個步驟描述為帶有型別的節點圖,Gradio 便會提供一個拖放式畫布,讓每個節點都能執行,並且所有中間結果都清晰可見。這個圖形不僅是一個互動介面,同時也是一個 REST API,並能一鍵部署到 Hugging Face Spaces。
\n\n要理解 gr.Workflow 的概念,最好的方式就是實際看看幾個工作流程的運作。以下每個應用都是一個即時的 Hugging Face Space,你可以開啟、執行並複製它們。\n\n上傳一張圖片,輸入編輯指令(例如「變成下雪的冬日場景」、「加上太陽眼鏡」、「把車子變紅色」),就能獲得編輯後的照片。
整個應用程式只是一個節點,透過 Hugging Face Inference Providers 呼叫 Qwen-Image-Edit 模型。\n\n一個圖形,三條管線。你可以從一個提示詞開始,使用 FLUX 生成一張圖片,然後將其傳遞給一個去背的 Gradio Space,將其變成貼圖。
同時,一個主題可以透過文字轉語音的 Gradio Space 變成旁白,而同一個主題也能透過大型語言模型(LLM)呼叫生成一個引人入勝的節目標題。這僅需一個畫布,包含兩次透過 Hugging Face Inference Providers 呼叫模型,以及兩次呼叫 Gradio Spaces。
由於這是一個工作流程,這三個輸出各自擁有獨立的 REST 端點:/sticker、/voiceover 和 /episode_title,你可以直接從程式碼中呼叫它們,無需開啟使用者介面。請參閱下方的「從程式碼呼叫」部分以獲取可執行的範例。
\n\n輸入一個想法,它會立即轉化為一系列生成的藝術作品:一張來自 FLUX 的基礎圖片,兩個 AI 重新想像的版本(一個柔和的水彩風格和一個霓虹龐克風格),以及一個由 LLM 撰寫的畫廊標題。每張圖片都由模型節點直接從提示詞生成,並透過 Inference Providers 運作,而標題則來自一個呼叫 LLM 的 fn 節點。
這就是扇出(fan-out)模式的實際應用:一個想法可以同時饋送多個運算子,全部平行生成。\n\n輸入一個 Hugging Face 資料集 ID,例如 stanfordnlp/imdb 或 mteb/tweet_sentiment_extraction,單一輸入會扇出到四個運算子節點,這些節點使用 Datasets Server API 即時分析資料集。
你會獲得一個概覽卡片、前幾行的預覽、每列的統計數據以及一個分佈圖,所有這些都獨立且平行地計算。這就是工作流程的強大之處!\n\n到目前為止,每個節點都與 Hugging Face 互動。但 fn 節點本質上就是 Python 程式碼,這意味著它也能在 Space 內部於 GPU 上執行模型。
只需使用 @spaces.GPU 裝飾綁定的函數,當節點執行時,ZeroGPU 就會為該呼叫分配一個 GPU,執行模型後再釋放。我們不總是需要依賴 Inference Providers 或現有的 Gradio Spaces。請查看這個示範,它使用透過 Diffusers 載入的 Lightricks/LTX-Video 來為靜態圖片製作動畫,整個過程僅透過一個節點完成。
gr.Workflow 無需了解你的 GPU 設定,它只會簡單地呼叫綁定的函數。\n\n每個工作流程都是一個圖形,包含三種類型的節點:參考(你的輸入)、運算子(執行工作的步驟)和主體(你的輸出)。運算子可以是你的 Python 函數、Hugging Face Inference Providers 上的模型、另一個 Gradio Space,或是來自 Hub 資料集的一列資料。
你只需透過拖曳連接帶有型別的連接埠,點擊「執行」,就能看到每個結果即時顯示。\n\n你建立的每個工作流程,無需額外工作,本身就是一個 API。每個輸出都會成為一個以其標籤命名的 REST 端點,你可以使用 Gradio client 從 Python 呼叫它。
以下是一個針對多端點示範 Space 的即時、無需 token 的範例,完全按原樣呈現:\nfrom gradio_client import Client\n\nclient = Client("ysharma/gr-workflow-multi-endpoint-API")\n\nprint(client.predict("hello there friend", api_name="/word_count")) # -> 3\nprint(client.predict(20, api_name="/fahrenheit")) # -> 68.0\n\n呼叫模型或 Space 的端點需要 Hugging Face token 才能執行,因此在建立 client 時請傳入 token:\nfrom gradio_client import Client, handle_file\n\nclient = Client("ysharma/gr-workflow-image-editor", token="hf_...")\n\nedited = client.predict(\n handle_file("dog.jpg"),\n "turn it into a snowy winter scene",\n api_name="/edited_image"\n)\n\n偏好純 HTTP 請求?
每個端點也可以透過 curl 存取:\ncurl -s https://ysharma-gr-workflow-multi-endpoint-API.hf.space/gradio_api/call/word_count \\\n -H "Content-Type: application/json" -d '{"data": ["hello there friend"]}'\n\n最快入門的方式是開啟上方任何一個示範,點擊「複製」(Duplicate),然後開始重新連接。
從 Python 程式碼來看,它也非常簡潔:\nimport gradio as gr\n\ndef your_function(text: str) -> str:\n pass\n\ngr.Workflow(bind=[your_function]).launch()\n\n如需完整的教學、運算子類型、JSON schema 和可重複使用的模式,請參閱 Gradio 文件中官方的 gr.Workflow 指南。
你甚至可以使用 gr.Workflow 建立像 AUTOMATIC1111 這樣複雜的應用。請留意我們的下一篇文章,我們將逐步引導你如何建構它。這裡先提供一個搶先看 😉👇



