基于Node.js与AI CLI构建自动化写作SKILL:打通内容创作最后一公里
2026/8/13 3:30:25 网站建设 项目流程

1. 从“想法”到“发布”:AI写作的最后一公里困境

如果你尝试过用AI写公众号文章,大概率经历过这样的场景:你对着某个AI工具,输入一个模糊的想法,它确实能给你生成一篇结构完整、文笔流畅的草稿。你看着这份草稿,感觉“有内味儿了”,但当你真正想把它变成一篇能发布的公众号文章时,麻烦才刚刚开始。

你会发现,AI生成的Markdown格式,粘贴到公众号编辑器里,样式全乱了。你需要手动调整标题、加粗、列表,甚至重新分段。文章里可能引用了某个不存在的“案例三”,或者某个专业术语解释得似是而非,你需要逐字逐句地核实、修改、补充。更别提那些只有你才知道的“梗”、符合你个人口吻的语气词,以及公众号特有的排版美学(比如特定的字体颜色、间距、引导关注组件)。这一系列从“AI草稿”到“成品文章”的琐碎、耗时且无法自动化的环节,就是所谓的“最后一公里”。

这“最后一公里”消耗的精力,常常不亚于从头开始构思。它让AI写作的效率大打折扣,也让很多人觉得“AI也就那样,最后还是得自己来”。最近,一个名为“SKILL”的概念和与之相关的工具链(比如Codex CLI、Node.js环境下的各种脚本)开始在技术圈和内容创作者中流传,它瞄准的,正是解决这个痛点。它不是另一个AI写作模型,而是一套“连接器”和“自动化流水线”,旨在将AI的强大生成能力,与你最终的内容发布平台(如微信公众号)无缝对接,真正打通这最后、也是最磨人的一公里。

2. 拆解“SKILL”:它到底是什么,以及如何工作

“SKILL”在这里不是一个简单的技能单词,而是在特定技术语境下的一个专有概念。结合热词中频繁出现的“Codex CLI”、“Node.js”、“Skill脚本”来看,它指的很可能是一套基于Node.js运行环境,通过命令行界面(CLI)调用,能够扩展大型语言模型(如Codex、Claude Code等)能力,并执行特定、复杂工作流的“技能”或“插件”系统。

你可以把它理解为一个高度定制化的“AI助手工作台”。普通的AI对话,是你问一句,它答一句。而一个配置好的SKILL,则是一套预设好的“组合拳”。以公众号写作为例,一个完整的SKILL工作流可能包含以下环节:

  1. 需求解析与大纲生成:你输入一个关键词或一段模糊描述,SKILL背后的AI模型(如Claude Code)会先与你进行多轮对话,澄清你的意图、目标读者、文章风格,并生成一个详细的结构化大纲。
  2. 内容分段生成与初步优化:根据大纲,SKILL会控制AI模型分段生成内容,并自动应用一些基础优化规则,比如避免使用平台敏感词、调整语句口语化程度。
  3. 格式转换与样式注入:生成的Markdown内容,会被SKILL中预设的脚本自动转换为微信公众号编辑器兼容的HTML格式,并注入你常用的CSS样式模板(比如特定的标题样式、正文间距、引用块格式)。
  4. 内容合规性检查:SKILL可以集成简单的本地词库检查,对生成内容进行一轮快速扫描,标记出可能涉及营销敏感或平台审核风险的词汇,供你重点复核。
  5. 多媒体占位与资源管理:SKILL可以在文中自动插入图片占位符,并关联你本地的图片素材库,甚至能调用相关API为每段内容建议配图。
  6. 一键生成发布草稿:最终,SKILL将所有处理好的HTML内容、样式、图片链接打包,直接生成一个可用于微信公众号后台导入的草稿文件,或通过模拟操作填充到草稿箱。

整个过程,你只需要在开始时输入核心想法,在关键节点进行确认和微调,剩下的格式转换、样式调整、基础优化等重复性劳动,全部由SKILL自动化完成。它的核心价值不在于替代你的创作,而在于接管所有可标准化、可程序化的“体力活”,让你能更专注于创意和决策。

