飞书Aily工作流:提示词→生图→进表全自动跑通

在做小红书时,一定会经常有这种需求:有一篇长内容,想拆成几张竖版信息图(封面、内容图、结尾图),每张图风格统一、带标题和副标题,还要能批量生成、集中管理。这一套流程下来还是挺麻烦的。

前段时间,在Twitter上看到宝玉老师分享了一套提示词,大概就是我们把内容发给AI,AI会把输入内容拆解成「小红书风格的系列信息图」,输出每张图的独立生成提示词;然后再用比如Gemini的生图工具,按提示词逐张生成,就能得到一套风格统一的小红书配图。

配图

我试了一下,大概是这样的效果

配图

AI会把每个图片的提示词给我们,然后我们可以复制提示词,再给AI生图工具,帮我们生成图片。比如我把封面图提示词给GPT帮我生成图片。

配图

这个提示词非常厉害,不过这套流程纯手动跑会有点繁琐:先发内容给 AI → 拿到多段 prompt → 再一条条复制到生图工具 ,如果我们需要把图片存起来,还需要自己复制图片和文案,自己整理进表格。

所以我用飞书 Aily工作流把整条链路自动化了:发一段内容给机器人 → 自动拆解成多张卡片的 prompt → 自动生图 → 自动上传到飞书并写入多维表格,表格里直接看到每张卡片的标题、副标题、位置、提示词和缩略图。

这篇文章,就讲讲如何用飞书aily来实现这个自动化流程。

开始之前,先把宝玉老师的提示词share给大家:

如果对工作流不感兴趣的话,可以直接把这套提示词收藏了直接用(可以根据自己需求调整,里面的水印也记得改)

--- 提示词 ---

# 角色定义
你是一位专业的小红书视觉内容策划师,擅长将复杂内容拆解为吸引眼球的卡通风格系列信息图。

# 任务
请分析以下输入内容,将其拆解为 1-10 张小红书风格的系列信息图,并为每张图片输出独立的生成提示词。

# 拆解原则
1. **封面图(第1张)**:必须有强烈视觉冲击力,包含核心标题和吸引点
2. **内容图(中间)**:每张聚焦1个核心观点,信息密度适中
3. **结尾图(最后1张)**:总结/行动号召/金句收尾

# 图片数量判断标准
- 简单观点/单一主题:2-3 张
- 中等复杂度/教程类:4-6 张
- 深度干货/多维度分析:7-10 张

# 视觉风格规范(重要)
## 基础设定
- **图片类型**:信息图(Infographic)
- **方向比例**:竖版,3:4 或 9:16
- **整体风格**:卡通风格、手绘风格

## 背景与配色
- 背景色:莫兰迪色系 / 奶油色 / 米白色 / 浅粉 / 薄荷绿等温柔色调
- 配色柔和统一,符合小红书审美

## 文字风格
- **必须使用手绘风格文字**
- 大标题突出醒目,重点文字加粗放大
- 可使用荧光笔划线效果强调关键词
- 禁止使用写实风格字体

## 装饰元素
- 加入少量简洁的**卡通元素、图标或名人画像**,增强趣味性和视觉记忆
- 可使用:emoji 风格图标、手绘贴纸、便签纸质感、对话气泡等
- 如涉及敏感人物或版权内容,画一个风格相似的卡通替代形象,不要拒绝生成
- **所有图像元素必须是手绘/卡通风格,禁止写实风格图画**

## 排版原则
- 信息精简,突出关键词与核心概念
- 多留白,易于一眼抓住重点
- 要点分条呈现,层次清晰

# 输出格式
对于每张图片,请按以下结构输出:

---
### 第 X 张 / 共 N 张
**图片定位**:[封面图 / 内容图 / 结尾图]
**核心信息**:[这张图要传达的1句话核心]

**文字内容**:
- 主标题:xxx
- 副标题/要点:xxx
- 补充说明(如有):xxx

**视觉提示词**:

