新闻详情

新闻详情

首页 / 资讯中心 / 详情

Coze+GPT打造《历史上的今天》自动化内容流水线

发布时间:2026/9/30 16:07:55来源:尧图网络
Coze+GPT打造《历史上的今天》自动化内容流水线
简介面向自媒体创作者与AI自动化内容生成学习者这套实战案例完整演示如何基于Cozecoze.cn与GPT打造《历史上的今天》图文自动生成项目解决历史类内容每日更新耗时、选题重复、排版固定的效率痛点。项目以小红书同类账号为参考围绕历史信源获取展开推荐国内lishi365.cn与国外onthisday.com两个信源并给出用GPT辅助编写的Python爬虫插件示例随后在Coze中搭建工作流依次完成事件抓取、大模型筛选高影响力事件并生成评价、代码模块拆分时间/标题/评价、封面图片生成与自媒体排版内容导出。资源为一份docx文档共1个文件压缩包大小2.18MB文档内不仅有可运行的爬虫代码、提示词样例和工作流搭建思路还包含正则解析与内容格式化代码以及从想法到发布的全流程拆解便于读者直接参考或二次开发。目前已有2882人学习下载适合希望批量生产历史类图文、系统掌握Coze自动化工作流与GPT辅助开发的入门和进阶用户。1. coze GPT 做《历史上的今天》这是一条可以批量化复制的内容流水线刷小红书的时候我注意到一类账号每天发一张图配一段文字讲历史上今天发生了什么。背景图、排版、字体几乎固定变的只有日期、事件标题和文案。这种内容形式高度模板化意味着它可以被拆成一条自动化流水线找信源、抓取、筛选、生成封面、生成文案、发布。我在 coze.cn 上把这条流水线跑通了核心环节用 GPT 写爬虫插件、用工作流和图像流串联整个过程不需要写复杂的服务端代码。这篇笔记就把完整实现思路、每个节点的参数设置和踩过的坑写出来如果你也想做这类图文号可以直接照着复现或者把信源和封面一换套用到其他垂直方向。2. 信源与爬虫插件为什么选 lishi365.cn以及让 GPT 写爬虫的提示词技巧2.1 信源选择的思路国内站结构简单国外站适合做差异化内容做这类项目的第一步是找到稳定的信源。信源不需要多但要满足三个条件页面结构相对固定、每天更新、能通过简单的选择器提取出事件标题。项目里用了两个站点国内的是 lishi365.cn国外的是 onthisday.com。我实际测试下来lishi365.cn 的页面更友好——a 标签带 title 属性一个 find_all 就能把当天的事件标题全部抓出来onthisday.com 的英文内容适合做海外历史事件的二次翻译但如果你的目标平台是小红书中文信源效率更高可以先用 lishi365.cn 跑通全流程后续再考虑加入英文信源扩充素材。选信源时还有一个容易被忽略的点不要选频繁改版或需要登录的站点。爬虫插件在 coze 上运行每次调用都是一次独立的请求如果目标站有反爬机制比如要求携带 Cookie 或通过 JS 渲染数据requests 这种简单的 HTTP 请求就拿不到内容。lishi365.cn 这种纯静态输出的站点是最省心的选择。2.2 让 GPT 写爬虫插件提示词里必须强调 coze.cn 运行环境爬虫这部分不需要你自己从零写。coze 插件商店里有人做好了现成的《历史上的今天》插件可以直接搜索使用。但如果你想自定义信源或者想理解插件的内部逻辑最省力的方式是让 GPT 帮你写然后粘贴到 coze 的自定义插件里。这里有一个经验提示词里一定要强调代码需要在 coze.cn 的插件环境中运行否则 GPT 可能会生成带 Flask 框架或依赖本地文件系统的代码放到 coze 里根本跑不起来。我自己让 GPT 生成的插件代码如下核心逻辑就一段import requests from bs4 import BeautifulSoup import json import logging # 配置日志记录 logging.basicConfig(levellogging.INFO) def fetch_event_titles(url): try: # 发起 HTTP GET 请求 response requests.get(url) response.encoding utf-8 # 确保正确的编码 # 解析网页内容 soup BeautifulSoup(response.text, html.parser) # 查找所有符合条件的 a 标签 event_links soup.find_all(a, hrefTrue, titleTrue) # 提取事件标题 events [] for link in event_links: event_title link[title] events.append(event_title) return events except Exception as e: logging.error(fError fetching event titles: {e}) return [] def handler(event, contextNone): try: # 目标网站 URL url http://www.lishi365.cn/ # 获取事件标题列表 event_titles fetch_event_titles(url) # 将列表转换为字符串 event_titles_str json.dumps(event_titles, ensure_asciiFalse) # 返回结果 return { statusCode: 200, body: event_titles_str } except Exception as e: logging.error(fError in handler: {e}) return { statusCode: 500, body: fError: {e} }这段代码的逻辑很直白requests 请求目标页面BeautifulSoup 解析 HTML然后通过find_all(a, hrefTrue, titleTrue)把所有带 title 属性的链接全部提取出来。这里的关键参数是titleTrue因为 lishi365.cn 把事件标题放在了 title 属性里而不是a标签的文本内容中。如果你的信源变了比如换成一个标题在h3标签里的站点就需要同步修改选择器。2.3 插件测试与常见返回格式问题插件写好后在 coze 插件编辑页面可以直接测试。我第一次测试时返回的是一大段 JSON 字符串包含几十个事件标题其中大量是历史上的今天这类导航栏链接真正的历史事件反而被淹没在噪声里。这时候不用急着改爬虫因为下一步工作流里本来就有大模型筛选节点噪声数据可以交给大模型处理。但有一点需要注意如果插件返回的字段里有大量重复或空值最好在爬虫层面先做一次去重和过滤否则后续每次调用大模型都会多消耗 token而且输出质量会被噪声影响。在 coze 里跑自定义插件还有一个容易翻车的地方返回的 body 必须是字符串或 JSON如果直接返回 Python 列表插件节点会报格式错误。所以代码里用json.dumps(event_titles, ensure_asciiFalse)做了一次序列化ensure_asciiFalse是为了保证中文不被转成\u开头的 ASCII 编码。这个细节在我第一次写插件时没注意结果前端显示的全是转义字符排查了很久才发现是这里的问题。3. 搭建工作流从抓取到筛选、再到拆变量的三个关键节点3.1 工作流的整体结构插件节点 → 大模型筛选节点 → 代码模块 → 输出coze 工作流的构建方式是拖拽节点连线。我的工作流结构是从上到下的四层最上面是刚刚创建的爬虫插件节点作用是抓取当天的事件标题列表第二层是大模型筛选节点把插件输出的原始标题列表加工成有传播价值的素材第三层是代码模块把大模型输出的混杂文本拆分成时间、标题、评价三个独立变量最后一层是输出节点把变量交给下游的图像流和文案节点。这个结构本身不复杂但它决定了后面所有内容的质量所以每一层都要单独测试通过后再串联。这里有一个重要的设计思路插件输出的是素材池大模型筛选节点做的是内容加工代码模块做的是结构化。三个节点各干一件事互不干扰。如果你把筛选和拆分都塞进一个大模型节点里提示词会变得极度复杂而且输出格式稍微飘一下后面的节点就全断了。3.2 大模型筛选节点的提示词必须带上 {input} 变量名插件节点测试通过后把它拖入工作流。此时可以先跑一次看一下原始输出。你会发现抓到的内容里混杂着大量无用信息比如站内导航标题、其他日期的历史事件入口等等。这时候就需要接入一个大模型节点来做筛选。大模型的提示词我是这样写的告诉它从输入的历史事件列表中筛选出当天最重要的事件格式化为时间、标题、评价三段评价要拓展成适合小红书发布的素材。这里最关键的细节是提示词里必须附上变量名 {input}让大模型明确知道你要加工的内容来自哪个字段。举个例子如果插件节点的输出字段名是body在大模型节点的输入设置里要把body映射到{input}然后在提示词中引用{input}。很多新手在这里翻车提示词写了一长串但没绑定变量大模型节点运行时拿不到任何数据。你可以在大模型节点的输出里加一个测试先跑一次看看输入内容是否被正确传入。3.3 代码模块拆变量用正则从大模型输出中提取时间、标题、评价大模型节点的输出是一段连续文本比如时间1951 年 6 月 25 日\n标题世界首次播出彩色电视节目\n评价……。但下一个节点需要把时间、标题、评价分别作为独立变量使用——时间要做成图片上的日期标题要做成图片上的事件概要评价要做成小红书文案。所以这里插入一个代码模块用正则把三段内容拆开。import re def parse_content(text): # 使用正则表达式提取日期、标题和内容 date_match re.search(r时间(.*?)\n, text) title_match re.search(r标题(.*?)\n, text) content_match re.search(r评价(.*), text, re.DOTALL) # 提取并清理匹配到的内容 day date_match.group(1).strip() if date_match else None title title_match.group(1).strip() if title_match else None content content_match.group(1).strip() if content_match else None return day, title, content def main(*args): # 兼容不同类型的输入 if len(args) 1: arg args[0] if isinstance(arg, str): text arg elif hasattr(arg, content): content getattr(arg, content) if isinstance(content, str): text content elif isinstance(content, dict) and params in content and input in content[params]: text content[params][input] else: text fError: Invalid content type {type(content).__name__} else: text fError: Invalid input type {type(arg).__name__} else: text Error: Multiple arguments if Error not in text: day, title, content parse_content(text) return { day: day, title: title, content: content } else: return {error: text}这段代码的逻辑分两层外层main函数负责兼容 coze 代码模块传入的不同数据类型内层parse_content负责用正则提取三个字段。正则部分的关键是r时间(.*?)\n使用了非贪婪匹配匹配到第一个换行符就停止而r评价(.*)配合re.DOTALL标志可以把评价后面的整段内容都匹配进来包括换行。参数说明strip()用于去掉提取内容首尾的空白字符re.DOTALL是这里最容易漏掉的一个参数不加它的话评价内容里一旦有换行正则就会截断。代码模块在 coze 中的输入格式并不总是一致的有时候是字符串有时候是带content属性的对象所以我在外层加了类型判断。如果你在测试时发现text拿到了Error开头的值说明传入参数的类型和预期不符需要根据报错信息调整main函数的取值逻辑。3.4 内容再加工把评价输出给下一个小红书模型代码模块输出的content字段是大模型生成的评价内容但这段文字是通用表述直接发小红书会显得生硬。所以工作流里再接一个专门的小红书文案加工节点把代码模块输出的content作为输入让大模型改成口语化、带话题标签、适合小红书排版风格的文案。这里的提示词可以这样写你是一个小红书爆款文案编辑请把以下内容改写成适合小红书发布的图文文案要求口语化、有情绪、结尾带上相关话题标签。注意这里的输入变量绑定和 3.2 里是一样的逻辑必须把代码模块输出的content字段映射到文案节点的{input}变量上。同时要控制生成文案的长度小红书正文一般不超过 500 字所以可以在提示词里限定不超过 500 字。4. 封面生成与发布用图像流把时间、标题落到背景图上4.1 为什么不用工作流直接处理图片而是单独做图像流coze 的工作流节点主要处理文本和结构化数据图像处理能力比较弱。我最初的思路是在工作流里加一个生成图片的节点但实际测试发现图片尺寸、文字位置、字体样式这些参数在工作流节点里很难精确控制。所以我改用了 coze 的图像流把给图片加时间和给图片加事件标题分别做成两个图像加工节点等图像流调试好了再放回工作流里作为子流程调用。这样做的好处是解耦图像流的输入输出非常清晰——接收day和title两个字符串变量输出一张处理好的封面图。你不需要关心图片内部是怎么处理的只需要保证上一层的变量名称和图像流的输入名称一致。4.2 图像流的变量映射day、title 必须和工作流输出名一致图像流的构建流程是创建图像流 → 定义输入变量这里是day和title → 添加图像加工节点 → 设置输出。需要注意的关键点是图像流输入变量的名字必须和工作流里代码模块输出的字段名保持一致。如果代码模块输出的字段叫day图像流的输入变量也必须叫day否则工作流串联后数据传不过去。我自己就在这里踩过坑工作流代码模块输出的字段名是day和title但图像流里输入的变量名我写成了date和event结果跑出来的封面图片上日期是空的排查了半天才发现是变量名不一致。图像流里建议放两个加工节点第一个给图片加时间显示6 月 25 日第二个给图片加事件标题显示世界首次播出彩色电视节目。这样拆开的目的是方便单独调整文字位置和样式。你提前做好一张背景图——纯色底、左侧留白、或者带一些和内容相关的插画风格都行——上传到第一个加工节点的背景图层第一个节点输出后再作为第二个节点的输入。4.3 图像加工节点的参数设置文字位置、字号、颜色图像加工节点里都有文字参数调整区域包括文字内容、字体、字号、颜色、位置坐标等。我常用的参数组合是时间文字放在图片左上角字号偏小颜色用浅灰或白色带一点透明度效果标题文字放在图片中央偏下字号偏大颜色用黑色或深蓝色确保在小红书封面缩略图下依然清晰可读。如果你的背景图是深色的文字颜色要调成亮色反过来同理。图像流制作完成后回到工作流把图像流拖进来作为一个节点输入接代码模块的输出输出接到最终的发布节点。这时候工作流跑一次输出的就是一个封面图文件加一段小红书文案直接复制就可以发布。最终工作流的完整结构是爬虫插件 → 大模型筛选 → 代码模块拆变量 → 小红书文案加工 → 图像流生成封面 → 汇总输出。5. 避坑排查爬虫抓不到数据、变量对不上、图片文字溢出怎么办5.1 爬虫插件运行报错返回 500现象插件节点调用时返回statusCode: 500日志里提示Error fetching event titles。原因通常有两种情况——目标网站页面结构发生了变化a标签不再带title属性或者网络请求被目标站拦截比如返回了 403 页面。解决先用浏览器打开目标网站右键检查确认标题元素是否还在a标签的title属性里。如果变了让 GPT 根据新的页面结构调整选择器。如果是反爬问题可以尝试在请求头里加User-Agent比如headers {User-Agent: Mozilla/5.0}一般能解决大部分基础的拦截。5.2 大模型节点拿不到输入提示词里写了 {input} 但没绑定变量现象大模型节点跑完输出内容是空白的或者生成的文案和输入内容完全无关。原因提示词里虽然写了{input}但在节点的输入参数设置区没有把上游节点的输出字段映射到{input}变量上。coze 的变量绑定需要手动选择不是写了{input}就会自动生效。解决点开大模型节点的输入设置确认上游节点的输出字段已经绑定到{input}。可以先用一个测试输入跑一次节点在节点输出里查看实际收到的内容。5.3 代码模块拆变量时正则匹配不上返回空字段现象day、title、content三个字段里出现了None或空字符串。原因大模型输出格式不稳定可能没有按照时间xxx\n标题xxx\n评价xxx的标准格式输出比如标题和评价之间多了空格或者中间插入了一行空行。解决不要只依赖正则的容错。更稳的做法是在大模型筛选节点的提示词里明确要求输出格式并且强调严格按照以下格式不要添加任何额外内容。我一般在提示词末尾加上一句只输出这三个字段不要输出任何其他文字。正则匹配的规则可以保持简单但提示词要约束大模型的输出格式。5.4 图像流生成封面时文字溢出或遮住关键信息现象封面图上标题文字太长超出背景图边界或者文字堆在一起。原因事件标题可能很长比如世界首次播出彩色电视节目这种还好但有些历史事件标题包含人物、地点字数一多就容易溢出。此外图片加工节点的文字区域是固定宽度的超出就自动换行或截断。解决在提示词里限定标题长度比如标题控制在 15 字以内同时在图像流里加入一个文本缩略逻辑——如果标题超过指定长度就用省略号截断。常见的做法是在代码模块或大模型节点内先对标题做一次长度判断超长就截取前 12 个字加省略号。5.5 输出文案里夹杂着爬虫抓到的噪声内容现象最终生成的小红书文案里出现了首页联系我们这类和内容无关的词汇。原因爬虫插件抓取时把导航链接的 title 属性也当成了事件标题大模型筛选节点没有完全过滤干净导致噪声传递到了下游。解决在爬虫插件的代码里加一层过滤规则比如过滤掉包含首页链接登录等关键词的标题。这个操作在爬虫插件里做比在大模型节点里做更可靠因为正则过滤是确定性的大模型筛选带概率性。6. 让这套工作流变成模板换信源、换背景图快速复制成新账号6.1 信源和封面是模板的两个变量都可以随意替换这套工作流本质上是一个内容生成模板只有两个核心变量信源和封面背景图。你不需要在 coze 里重新搭建工作流只需要复制当前项目然后修改爬虫插件里的url参数再用新的背景图替换图像流里的底图调整一下提示词中的内容方向就可以快速生成另一个垂直领域的内容账号。比如把 lishi365.cn 换成你所在城市的新闻站点背景图换成对应风格就能做一个本地新闻速递账号换成行业资讯站点就能做一个行业早期消息账号。6.2 最终验证完整跑一遍工作流检查四个输出是否正常在正式投入使用前我建议完整跑一次工作流并按以下清单核对输出结果检查项预期结果爬虫插件输出当天事件标题列表包含至少 5 条有效数据代码模块输出day、title、content三个字段均非空小红书文案节点输出文案口语化带话题标签字数不超过 500图像流输出封面图包含日期和标题文字位置正确无溢出这四个检查项对应着工作流的四个关键节点任何一项不通过都需要回溯到对应节点排查。有一个偷懒但有效的习惯每次跑完工作流点开每个节点的输出详情看一眼确认数据和预期一致再进入下一步。不要等到最终输出出问题才回来查那样排查成本会翻倍。6.3 发布层面的两个小技巧定时发布和内容去重内容生成只是第一步更花时间的是每天发布。coze 工作流本身可以设定定时触发我通常会在每天早上固定时间跑一次工作流生成当天的内容素材然后手动复制到小红书后台或使用定时发布功能。这样每天只需要花几分钟检查一下生成结果确认无误后点发布就行。需要提醒的是如果你打算批量生成多天的内容再手动发要注意历史事件的重复问题。比如 6 月 25 日和 6 月 26 日抓取的内容大概率不重复但如果你一周前生成过同一天的素材再次运行工作流很可能会生成一模一样的图片和文案。所以建议每次生成后给文件加日期前缀去重或者建一个素材归档表格记录每天发了哪些事件标题避免重复发布。从那以后我每次跑完工作流都会顺手把生成结果里的图片重命名加上日期再归档这个习惯帮我省掉了不少后续查重的麻烦。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