2.1 技术栈剖析:Node.js、CLI与AI模型的三角协同

要实现上述工作流,底层离不开一个稳定灵活的技术栈。从热词中我们可以看到几个关键组件:

  • Node.js运行环境:这是整个SKILL的基石。Node.js使得JavaScript/TypeScript可以运行在服务器端,能够方便地处理文件系统(读写本地文章模板、图片)、执行网络请求(调用AI API、获取外部数据)、以及运行各种复杂的构建脚本。热词中提到的“nodejs安装及环境配置”、“npm无法加载文件”等问题,正是新手搭建这个环境时最常见的拦路虎。

    注意:在Windows系统上使用Node.js和npm时,常会遇到“因为在此系统上禁止运行脚本”的错误。这是因为PowerShell的执行策略限制。解决方法通常是以管理员身份打开PowerShell,执行Set-ExecutionPolicy RemoteSigned并选择同意。这是一个关键但容易被忽略的配置步骤。

  • CLI(命令行界面)工具:如“Codex CLI”、“Claude Code CLI”。这些工具提供了在终端中直接与AI模型交互的能力。相比在网页聊天框中操作,CLI工具更易于集成到自动化脚本中。你可以编写一个Shell脚本或Node.js脚本,通过CLI工具发送精心设计的提示词(Prompt),接收模型返回的结果,然后交给下一个处理环节。这是实现工作流自动化的“遥控器”。

  • AI模型与Skill定义:“Codex Skill”、“Claude Code Skill”指的是为这些特定模型编写的技能定义文件。这些文件可能是一个JSON或YAML配置,里面详细说明了:为了完成“写公众号文章”这个任务,需要按什么顺序调用模型的哪些能力?每一步的提示词模板是什么?如何处理模型的输出并将其作为下一步的输入?这相当于为AI模型编写了一份“专项任务说明书”。

这三者协同工作:Node.js脚本作为总调度,按照“Skill定义”的流程,通过“CLI工具”调度“AI模型”的能力,并将各步骤的结果进行加工、整合,最终输出成品。

3. 实战构建:一个简易公众号写作SKILL的搭建思路

理解了概念,我们来看如何动手搭建一个属于自己的简易版SKILL。请注意,以下是一个基于常见工具和思路的构建方案,并非某个特定产品的教程。你需要根据自己使用的具体AI模型CLI工具进行调整。

3.1 环境准备与核心工具选型

首先,确保你的开发环境就绪:

  1. 安装Node.js:前往Node.js官网下载LTS版本并安装。安装后,在终端运行node -vnpm -v检查版本,确认安装成功。
  2. 解决执行策略问题(Windows):如前所述,如果遇到脚本执行错误,需在PowerShell中调整执行策略。
  3. 选择AI模型CLI:假设我们选择“Claude Code CLI”(一个假设的,用于与Claude模型交互的命令行工具)。你需要按照其官方教程进行安装和配置,通常包括使用npm install -g claude-code-cli进行全局安装,然后运行claude-code auth来配置你的API密钥。
  4. 项目初始化:创建一个新的项目目录,例如wechat-article-skill,进入并运行npm init -y初始化一个Node.js项目。然后安装一些必要的依赖,例如用于处理Markdown的marked,用于处理HTML的cheerio,以及用于命令行交互的inquirer
    npm install marked cheerio inquirer

3.2 设计核心工作流脚本

接下来,在项目根目录创建一个主脚本文件,例如generate.js。这个脚本将串联整个工作流。其核心逻辑如下:

