全部產品
Search
文件中心

Platform For AI:在Dify調用EAS部署的ComfyUI服務

更新時間:Feb 13, 2026

通過將PAI-EAS部署的萬相(ComfyUI)服務作為工具整合到Dify,可以將複雜的創作流程自動化。本文將介紹服務的部署與整合,實現從文本到多媒體內容的端到端產生。

方案概述

本方案的核心是利用Dify作為應用編排器,調用部署在PAI-EAS上的ComfyUI推理服務。ComfyUI的推理任務是非同步執行的,因此整個調用鏈路如下:

  1. 提交任務:Dify向EAS服務發送一個POST請求,請求體中包含ComfyUI工作流程的JSON描述。EAS接收任務後,會立即返回一個唯一的prompt_id

  2. 輪詢狀態:Dify使用上一步擷取的prompt_id,通過GET請求迴圈查詢(輪詢)任務的執行狀態。EAS會返回任務是否完成、成功或失敗等資訊。

  3. 擷取結果:判斷任務成功執行後,再次發起GET請求獲得最終結果,其中包含了組建檔案在OSS上的檔案名稱。Dify將檔案名稱與OSS訪問地址拼接,最終向使用者展示完整的圖片或視頻連結。

完整工作流程樣本如下:

image

步驟一:(可選)部署Dify

說明

若已有Dify環境,可跳過本節。本文以計算巢部署Dify社區單機版為例。

  1. 進入計算巢Dify社區版服務詳情頁,單擊開始部署

  2. 根據需求選擇配置。對於基礎示範,可選擇單機版模板,執行個體類型選擇ecs.u1-c1m2.xlarge,並設定執行個體密碼,選擇一個可用性區域。

  3. 單擊下一步:確認訂單,在跳轉頁面單擊立即建立

  4. 服務部署完成後,單擊詳情,在概覽頁簽的立即使用地區,找到dify訪問連結。註冊帳號後登入就能建立dify應用。image

步驟二:部署萬相ComfyUI

  1. 進入ModelGallery,在搜尋方塊中輸入萬相2.1-文生視頻-1.3B,單擊卡片進入模型詳情頁。

  2. 單擊右上方部署,在配置頁面進行以下設定,其餘保持預設。

    • 部署方式:選擇ComfyUI > 標準部署

    • 服務配置:在JSON編輯器中,配置storage.oss.path參數,將其值修改為實際的OSS路徑(例如:oss://examplebucket/wan)。此路徑將作為ComfyUI的工作目錄用於存放產生的內容。關於OSS操作,請參見OSS控制台快速入門image

  3. 單擊部署。等待約3分鐘,當服務狀態變為運行中,表示部署成功。

  4. 服務詳情頁單擊查看調用資訊。擷取EAS服務的公網調用地址和Token,用於在Dify中調用服務。

    image

步驟三:建立Dify應用

在Dify匯入樣本DSL檔案wan-comfyui-dify.yml,本文以此說明調用ComfyUI的關鍵節點設定。

image

1. 設定環境變數

  • OSS_URL:組建檔案的訪問路徑。本文ComfyUI工作目錄為oss://examplebucket/wan,因此設為https://examplebucket.oss-cn-hangzhou.aliyuncs.com/wan/output。其中oss-cn-hangzhou.aliyuncs.com為OSS杭州的外網Endpoint,其他地區請參見地區和Endpoint

  • EAS_Token:步驟二中擷取的服務Token。

  • EAS_URL:步驟二中擷取的服務公網調用地址。

image

2. 開始節點設定輸入變數

將正反向提示詞等動態參數設為變數,供每次調用時輸入。

dify開始節點

3. 配置POST請求(擷取Prompt ID)

3.1 佈建要求地址

在EAS_URL後追加/prompt構成POST請求地址。

image

3.2 構造並發起POST請求

配置URL、HEADERS與BODY。其中BODY為匯出的ComfyUI工作流程JSON(建立及匯出參見通過WebUI使用),並將需要動態修改的參數(如提示詞、種子數等)替換為Dify中的變數。

post請求

3.3 擷取Prompt ID

從返回結果中提取prompt_id,用於後續輪詢結果。

def main(arg: str) -> dict:
    data = json.loads(arg)
    return {"result": data["prompt_id"]}

image

4. 配置輪詢邏輯(擷取推理結果)

使用prompt_id迴圈發起GET請求,檢查任務狀態。

4.1 佈建要求地址

在EAS_URL後追加history/<prompt_id>構成GET請求地址。其中<prompt_id>為上一步的結果。

image

4.2 根據prompt_id發起GET請求

image

4.3 延時等待

在每次輪詢之間插入一個代碼節點,執行time.sleep(12)等操作,以避免過於頻繁的請求。

import time

def main()-> dict:
    time.sleep(12)
    return {
        "result": ""
    }

image

4.4 判斷執行結束

返回結果中有prompt_id表示推理已完成。

image

5. 拼接檔案地址並展示結果

任務完成後,從最終的輪詢結果中提取檔案名稱,並與環境變數中的OSS_URL拼接,形成可公開訪問的檔案連結,並在Dify的“結束”節點中展示。

5.1 擷取推理結果

該節點配置與4.2的節點配置相同。

image

5.2 提取檔案名稱

import json

def main(input_str: str) -> dict:
    data = json.loads(input_str)
    images = []
    image_names = []
    first_key = next(iter(data))
    status = data[first_key]["status"]
    
    if status["completed"] and status["status_str"] == "success":
        images = data[first_key]["outputs"]["28"]["images"]
    
    for img in images:
        image_names.append(img["filename"])
    
    # 將列錶轉換為字串
    image_names_str = ",".join(image_names)
    
    return {
        "result": image_names_str,
    }

image

5.3 拼接檔案訪問地址

將檔案名稱拼接至OSS_URL,形成可訪問的公網連結,並在Dify應用結果中展示。

重要

需確保OSS bucket已設定為公用讀取許可權,詳情見Bucket ACL

image

檔案地址

步驟四:測試應用

在Dify單擊右上方預覽,輸入正反向提示詞,對話方塊中輸入1(工作流程未使用該欄位,可隨意輸入),發送之後,等待視頻產生。

測試結果

生產應用建議

  • 安全性:在生產環境中,將OSS Bucket設定為公用讀取存在資料安全風險。建議限制只允許特定IP或VPC訪問,詳情見Bucket Policy

  • 穩定性與成本:合理設定輪詢的等待時間。過短的間隔會增加API調用次數和伺服器負載,可能產生不必要的費用;過長的間隔則會增加使用者的等待時間。建議根據您任務的平均耗時進行調整。

常見問題

  1. 為什麼無法訪問產生的圖片或視頻連結?

    請檢查以下幾點:

    • OSS Bucket是否已設定為公用讀取許可權。

    • 在Dify中配置的OSS_URL環境變數是否正確,特別是OSS訪問網域名稱是否與Bucket所在地區匹配。

  2. 工作流程一直卡在輪詢步驟怎麼辦?

    這通常意味著EAS服務端的任務未能成功完成。請登入PAI控制台,查看對應EAS服務的即時日誌,排查是否有執行階段錯誤。