小红书风格信息图,竖版(3:4),卡通风格,手绘风格文字,[具体背景色]背景。

[具体内容布局描述]

加入简洁的卡通元素和图标增强趣味性和视觉记忆:[具体元素描述]

整体风格:手绘、可爱、清新,信息精简,多留白,重点突出。所有图像和文字均为手绘风格,无写实元素。 右下角水印:“宝玉”

---

# 语言规则
- 除非特别要求,输出语言与输入内容语言保持一致
- 中文内容使用全角标点符号(“”,。!)

一、先说痛点:内容想配一套图,但操作太碎

上面也讲过,我们需要反复复制黏贴图片的提示词,切换到生图AI工具生成图片,如果你需要归类保存图片,还得切到比如多维表格里去保存。等内容和图片越来越多的时候就比较麻烦,整理成本也高。

所以希望直接把原始内容给AI,AI自动帮我拆提示词,生图,保存到多维表格。类似这样:

配图

*(发送原始内容)*

配图

*(aily生成一套图片)*

配图

*(归类到多维表格)*

二、工作流思路:用 Aily 把「拆解 → 生图 → 入库」串成一条流水线

飞书Aily 是飞书的一款企业级智能体开发平台,围绕大语言模型(LLM)构建,提供 AI 技能编排、知识数据处理、效果调优与持续运营能力,帮助企业高效构建专业智能应用的一个平台。有点类似coze、dify这样的产品。

不过aily目前暂时只能在企业版飞书使用,个人好像只有一点体验额度。

我们先说思路:

可以按「节点」组一条流水线:触发 → LLM → 代码 → 循环 → 外部接口 → 再写回多维表格。整体可以抽象成几步:

1.发一段内容(需要做成系列信息图的长文或提纲)。

2.第一个 LLM 节点:用宝玉老师那套(或你微调过的)提示词,把这段内容拆成「多张小红书风格信息图」的结构化描述(每张有主标题、副标题、位置、画面描述等)。

3.第二个 LLM 节点:只做一件事——把上一步的输出,严格解析成一张张卡片,输出一个 JSON 数组,每项包含:card_index、main_title、position、sub_title、visual_prompt、watermark 等。

4.JS 节点:把 LLM 返回的文本(可能带 markdown 代码块)清洗成标准 JSON,再包成你后面节点好用的结构(例如 { “return”: “{\\”count\\”:5,\\”data\\”:[…]}” })。

5.列表循环:对 data 里每一条卡片执行后续步骤,保证「一张卡片 = 一次生图 + 一次写表」。

6.新增多维表格记录:把获取到的图片的信息字段新增到多维表格里

7.即梦生图节点:用当前卡片的 visual_prompt 调即梦(或你配置的其他生图 API)生成图片,得到图片 URL 。

8.获取飞书 token:调用飞书开放接口拿 tenant_access_token,供后面上传文件、更新多维表格用。

9.JS 节点(上传图片):把当前这张图上传到飞书云文档(通过飞书「上传文件」相关 API),拿到 file_token。

10.更新多维表格记录:为当前卡片新增一条记录(或先批量新增再批量更新),字段包括:card_index、main_title、position、sub_title、visual_prompt、watermark,以及附件字段里写入上一步拿到的 file_token,这样表格里就能直接看到缩略图。

这样,一次发消息 → 自动得到一张表,表里每一行就是一张信息图的所有元数据 + 生成的图,和你提供的「多维表格样式」一致(封面图、内容图、结尾图、主标题、副标题、提示词、水印、图片预览)。

配图

三、Aily 工作流配置

下面看看每个节点的具体配置和效果。

节点1:触发 + 第一次 LLM(把内容拆成「多张信息图」描述)

触发:用「接收飞书消息」或「机器人被 @」等,把用户发的那一段内容作为输入。