// generate.js const { exec } = require('child_process'); const util = require('util'); const execPromise = util.promisify(exec); // 将exec转为Promise风格,便于使用async/await const fs = require('fs').promises; const inquirer = require('inquirer'); const marked = require('marked'); // 1. 与用户交互,收集文章核心信息 async function collectInput() { const answers = await inquirer.prompt([ { type: 'input', name: 'topic', message: '请输入文章核心主题或关键词:', }, { type: 'list', name: 'tone', message: '选择文章风格:', choices: ['专业严谨', '轻松活泼', '娓娓道来', '犀利点评'], }, { type: 'input', name: 'targetAudience', message: '目标读者是?(例如:互联网从业者、学生家长等)', } ]); return answers; } // 2. 构建Prompt,调用AI CLI生成大纲 async function generateOutline(topic, tone, audience) { const prompt = `你是一位专业的公众号文章写作助手。请根据以下要求,生成一篇公众号文章的详细大纲。 主题:${topic} 风格:${tone} 目标读者:${audience} 要求大纲包含:吸引人的标题、引言、3-5个核心论点(每个论点下包含2-3个论据或案例)、结尾总结与呼吁行动。请以清晰的Markdown列表格式输出。`; // 假设claude-code-cli的命令是 `claude-code ask`,这里需要根据实际工具调整 const { stdout, stderr } = await execPromise(`claude-code ask "${prompt.replace(/"/g, '\\"')}"`); if (stderr) { console.error('生成大纲时出错:', stderr); throw new Error(stderr); } return stdout; // 返回AI生成的大纲文本 } // 3. 根据大纲,分段生成文章内容 async function generateContentBySection(outlineMarkdown) { // 这里简化处理:将大纲作为整体Prompt的一部分,让AI生成全文 // 更复杂的实现可以解析大纲,对每个章节单独调用AI const contentPrompt = `这是文章大纲:\n${outlineMarkdown}\n\n请根据以上大纲,撰写一篇完整的公众号文章正文。要求语言风格符合大纲要求,直接输出文章正文部分(不含大纲本身),使用Markdown格式。`; const { stdout, stderr } = await execPromise(`claude-code ask "${contentPrompt.replace(/"/g, '\\"')}"`); if (stderr) { console.error('生成内容时出错:', stderr); throw new Error(stderr); } return stdout; } // 4. 格式转换:Markdown 转 微信公众号HTML function convertToWeChatHTML(markdownContent) { // 使用marked将Markdown转换为原始HTML let html = marked.parse(markdownContent); // 使用cheerio加载HTML,进行微信平台特定的样式加工 const cheerio = require('cheerio'); const $ = cheerio.load(html); // 示例:为所有<h2>标签添加微信常见的样式(灰色边框、居中) $('h2').each(function() { $(this).attr('style', 'text-align: center; border-bottom: 2px solid #eaeaea; padding-bottom: 10px;'); }); // 示例:为正文段落设置行高和字体 $('p').attr('style', 'line-height: 1.8; font-size: 16px; color: #333;'); // 示例:为引用块添加背景色 $('blockquote').attr('style', 'border-left: 4px solid #1aad19; background-color: #f9f9f9; padding: 10px 15px; margin: 10px 0;'); // 读取一个预设的HTML模板(包含头部样式、尾部二维码等) const template = ` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>生成的文章</title> <style> body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif; max-width: 680px; margin: 0 auto; padding: 20px; } /* 更多全局样式 */ </style> </head> <body> <!-- 文章内容将插入这里 --> ${$.html()} <hr> <div style="text-align: center; color: #999; font-size: 14px;"> <p>关注我们,获取更多精彩内容</p> <!-- 这里可以放置二维码图片 --> </div> </body> </html>`; return template; } // 5. 主函数:串联所有步骤 async function main() { try { console.log('🚀 开始公众号文章生成SKILL...'); // 步骤1:收集输入 const { topic, tone, targetAudience } = await collectInput(); console.log(`主题:${topic}, 风格:${tone}, 读者:${targetAudience}`); // 步骤2:生成大纲 console.log('🤖 正在生成文章大纲...'); const outline = await generateOutline(topic, tone, targetAudience); console.log('大纲生成完毕。'); // 这里可以增加一个预览和确认大纲的环节 // const { confirmOutline } = await inquirer.prompt([{ type: 'confirm', name: 'confirmOutline', message: '是否使用此大纲继续生成正文?' }]); // if (!confirmOutline) { process.exit(0); } // 步骤3:生成正文 console.log('✍️ 正在根据大纲撰写正文...'); const articleMarkdown = await generateContentBySection(outline); // 步骤4:格式转换 console.log('🎨 正在转换为微信公众号格式...'); const finalHTML = convertToWeChatHTML(articleMarkdown); // 步骤5:保存输出 const outputFileName = `article_${Date.now()}.html`; await fs.writeFile(outputFileName, finalHTML, 'utf-8'); console.log(`✅ 文章生成完成!已保存为:${outputFileName}`); console.log(`👉 你可以用浏览器打开此文件预览,然后复制HTML内容到微信公众号编辑器。`); } catch (error) { console.error('❌ 流程执行失败:', error); } } main();

