跳到主要内容
feedback
feedback

N8N 实操指南

一、工作流说明以及材料准备

介绍

这是一个基于 n8n 编排的全链路 AIGC 工作流,实现了从“一个创意”到“一篇完整图文笔记”的端到端自动化。

  • 极简触发:通过 n8n Form 表单,您只需输入“昵称”和“想要的主题”(如“深圳打卡”),即可一键启动。

  • 文案与生图 Prompt 的生成:调用本地部署的文本大模型(Qwen3-4B),模拟小红书博主语气,生成包含 Emoji、分段清晰、热门标签的爆款文案,并根据文案内容自动提炼并生成专属于该笔记的中文绘画提示词

  • 生图闭环:自动调用本地生图模型(Z-Image-Turbo),将提示词转化为高分辨率的封面图。

  • 数据归档:将生成的标题、正文、图片附件自动回写至飞书多维表格,形成结构化的内容资产库。

涵盖知识点

通过本案例你将学到以下知识点
  • vllm 部署文本模型 -Qwen3-4B

  • diffusers 部署生图模型 - Z-Image-Turbo

  • api 调用云端模型的模型

  • 利用 N8N 编排文本模型和生图模型制作小红书笔记

材料准备

本案例所需的材料

  • 显卡型号:沐曦 C500 - 64G

  • 镜像:N8N/vllm:0.10.2/Python 3.10 /maca 3.2.1.7

  • 飞书表格所需应用凭证 ID,如果您想使用自己的飞书表格请参考飞书开发者配置

凭证信息
  • ID:cli_a9baf2386f79dcb2

  • Secret:rYBEyhUOudKrC17FYTICZgAoYIeL7n5U

若您选择使用我们提供的飞书应用凭证 id 和 secret,最后可以在该互联网公开的飞书多维表格中查看您执行工作流后得到的结果:自动化生成小红书图文案例,也可以选择自行创建飞书企业自建应用和多维表格,在工作流中使用您自己的凭证,将执行结果写回您的飞书多维表格中

飞书多维表格示例

提示

工作流中调用的大模型,可根据您的喜好切换,教程中只演示了 Qwen3-4B 和 Z-Image-Turbo,但您可发挥创意,自行在算力容器内部署大模型并完成调用,制造你的专属工作流

二、详细教程演示

1. 选择算力租用

文档中的演示均在曦云 C500 64G 卡中进行,镜像选择 N8N/vllm:0.10.2/Python 3.10 /maca 3.2.1.7

算力租用选择

镜像选择

2. 进入容器

  • 回到工作台点击 JupyterLab,进入到容器

进入 JupyterLab 容器

3. 运行 N8N

  • 新开一个终端窗口

新建终端窗口

  • 运行 N8N(N8N 端口已默认设置为 8188)

运行 N8N 服务

  • 运行成功后,请不要关闭该终端。

N8N 运行成功

4. vllm 部署 Qwen3-4B

  • 新开一个终端窗口,使用 vllm 部署 Qwen3-4B

vllm 部署 Qwen3-4B

  • 在终端命令行运行以下代码
# 计算逻辑:我们希望 vLLM 占用约 12GB 显存。
# 12GB / 64GB ≈ 0.19,所以我们将利用率设为 0.2 (20%)
# --max-model-len 4096 限制上下文长度,防止长文案撑爆显存
# vllm部署Qwen3-4B
vllm serve /mnt/moark-models/Qwen3-4B \
--port 8001 \
--dtype bfloat16 \
--gpu-memory-utilization 0.2 \
--max-model-len 4096 \
--trust-remote-code
  • 运行成功后,请不要关闭该终端。

vllm 运行成功

5. Diffusers + Fastapi 部署 Z-Image-Turbo

💡首先:在环境中安装依赖:

  • pip install fastapi uvicorn transformers torch pillow accelerate diffusers

下载完后:执行该命令:sed -i '71 s/from flash_attn.flash_attn_interface import _wrapped_flash_attn_backward, _wrapped_flash_attn_forward/from flash_attn.flash_attn_interface import _flash_attn_backward as _wrapped_flash_attn_backward, _flash_attn_forward as _wrapped_flash_attn_forward/' /opt/conda/lib/python3.10/site-packages/diffusers/models/attention_dispatch.py

备注

解决 flash_attn 版本兼容问题,让 diffusers 能适配新版 flash_attn,避免「导入不存在的函数」报错

其次,新建一个 python 文件:

  • 在 jupyter 文件目录处,点击右键,选择"New Python File"创建一个新的 python 文件,并重命名为 main.py,然后进入到文件中

新建 Python 文件

打开 main.py 文件

  • 将以下代码写入到 main.py 文件中,进行保存
import io
import sys
import torch
import uvicorn
from fastapi import FastAPI, HTTPException
from fastapi.responses import Response
from pydantic import BaseModel
from typing import Optional
from diffusers import ZImagePipeline

app = FastAPI(title="Z-Image-Turbo Generation API")
MODEL_PATH = "/mnt/moark-models/Z-Image-Turbo"
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

pipe = None