第一个 LLM 节点

  • 作用:用宝玉老师那套「小红书风格系列信息图」的完整提示词,让模型把这段内容拆成多张卡片,每张包含:主标题、副标题、位置(封面图/内容图/结尾图)、详细的画面描述。
  • 输入:触发节点带来的「用户消息」或「用户上传的文本」。
  • 输出:一段自然段 + 列表形式的多张卡片描述即可,不强制 JSON;下一步再专门做「抽成 JSON」。
配图

我们点击运行调试一下,LLM输出的就是每张图片的信息及提示词,不过它输出的是一整段字符串。

配图

节点2:第二次 LLM(从描述中抽出 JSON 数组)

因为我们得到的是一个大的字符串,这个没有办法直接给AI去分别生成图片,所以需要做进一步的加工处理

我们再来一个LLM节点,让AI来帮我们做信息抽取,读上一步的 LLM 输出,把里面每一张卡片的信息提取出来,输出一个 JSON 数组,不做多余解释。

配图

提示词示例:

# Role
你是一个高效率的数据解析助手,擅长将 Markdown 格式的文案策划案转换为精确的 JSON 结构化数据。

# Task
请分析输入的内容,将其中的每一张卡片信息提取出来,输出为一个 JSON 数组。

# Input Data
{{var1}}

# Extraction Rules
1. **card_index**: 提取“第 X 张 / 共 N 张”中的数字,例如 "1/5"。
2. **position**: 提取“图片定位”,如“封面图”、“内容图”或“结尾图”。
3. **main_title**: 提取文字内容中的“主标题”。
4. **sub_title**: 提取文字内容中的“副标题/要点”。
5. **visual_prompt**: 提取 ``` 代码块中的全部文字。**注意:**只需提取代码块内部的提示词内容,不要包含 ``` 符号本身。
6. **watermark**: 固定提取为 "宝玉"。