这个脚本是一个高度简化的示例,但它清晰地展示了SKILL工作流的骨架:交互输入 -> AI生成 -> 后处理 -> 输出成品。你可以通过node generate.js来运行它。

3.3 关键环节的深化与个性化定制

上面的基础脚本只能算“通了”,离“好用”还有距离。一个真正能打的生产力SKILL,需要在以下几个环节进行深度定制:

  • Prompt工程是灵魂:直接让AI“写一篇关于XX的文章”效果很差。你需要为大纲生成、段落展开、案例补充、金句提炼等不同环节,设计高度结构化、包含示例的Prompt模板。例如,给AI提供几个你过往的优秀标题作为参考,让它模仿风格;明确要求“在第二个论点中插入一个最新的行业事件作为案例”。
  • 样式模板库:不要每次转换都写死样式。可以将不同的公众号排版风格(科技风、文艺风、简约风)抽象成多个CSS模板文件。在脚本运行时,让用户选择或根据文章主题自动匹配模板。
  • 本地知识库集成:这是提升文章专业性和独特性的关键。你可以维护一个本地的Markdown或JSON知识库,存放你的个人观点、常用数据、经典案例。在生成内容的Prompt中,指示AI优先从这些本地资料中寻找素材,这能有效避免内容空洞和同质化。
  • 图片与多媒体处理:脚本可以解析文章,自动在合适的位置插入图片占位符[图: 描述]。然后,你可以编写另一个脚本,根据描述调用Unsplash API或从本地图库中选取图片,并自动上传到公众号素材库,生成链接替换占位符。
  • 合规与风险预检:集成一个本地敏感词词库,在文章生成后自动扫描,高亮标出风险词,并给出替换建议。这能极大降低后期人工审核的成本和遗漏风险。

4. 避坑指南:构建与使用SKILL中的常见问题

在亲手搭建和使用这类自动化写作SKILL的过程中,你会遇到不少坑。以下是一些典型的陷阱和解决方案:

4.1 环境配置与依赖管理之痛

  • 问题npm : 无法加载文件 ...\npm.ps1,因为在此系统上禁止运行脚本。这是Windows PowerShell的安全策略所致。

  • 解决:以管理员身份运行PowerShell,执行Set-ExecutionPolicy RemoteSigned,输入Y确认。完成后关闭终端重新打开即可。如果是在公司电脑,可能受组策略限制,需要联系IT部门,或者考虑使用WSL(Windows Subsystem for Linux)来获得一个更接近Linux的开发环境。

  • 问题:CLI工具安装成功,但执行命令报错“未找到”或“权限不足”。

  • 解决:首先确认是否全局安装(-g参数)。其次,检查系统的环境变量PATH是否包含了Node.js的全局安装路径(通常是C:\Users\你的用户名\AppData\Roaming\npm/usr/local/bin)。安装后可能需要重启终端。