# 定义宽高比映射
ASPECT_RATIOS = {
"1:1": (1024, 1024),
"16:9": (1280, 720),
"9:16": (720, 1280),
"4:3": (1152, 864),
"3:4": (864, 1152),
}

@app.on_event("startup")
def load_model():
global pipe
try:
print(f"正在加载模型: {MODEL_PATH} ...")
pipe = ZImagePipeline.from_pretrained(
MODEL_PATH,
torch_dtype=torch.bfloat16 if DEVICE == "cuda" else torch.float32,
low_cpu_mem_usage=False,
)
pipe.to(DEVICE)
print("✅ 模型加载成功!")
except Exception as e:
print(f"❌ 模型加载失败: {e}")
sys.exit(1)

class GenerateRequest(BaseModel):
prompt: str
ratio: Optional[str] = None
width: Optional[int] = None
height: Optional[int] = None
steps: int = 9 # Z-Image-Turbo 推荐 4-10 步
cfg: float = 0.0 # Z-Image-Turbo 必须很低
seed: int = 42

@app.post("/generate")
def generate(req: GenerateRequest):
global pipe
if pipe is None:
raise HTTPException(status_code=500, detail="Model not loaded")

try:
# 1. 处理分辨率逻辑:优先看有没有 ratio,没有再看 width/height
final_width = 1024
final_height = 1024

if req.ratio and req.ratio in ASPECT_RATIOS:
final_width, final_height = ASPECT_RATIOS[req.ratio]
print(f"使用宽高比预设: {req.ratio} -> {final_width}x{final_height}")
elif req.width and req.height:
final_width = req.width
final_height = req.height

real_cfg = 0.0 # 强制优化:Turbo 模型推荐 0 CFG

# Turbo 模型一般 9 步就收敛了。这里我们尊重用户输入,但你可以根据效果自行裁剪。

print(f"生成请求: {req.prompt[:30]}... | {final_width}x{final_height} | Steps: {req.steps}")

generator = torch.Generator(device=DEVICE).manual_seed(req.seed)

image = pipe(
prompt=req.prompt,
height=final_height,
width=final_width,
num_inference_steps=req.steps,
guidance_scale=real_cfg, # 这强制改成 0
generator=generator,
).images[0]

img_byte_arr = io.BytesIO()
image.save(img_byte_arr, format='PNG')
img_bytes = img_byte_arr.getvalue()
torch.cuda.empty_cache()

return Response(content=img_bytes, media_type="image/png")

except Exception as e:
print(f"❌ 生成出错: {e}")
import traceback
traceback.print_exc()
raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
  • 新开一个终端窗口,运行 main.py 文件

运行 main.py

生图服务运行成功

运行成功后,请不要关闭该终端。

注意

这段代码不要在 jupyter notebook 中直接运行,会导致 Asyncio 事件循环冲突,将代码保存为一个 py 文件,在终端中使用python命令运行即可

6. 在本地访问云端部署的 N8N 服务

执行隧道代理

  • 访问云端的 web 服务,首先需要进行隧道代理,具体流程请参考建立隧道代理

隧道代理命令可在此复制:

SSH 隧道代理命令

配置 N8N 的工作流信息

创建账号并导入工作流节点
  • 创建账号:

创建 N8N 账号

  • 创建新的工作流

创建新工作流

配置飞书节点
  • 下载飞书节点

下载飞书节点插件

安装飞书节点

飞书节点安装完成

  • 进入到飞书节点,点击"Create new credential"创建应用凭证信息

创建飞书应用凭证

  • 选择"应用级别凭证",本次活动的共享文档的应用信息 (您也可以填入自己的文档信息)

    • Appid:cli_a9baf2386f79dcb2

    • AppSecret:rYBEyhUOudKrC17FYTICZgAoYIeL7n5U

配置飞书应用信息

凭证保存成功

配置完成后点击"save",会提示保存成功

  • 输入飞书表格所需的信息

    • 应用级别凭证:选择刚刚新增的凭证

    • Resource:下拉选择"多维表格"

    • Operation:下拉选择"解析多为表格地址"

    • 多维度表格地址:不需要调整,已经默认配置好,从上一个节点获取

配置飞书表格信息

配置 OpenAI Chat model 节点
  • 返回到工作流,配置 OpenAI Chat model 节点

找到 OpenAI Chat model 节点,双击进入节点

OpenAI Chat model 节点

配置 Chat model 节点

创建访问凭证

配置 API 信息

  • 创建访问凭证,配置 Qwen3-4B 的接口信息

点击"Create new credential","Base URL"输入http://localhost:8001/v1,"API Key"因为是必填项,随便输入即可,然后点击"save"

  • Model 的配置

选择"By ID",输入/mnt/moark-models/Qwen3-4B

配置 HTTP 节点访问 Z-Image-Turbo
  • 由于导入节点的时候,已经默认配置好了,无需调整。

HTTP 节点配置

执行 N8N 的工作流

  • 填写你想要生成的小红书主题内容

填写小红书主题

表单填写示例

  • 返回到工作流界面,点击"Execute workflow"。

执行后请稍等片刻,后续可在自动化生成小红书图文案例找到您生成的小红书笔记

执行 N8N 工作流