在做小红书时,一定会经常有这种需求:有一篇长内容,想拆成几张竖版信息图(封面、内容图、结尾图),每张图风格统一、带标题和副标题,还要能批量生成、集中管理。这一套流程下来还是挺麻烦的。
前段时间,在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生图」领模板
想看更多这类方案,我都整理在 吨师傅工具箱 里了:客户管理、进销存、工单报修……按场景分好类,可以直接抄。