4.2 AI生成内容的质量与可控性博弈

  • 问题:AI生成的文章“正确的废话”太多,缺乏洞见和个人色彩。

  • 解决:这本质上是Prompt设计问题。不要只给主题,要给出“约束”和“范例”。

    • 约束:明确限制文章长度、禁止使用的词汇、必须包含的核心观点。
    • 角色扮演:让AI扮演“一个有着十年经验的某领域专家”、“一个言辞犀利的评论员”。
    • 提供范例:在Prompt中粘贴一段你过去的、风格满意的文章段落,告诉AI“请模仿这种语言风格和论述节奏”。
    • 分步控制:不要一次性生成全文。先生成大纲,你审核修改;再基于修改后的大纲生成第一部分,你审核;满意后再继续。这种“人类在环”的交互方式,能显著提升最终成果的质量和可控性。
  • 问题:生成的内容偶尔会出现事实错误或“幻觉”。

  • 解决:这是当前大模型的固有问题,无法根除,只能缓解。

    1. 关键信息本地化:涉及日期、数据、人名、产品名称等关键事实,尽量在Prompt中直接提供,或指示AI从你提供的本地资料中引用。
    2. 事后核查清单:在SKILL流程的最后,加入一个简单的核查步骤,例如,让AI自己总结文章中的三个核心数据和案例来源,供你快速复核。
    3. 心态调整:将AI定位为“超级助理”而非“全能作者”。它的初稿必然需要你的审核和修正,SKILL的价值是帮你完成初稿和格式,而不是交付终稿。

4.3 工作流设计的复杂性与维护成本

  • 问题:脚本越写越复杂,各个模块耦合严重,添加一个新功能(比如增加一个发布到其他平台的出口)很困难。

  • 解决:采用模块化设计。将“输入收集”、“AI调用”、“格式转换”、“文件输出”等环节拆分成独立的Node.js模块(.js文件)。通过配置文件来定义工作流的顺序。这样,当你需要增加一个“语音转文字”作为输入源时,只需新增一个模块,并在配置中替换掉原来的输入模块即可。使用像yargs这样的库来管理命令行参数,能让你的SKILL更专业、易用。

  • 问题:API调用成本与速率限制。频繁调用AI API会产生费用,并且可能遇到每分钟调用次数限制。

  • 解决

    1. 缓存策略:对于大纲、章节内容等,可以将其哈希后作为文件名存储下来。下次遇到相似主题的请求时,先检查缓存,避免重复生成。
    2. 队列与批处理:如果需要批量生成多篇文章的草稿,不要用循环瞬间发起所有请求。设计一个简单的任务队列,控制请求间隔。
    3. 使用性价比更高的模型:对于格式转换、简单文本整理等不需要很强创造性的任务,可以尝试调用更轻量、更便宜的模型,甚至用本地正则表达式和规则引擎来解决。

5. 超越公众号:SKILL思维的延展应用

当你成功构建起一个用于公众号的写作SKILL后,你会发现这套“定义任务 -> 串联工具 -> 自动化执行”的思维模式,其应用范围远不止于此。它本质上是一种人机协同的自动化工作流设计能力

  • 技术博客同步:你可以改造SKILL,使其在生成文章后,自动调用Hexo或Hugo的命令行工具,生成静态页面,并部署到你的博客网站。实现“一次创作,多平台发布”。
  • 周报/月报自动生成:编写一个SKILL,让它定期读取你的GitHub提交记录、Jira任务列表、日历日程,然后自动生成一份结构清晰的工作周报初稿。
  • 社交媒体内容矩阵:基于一篇长文(公众号文章),让SKILL自动提炼出不同长度的版本:一个适合微博的短评、一条适合小红书的种草笔记文案、一段适合视频号的口播稿脚本。
  • 个性化学习助手:设计一个SKILL,每天从你订阅的RSS源或新闻网站抓取指定领域的文章,让AI帮你总结核心要点,并提出几个思考问题,最后整理成一份个性化的每日学习简报。

这些应用的共同点是,它们都瞄准了那些有固定模式、重复性高、但又需要一定智能处理的“最后一公里”任务。SKILL的价值,就在于用自动化和智能化的桥梁,将这些任务与你的核心工作流连接起来,从而真正释放出AI作为生产力工具的潜力。它不再是一个需要你频繁对话的聊天对象,而是一个被你精心调教、默默在后台为你处理繁琐事务的智能副手。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询