公司动态

ChatGPT Skill实战:一键生成多平台发布包

📅 2026/9/1 20:54:14
ChatGPT Skill实战:一键生成多平台发布包
做内容运营的人都有过这种经历一条视频要同时发 YouTube、Bilibili、小红书三个平台的标题、描述、标签、封面文案风格完全不同。手动整理一份发布包至少要花半小时而且每次都要重来。用 ChatGPT 做个 Skill可以把这套重复流程固定下来只要提供视频信息AI 就按统一规则生成三套发布文案整个发布包 5 分钟内就能产出。这篇文章会从 Skill 的概念讲起逐步完成环境准备、目录搭建、脚本编写、运行验证和常见报错排查最终得到一个可复用的多平台发布包生成器。1. 先理解 Skill 在 ChatGPT/Codex 里的作用方式1.1 Skill 是什么解决什么问题Skill 可以理解成“给 AI 的一份岗位手册”。它不是普通的提示词而是一组包含说明文件、脚本、模板和资源的目录。AI 在收到任务时会根据 Skill 的描述判断是否匹配匹配后按照手册里定义的流程执行任务。它的价值在于把“如何生成一份发布包”这个完整流程固化下来。第一次手动写好规则后之后每次调用都是同一套标准不会出现这次写标题很夸张、下次写标题又很平的情况。对于需要稳定输出的内容运营场景Skill 比单纯复制粘贴提示词可靠得多。1.2 Skill 的运行位置和加载原理不同客户端的 Skill 目录格式会有差异下面以常见的 Codex 系环境为例。Skill 通常放在用户目录下的.codex/skills中每个 Skill 是一个独立目录目录里至少要有一个SKILL.md描述文件。目录结构大致如下~/.codex/skills/ └── content-publisher/ ├── SKILL.md ├── scripts/ │ └── generate_package.py └── assets/ └── templates/ ├── youtube.md ├── bilibili.md └── xiaohongshu.md当用户在对话中提出“生成发布包”这类需求时AI 会扫描 Skill 目录查看每个SKILL.md中的description字段。如果描述与当前任务匹配AI 就会加载对应 Skill并按照SKILL.md中的指引读取脚本和模板。注意不同版本的 ChatGPT 桌面版和 Codex CLI 对 Skill 的加载方式可能不同。落地前先确认自己所用版本的官方文档避免路径写错。1.3 Skill 的边界哪些任务适合做成 Skill不是所有任务都适合做 Skill。适合做成 Skill 的任务通常有这些特征输出结构固定比如标题、描述、标签、封面文案。操作流程重复比如每次都要读取输入文件、渲染模板、输出结果。规则可以写成文字或代码不依赖实时外部数据。结果可以被检查比如生成后直接打开文件确认。不适合做成 Skill 的场景包括需要频繁获取实时热点、依赖用户高度个性化偏好、需要长时间人工审核判断的内容。下面是适合与不适合的对比表格。任务类型是否适合原因生成三平台发布文案适合模板明确步骤重复自动剪辑视频并导出不适合涉及复杂逻辑和资源依赖Skill 不适合承载根据热点新闻写短评不适合需要实时信息固定流程反而限制质量将视频信息转录为周报适合输入输出固定规则清晰2. 环境准备和 Skill 目录结构2.1 准备环境与工具要跑通这套发布包生成 Skill需要准备以下环境。工具版本建议用途ChatGPT 桌面版或 Codex CLI支持 Skill 机制的最新版本运行 AI 并加载 SkillPython3.9 及以上执行模板渲染脚本本地终端系统自带即可创建目录、运行脚本git可选管理 Skill 和输出结果还需要确认 Codex CLI 可执行文件已经安装并且可以被 ChatGPT 桌面版找到。具体的排查方式在后面的报错章节会展开。2.2 创建 Skill 目录打开终端执行下面的命令创建 Skill 目录。这里把 Skill 命名为content-publisher表示“内容发布包生成器”。mkdir -p ~/.codex/skills/content-publisher/scripts mkdir -p ~/.codex/skills/content-publisher/assets/templates创建后可以查看目录结构find ~/.codex/skills/content-publisher -type f -o -type d目录用途如下SKILL.mdSkill 的核心描述写清楚触发条件和使用步骤。scripts/存放生成脚本比如渲染模板的 Python 文件。assets/templates/存放不同平台的文案模板。2.3 设计三平台发布包模板不同平台的文案规则差异很大模板必须按照平台特点设计。平台标题长度标签数量描述风格封面文案YouTube60 字符内1015 个前两行写核心信息适合搜索大字加对比色Bilibili25 字左右510 个互动感强带话题活动吸引点击但不夸张小红书20 字左右58 个口语化带 emoji 和话题词封面需突出利益点这些规则会写进模板文件里。模板文件使用 Markdown 格式并在关键位置预留变量例如# {title} ## 描述 {description} ## 标签 {tags} ## 封面文案 {cover_text}三个模板文件分别命名为youtube.md、bilibili.md、xiaohongshu.md后续脚本会读取这些模板并替换变量。3. 编写发布包生成 Skill3.1 编写 SKILL.md 描述文件SKILL.md是 Skill 的入口包含两部分YAML frontmatter 和正文说明。frontmatter 里的name与description最重要description决定了 AI 是否会加载这个 Skill。在~/.codex/skills/content-publisher/SKILL.md中创建以下内容--- name: content-publisher description: 根据用户提供的视频信息生成 YouTube、Bilibili、小红书三个平台的发布包包括标题、描述、标签、封面文案和发布时间建议。 --- # Content Publisher Skill 这个 Skill 用于把视频信息转换为多平台发布文案。 ## 输入 - video.json 文件包含视频标题、核心主题、目标观众、关键词、视频时长、卖点等信息。 - 或者直接在对话中提供上述信息由 AI 整理成 JSON。 ## 执行步骤 1. 读取输入文件 video.json。 2. 根据 assets/templates/ 下的模板渲染三个平台文件。 3. 将结果输出到 output/ 目录。 4. 输出文件名为 youtube.md、bilibili.md、xiaohongshu.md。 ## 注意事项 - 标题不要重复使用同一种句式。 - 描述中不要出现“AI 生成”等字样除非用户要求。 - 标签使用半角逗号分隔。 - 输出文件使用 UTF-8 编码。这里的description要写清楚“什么时候用”AI 才能准确匹配。不要写得太宽泛比如“处理内容”这种描述会让 AI 无法判断。3.2 设计输入数据 video.json为了让脚本稳定运行输入最好使用 JSON 文件而不是让 AI 从对话里自由提取。下面是一个示例video.json{ video_title: 我用 Python 自动抓取天气数据并生成可视化大屏, core_topic: Python 爬虫与数据可视化入门, target_audience: Python 初学者、数据分析师, keywords: [Python, 爬虫, 数据可视化, 天气数据, 大屏], video_duration: 12:30, selling_points: [ 不需要复杂环境, 20 行代码搞定数据抓取, 可视化大屏模板可直接复用 ], platform_preference: all }字段说明如下表字段含义是否必填video_title视频原始标题必填core_topic视频核心主题必填target_audience目标受众建议填写keywords内容关键词数组建议填写video_duration视频时长可选selling_points卖点数组建议填写platform_preference指定只生成某个平台可选默认 all有人会问为什么不直接在对话里说“帮我写三平台发布文案”让 AI 自己发挥因为脚本更适合处理固定规则。比如标签数量、标题长度限制、封面文案格式这些逻辑写进代码后AI 只需要提供创意内容脚本负责结构化和落地结果更可控。3.3 编写模板渲染脚本 generate_package.py在scripts/generate_package.py中编写核心生成逻辑。这个脚本会读取video.json遍历assets/templates/下的模板渲染后输出到output/。下面是一个最小可运行的 Python 脚本import argparse import json from pathlib import Path def load_templates(template_dir: Path) - dict: templates {} for file_path in template_dir.glob(*.md): templates[file_path.stem] file_path.read_text(encodingutf-8) return templates def render_template(template: str, data: dict) - str: result template result result.replace({title}, data[title]) result result.replace({description}, data[description]) result result.replace({tags}, data[tags]) result result.replace({cover_text}, data[cover_text]) return result def build_platform_data(video_data: dict) - dict: title video_data[video_title] keywords video_data.get(keywords, []) selling_points video_data.get(selling_points, []) youtube_description ( f本期视频讲解{video_data[core_topic]}\n\n f视频时长{video_data.get(video_duration, 未知)}\n f适合人群{video_data.get(target_audience, 不限定)}\n ) if selling_points: youtube_description \n本期亮点\n for point in selling_points: youtube_description f- {point}\n bilibili_description ( f这个视频带你了解 {video_data[core_topic]}。 f如果你也在学相关技术欢迎在弹幕里交流。 ) if selling_points: bilibili_description 看完你会掌握 .join(selling_points) xiaohongshu_description ( f分享一个关于 {video_data[core_topic]} 的实用方法 f特别适合 {video_data.get(target_audience, 感兴趣的伙伴)}。 ) return { youtube: { title: title, description: youtube_description, tags: , .join(keywords[:15]), cover_text: Python天气大屏, }, bilibili: { title: title[:25], description: bilibili_description, tags: .join(keywords[:10]), cover_text: 20行代码搞定, }, xiaohongshu: { title: title[:20], description: xiaohongshu_description, tags: .join(keywords[:8]), cover_text: Python入门必备, }, } def main(): parser argparse.ArgumentParser(description生成多平台发布包) parser.add_argument(--input, typePath, requiredTrue, helpvideo.json 路径) parser.add_argument(--output, typePath, defaultPath(output), help输出目录) args parser.parse_args() video_data json.loads(args.input.read_text(encodingutf-8)) templates load_templates(Path(__file__).parent.parent / assets / templates) platform_data build_platform_data(video_data) args.output.mkdir(parentsTrue, exist_okTrue) for platform, data in platform_data.items(): if all in video_data.get(platform_preference, all) or platform video_data.get(platform_preference): content render_template(templates[platform], data) output_file args.output / f{platform}.md output_file.write_text(content, encodingutf-8) print(f生成完成: {output_file}) if __name__ __main__: main()脚本的关键点有三个load_templates自动读取assets/templates/下所有.md文件后续新增平台模板时不需要改脚本。build_platform_data根据平台特点生成不同风格的 description 和标签格式。render_template通过字符串替换把模板里的变量替换成实际内容。这个脚本没有依赖第三方库使用 Python 标准库即可运行适合入门和二次修改。3.4 一键生成三个平台发布包在 Skill 根目录下创建output目录并运行脚本cd ~/.codex/skills/content-publisher python3 scripts/generate_package.py --input video.json --output output/如果一切正常终端会输出类似下面的信息生成完成: output/youtube.md 生成完成: output/bilibili.md 生成完成: output/xiaohongshu.md打开output/youtube.md可以看到类似这样的内容# 我用 Python 自动抓取天气数据并生成可视化大屏 ## 描述 本期视频讲解Python 爬虫与数据可视化入门 视频时长12:30 适合人群Python 初学者、数据分析师 本期亮点 - 不需要复杂环境 - 20 行代码搞定数据抓取 - 可视化大屏模板可直接复用 ## 标签 Python, 爬虫, 数据可视化, 天气数据, 大屏 ## 封面文案 Python天气大屏到这里一个最小的发布包生成闭环已经完成。接下来要解决的是如何让 ChatGPT 或 Codex 自动调用这套流程。4. 运行验证让 ChatGPT/Codex 调用 Skill 并检查产物4.1 在 Codex 中让 AI 加载 Skill启动 Codex 后在对话里输入类似这样的指令使用 content-publisher skill读取 video.json生成三个平台的发布包。AI 读取到content-publisher这个 Skill 名后会打开~/.codex/skills/content-publisher/SKILL.md然后按照里面的步骤执行。如果 AI 没有自动找到 Skill可以尝试在提示词里把SKILL.md的绝对路径指出来请阅读 ~/.codex/skills/content-publisher/SKILL.md然后按照说明处理 video.json。如果当前环境没有 Skill 自动扫描机制也可以复制SKILL.md的正文到系统提示词中但这样会失去复用性不推荐作为长期方案。4.2 检查生成结果的质量自动脚本只是把文案结构搭出来最终发布前需要人工检查。下面是发布包的质量检查清单。检查项要求标题长度YouTube 不超过 60 字符B 站不超过 25 字小红书不超过 20 字标签数量YouTube 1015 个B 站 510 个小红书 58 个描述开头前两行必须包含核心关键词封面文案是否突出卖点是否和视频封面图匹配平台规范是否符合各平台社区规范不包含违规信息编码格式文件为 UTF-8不会出现乱码如果发现某个平台标题被截断后语义不完整需要调整模板或原视频标题不要只依赖脚本截断。4.3 学习环境与生产环境的差异在学习环境里把脚本跑通就算完成。但进入生产环境还需要考虑下面几件事。项目学习环境生产环境输入管理手动创建 video.json接入选题库或待发布视频清单版本管理不关心历史版本使用 git 管理模板、脚本和输出结果审核看一眼文件设置人工审核节点至少检查一次日志没有日志记录每次生成的输入、输出和异常配置路径写死目录路径、平台偏好等通过配置传入回滚不需要使用 git 标签或归档目录保存历史发布包生产环境的 Skill 不应该是一个“黑盒”。如果 AI 生成结果出现偏差要能快速定位是模板问题、脚本问题还是输入数据问题。5. 常见启动与配置报错排查5.1 ChatGPT 启动时提示 unable to locate the codex cli binary现象ChatGPT 桌面版启动时弹出错误提示内容类似ChatGPT failed to start. Unable to locate the Codex CLI binary. Set CODEX_CLI_PATH or ensure the electron resources include bin/codex.可能原因Codex CLI 没有安装。Codex CLI 已经安装但 ChatGPT 桌面版没有找到它。环境变量CODEX_CLI_PATH未设置或指向错误路径。检查方式which codex echo $CODEX_CLI_PATH如果没有输出说明需要先安装 Codex CLI或设置环境变量。可以执行export CODEX_CLI_PATH/usr/local/bin/codex然后重启 ChatGPT 桌面版。如果路径不对需要把CODEX_CLI_PATH改成实际的可执行文件路径。注意不要为了绕过报错随意修改 electron 内部文件。优先安装或升级 Codex CLI并确保环境变量正确。5.2 无法加载 config.toml 导致对话无法继续现象ChatGPT 或 Codex 启动后提示无法加载 config.toml因此此对话串无法继续。请修复 config.toml。这类错误常见于~/.codex/config.toml文件格式错误或其中声明的 model 无法识别。检查方式cat ~/.codex/config.toml一个最小可用的config.toml示例model gpt-5如果原配置文件里有无法解析的字段可以先备份再简化配置cp ~/.codex/config.toml ~/.codex/config.toml.bak然后只保留必要的 model 配置重新启动客户端。在修复之前建议先确认当前 Codex 版本支持哪些模型字段避免把不存在的模型名写进配置。5.3 Skill 没有被识别现象对话中让 AI 使用某个 Skill但 AI 没有加载或者提示找不到。可能原因Skill 目录不在~/.codex/skills/下。SKILL.md缺少 YAML frontmatter。description描述与实际任务不匹配。会话没有重启AI 没有重新扫描目录。排查顺序# 1. 确认目录存在 ls -la ~/.codex/skills/content-publisher/ # 2. 确认 SKILL.md 开头有 --- 包裹的 frontmatter head -10 ~/.codex/skills/content-publisher/SKILL.md # 3. 在当前会话中重新描述任务检查 AI 是否加载如果使用的是旧版客户端可能不支持自定义 Skill。这时可以先通过命令行 Codex 验证再确认桌面版版本是否匹配。6. 最佳实践和扩展方向6.1 给 Skill 加缓存、记忆和版本管理发布包生成 Skill 第一次跑通后可以继续完善。一个很实用的改进是给输出目录做版本管理cd ~/.codex/skills/content-publisher git init git add . git commit -m feat: 初始化 content-publisher skill每次修改模板或脚本后通过 git diff 可以看到具体改动方便回滚。还可以在SKILL.md中记录历史备注避免 AI 下次生成时遗忘之前约定的规则。另一个改进方向是缓存平台上的历史爆款标题格式。可以将常见的标题句式放在assets/examples/目录中并在SKILL.md中要求 AI 参考这些句式但不直接复制。6.2 扩展更多平台和定时发布当前脚本只生成三个平台。如果要扩展抖音、Twitter/X 或微信公众号只需在assets/templates/中新增对应模板并在build_platform_data中增加平台字段即可。如果需要定时生成发布包可以把脚本接入 cron 或 GitHub Actions。比如每天读取当天的选题列表批量生成发布包并提交到指定目录。这样团队协作时运营人员只需要维护video.json不需要手工复制文案。下面是一个 cron 配置示例每天上午 9 点生成当天发布包0 9 * * * cd ~/.codex/skills/content-publisher python3 scripts/generate_package.py --input video.json --output output/6.3 安全与合规建议发布包生成涉及账号内容使用时要遵守平台规则。不要把账号 API Key、Cookie 或内部链接写进 Skill 模板。不要在video.json中保存敏感用户数据。生成结果发布前需要人工审核尤其是涉及医疗、金融、政治等敏感话题。如果 Skill 要提交到团队仓库先检查模板里是否有内部术语或跳转链接。使用脚本自动化时保留人工复审环节避免“全自动发布”导致账号风险。最后想说的是Skill 的真正价值不是“让 AI 写一段文案”而是把重复性的内容生产流程变成可复用、可版本化、可排查的标准步骤。先从三平台发布包这个小场景开始跑通后再把选题、审核、定时发布慢慢加进去你会看到这套机制在内容运营中的实际收益。