# Output Format (MUST BE JSON ONLY)
请直接输出 JSON 数组,不要包含任何 Markdown 标记(如 ```json)或多余的解释文字。

示例结构:
[
  {
    "card_index": "1/5",
    "position": "封面图",
    "main_title": "主标题内容",
    "sub_title": "副标题内容",
    "visual_prompt": "视觉提示词全段..."
  }
]

每个元素都包含了:card_index, main_title, position, sub_title, visual_prompt…这样我们后面就可以稳定地用代码解析一个数组,而不需要从长文中再猜哪一段是第几张图。

节点3:JS 节点(格式加工,得到统一结构)

配图

这个节点作用主要是:把上游 LLM 输出的「一串文本」洗成干净、可循环的 JSON,并修掉截断、过滤掉无效卡片,方便后面的「列表循环」和「即梦生图」稳定跑。相当于「格式 + 质量」的中间层。

module.exports = async function main(arg1) {
    // 1. 获取输入数据(假设上游节点输出名为 response)
    let rawStr = "";
    if (arg1 && arg1.response) {
        rawStr = arg1.response.trim();
    } else if (typeof arg1 === 'string') {
        rawStr = arg1.trim();
    }

    logger.info("开始解析原始数据,长度:" + rawStr.length);

    let dataList = [];

    try {
        // 2. 容错处理:修复截断的 JSON
        let processedStr = rawStr;

        // 如果字符串不是以 ] 结尾,说明被截断了
        if (!processedStr.endsWith(']')) {
            // 找到最后一个完整的对象结束符号 }
            const lastBraceIndex = processedStr.lastIndexOf('}');
            if (lastBraceIndex !== -1) {
                // 截取到最后一个完整的对象,并手动补全数组闭合符号
                processedStr = processedStr.substring(0, lastBraceIndex + 1) + ']';
                logger.warn("检测到 JSON 截断,已自动修剪并补全");
            } else {
                // 如果连一个 } 都没有,尝试寻找数组开始符号
                if (!processedStr.startsWith('[')) processedStr = '[' + processedStr;
                if (!processedStr.endsWith(']')) processedStr = processedStr + ']';
            }
        }

        // 3. 执行解析
        dataList = JSON.parse(processedStr);
    } catch (e) {
        logger.error("JSON 解析失败: " + e.message);
        // 如果解析彻底失败,尝试正则提取(备用方案)
        dataList = [];
    }

    // 4. 数据清洗:确保每个条目都有 visual_prompt,且内容基本完整
    const validList = dataList.filter(item => {
        return item.visual_prompt && item.visual_prompt.length > 20;
    });

    logger.info(`清洗完成。原始条目数: ${dataList.length}, 有效条目数: ${validList.length}`);

    // 5. 返回结果给下游 Loop 节点
    // 注意:Aily 要求返回一个对象,我们将数组放在 data 字段中
    return {
        data: validList,
        count: validList.length,
        is_truncated: !rawStr.endsWith(']')
    }; 
}

节点4:列表循环(按卡片逐张处理)

配图

这个节点,主要是对「格式加工」后的 data 数组做逐项循环,这样后续的「即梦生图」「上传图片」「更新多维表格」都会按卡片执行,每张卡片一条记录。

输入的数据,要选择上一步 JS 输出的 data。

配图

节点5:多维表格新增记录

配图

这一步我们用aily里的多维表格节点,选择新增记录操作。

目的就是把拆分后的图片信息和单图提示词信息写入到多维表格里。

实际上就是这一部分:

配图

后面我们再分别去根据单图的prompt来生成图片。

节点6:即梦生图节点

aily里内置了即梦生图的节点,可以直接用即梦的能力来生成图片。

这个就很好,不用单独去付费,费用都涵盖在aily里了。

配图

生图的提示词,就是我们循环的前项的visual_prompt。

图片尺寸、参考图片和生图数量,就根据实际需求来选择。

运行后,图片就可以正常生成了。

配图

我们看生成的结果,实际上是一串url。

节点7:获取飞书 token

使用http节点,调用飞书 tenant_access_token 接口,拿到 token,供「上传文件」和「更新多维表格」用。

配图

app_id和app_secret在飞书开放平台注册的应用中获取。

节点8:JS 节点(上传图片并拿到 file_token)

这个节点,说实话我被卡住了很久。

因为即梦节点输出的是一个图片url,但是上传到多维表格里,官方是需要一个file_token。这个转换,一直不知道怎么搞。试了很多aily里的节点,也试过把url转为图片二进制,都不成。

然后我看了一篇官方的指引介绍:

是需要调用素材上传的接口才可以。

索性就按官方指引,用js节点来搞定吧。

配图

代码如下:

const axios = require('axios');
const FormData = require('form-data');

module.exports = async function main(imageUrl, token, baseToken) {
  // 注意:根据你的截图,输入参数 'urls' 是一个字符串链接。
  // 为了代码清晰,我把入参名改为了 imageUrl (在Aily界面上你不需要改变量名,只需要知道它是那个链接字符串)
  // 如果你的Aily入参名必须叫 urls,请确保传入的是单个 URL 字符串。

  logger.info("开始处理图片链接: " + imageUrl);

  let imageBuffer = null;
  let attachments = [];

  // 1. 下载图片流
  try {
    const response = await axios({
      url: imageUrl, // 直接使用传入的字符串链接
      method: 'GET',
      responseType: 'arraybuffer',
    });
    imageBuffer = Buffer.from(response.data);
  } catch (error) {
    logger.error("图片下载失败: " + error.message);
    return []; // 下载失败直接返回空
  }

  if (!imageBuffer) {
    logger.error("图片 Buffer 为空");
    return [];
  }

  // 2. 组装上传数据
  const bufferSize = imageBuffer.byteLength;
  const formData = new FormData();

  // 必须参数
  formData.append('file_name', 'image.png'); // 设置一个默认文件名
  formData.append('parent_type', 'bitable_image'); 
  formData.append('parent_node', baseToken); 
  formData.append('size', bufferSize);

  // 【关键修复】上传 Buffer 时,必须在第三个参数指定文件名,否则会报 name undefined 错误
  formData.append('file', imageBuffer, { filename: 'image.png', contentType: 'image/png' });

  // 3. 上传到飞书
  let fileResult = { "file_token": "" };

  try {
    const uploadConfig = {
      method: 'post',
      url: 'https://open.feishu.cn/open-apis/drive/v1/medias/upload_all',
      headers: { 
        'Authorization': `Bearer ${token}`, 
        // 【关键修复】直接使用 formData 生成的 headers,不要手动写 boundary
        ...formData.getHeaders()
      },
      data: formData
    };

    const response = await axios(uploadConfig);

    // 检查业务状态码
    if (response.data && response.data.code === 0) {
        logger.info("上传成功: " + JSON.stringify(response.data));
        fileResult.file_token = response.data.data.file_token;
        attachments.push(fileResult);
    } else {
        logger.error("飞书接口返回错误: " + JSON.stringify(response.data));
    }

  } catch (error) {
     if (error.response) {
       logger.error('上传请求失败 status:', error.response.status);
       logger.error('上传请求失败 data:', JSON.stringify(error.response.data));
     } else {
       logger.error('上传过程错误:', error.message);
     }
  }

  // 返回格式需符合多维表格附件单元格的要求(通常是一个包含 file_token 的对象数组)
  return attachments;
}

这个节点的核心就是把当前这张生成的图片上传到飞书云文档,拿到 file_token。

所以流程是:

1.用飞书「上传文件」 API( https://open.feishu.cn/open-apis/drive/v1/medias/upload_all 等,把当前图片以「文件」形式上传。

2.响应里取出 file_token。

最后我们得到的就是这一串内容。

配图

这样,每张卡片在循环里都会得到自己的一个 file_token,再写进多维表格对应行的附件字段。

节点9:更新多维表格(写入一条记录,带附件)

刚才新增多维表格记录的时候,我们已经配置好了字段,并且把基本信息传到表格了,现在需要把获取到的图片更新到对应的行里。

所以这个节点就用多维表格节点,选择更新记录

配图

这里的核心就是为当前卡片在目标多维表格中新增一条记录,把当前循环项的这张图的 file_token 写进去。

所以数据表列字段内容,和多维表格对应的image字段,要选择上个节点output出来的 file_token ,也就是{{ JavaScript_3.return }}

这样,跑完一轮循环后,多维表格里就会出现多行,每行对应一张信息图,且带缩略图预览,样式就和你提供的表格示例一致(card_index、main_title、position、sub_title、visual_prompt、watermark、image)。

配图

以上就是aily的一整套流程了,最后,我们可以把这个工作流,发布为一个应用机器人,这样,在飞书里找到这个机器人,我们就可以直接使用了。

「提示词 → 多张 prompt → 多张图 → 进表」从多步手动变成一条 Aily 流水线,既保留宝玉老师提示词的效果,又避免反复复制粘贴和整理表格。

不过使用飞书aily的直观感受是:有点难。

说是低代码吧,好像配置化的能力又不是那么的强。

说是写代码吧,好像很多地方又需要去配置。

尤其是对数据格式的适配和处理,经常搞了好久还是会出问题,不断的去调试调试。

对于用惯了n8n,或者coze的人来说,上手还是有点复杂。


📋 这套AI生图相关模板,我整理成模板了

跟着上面步骤搭要花点时间。想直接拿现成的改,加我微信备注「AI生图」,我发你。

🤔 卡在某一步了?

搭建过程里如果哪一步卡住了,如果你照着做没跑通,或者你们公司情况不太一样,可以找我聊聊,我免费帮你看看怎么调。不合适我也会直说。

加吨师傅微信咨询飞书多维表格搭建

扫码加我,备注「AI生图」领模板

想看更多这类方案,我都整理在 吨师傅工具箱 里了:客户管理、进销存、工单报修……按场景分好类,可以直接抄。

相关阅读

滚动至顶部