跳到主要内容

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,进入到容器

3. 运行N8N

  • 新开一个终端窗口

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

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

4. 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
  • 运行成功后,请不要关闭该终端。

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,然后进入到文件中

  • 将以下代码写入到 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文件

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

注意

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

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

执行隧道代理

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

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

配置N8N的工作流信息

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

  • 创建新的工作流

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

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

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

    • Appid:cli_a9baf2386f79dcb2

    • AppSecret:rYBEyhUOudKrC17FYTICZgAoYIeL7n5U

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

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

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

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

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

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

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

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

  • 创建访问凭证,配置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
  • 由于导入节点的时候,已经默认配置好了,无需调整。

执行N8N的工作流

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

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

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