WT588D深度诊断工具:SPI协议分析与寄存器级调试平台 2026/10/1 1:46:20

WT588D深度诊断工具:SPI协议分析与寄存器级调试平台

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
LabVIEW 2019安装与ATECLOUD在线测试平台实战避坑指南 2026/10/1 1:46:20

LabVIEW 2019安装与ATECLOUD在线测试平台实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
opencv-python+ONNX模型:英文数字检测识别源码实战部署指南 2026/10/1 1:46:20

opencv-python+ONNX模型:英文数字检测识别源码实战部署指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
STM32F103C8T6 J-Link 与 JFlash 烧录指南 2026/10/1 1:46:20

STM32F103C8T6 J-Link 与 JFlash 烧录指南

1. 先把工具链的定位讲清楚:为什么是 J-Link Commander 和 JFlash1.1 三种烧写方式的真实差别做 STM32F103C8T6 开发的人,手上大概率同时存在三套下载通道:IDE 里点一下的下载按钮、串口 ISP 的 flash loader,还有 J-Link 这一套。…

阅读更多 →
基于YOLOv8的康复器材检测分析系统:从数据集标注到Gradio部署全流程 2026/10/1 1:46:20

基于YOLOv8的康复器材检测分析系统:从数据集标注到Gradio部署全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
UE5.3帧计时与低延迟同步实战指南 2026/10/1 1:46:01

UE5.3帧计时与低延迟同步实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