aws-wechat-article-writing
写公众号文章或改写已有内容,可调用第三方模型生成初稿。当用户提到「写文章」「写正文」「写稿」「出稿」「改写」「润色」「续写」「写个初稿」「帮我写」「公众号风格」「把提纲写成文章」「开头结尾」「用 DeepSeek 写」「用 GPT 写」时使用。注意:需要用户明确知道写什么的时候才能直接使用,否则先通过aws-wechat-article-topics获取文章的基本信息。
What it does
长文写作
路由
从零发文、一条龙、完整流程 → aws-wechat-article-main。
配置检查 ⛔
任何操作执行前,必须按 首次引导 执行其中的 「检测顺序」。检测通过后才能进行以下操作(或用户明确书面确认「本次不检查」):
从选题到发布的前置规则(阻断、禁止擅自降级、「本次例外」等)见 aws-wechat-article-main/SKILL.md;本 skill 只描述写稿步骤。
写作模型:writing_model(provider、base_url、model 等)在 .aws-article/config.yaml;WRITING_MODEL_API_KEY 在仓库根 aws.env。键名对照 {baseDir}/../aws-wechat-article-main/references/env.example.yaml。
交互约定:须遵守 main 的智能体行为约束——未通过环境校验且未获用户明确「本次例外」时,不得默认改由当前 Agent 代写并假装流程完整。环境检查未通过时,只按 首次引导 处理配置选项,不要在同一条回复里混入写稿、草稿路径或多草稿选择;配置闭环后再进入本 skill 工作流。
工作流
写稿进度:
- [ ] 第0步:⛔ [首次引导 · 检测顺序](../aws-wechat-article-main/references/first-time-setup.md)
- [ ] 第1步:⛔ **`.aws-article/config.yaml`** 中 **`article_category`**、**`target_reader`**、**`default_author`**(trim 后)须**均非空**;缺则**逐项问用户**、用户确认后再**写回文件**;**禁止**从 **`article.yaml`** 等擅自抄录(与 [main](../aws-wechat-article-main/SKILL.md)「2) 全局账号约束」一致);**须先于**续旧/新开
- [ ] 第2步:⛔ **在不了解**用户要**续写既有草稿**还是**新开一篇**时,**须先询问**并确定本篇 `drafts/…` 目录,**再**进入以下步骤;**禁止**未确认就调用写作脚本(见 [main](../aws-wechat-article-main/SKILL.md)「3) 本篇准备」开头)
- [ ] 第3步:读取本篇约束与写作规范;**写稿前先按下文「说明文档资源库」判断是否查阅/是否传 `--reference`**
- [ ] 第4步:发布方式(`publish_method`)⛔
- [ ] 第5步:确定输入与写作方式
- [ ] 第6步:写作
- [ ] 第7步:自检与修正
- [ ] 第8步:展示并等待用户确认 ⛔
说明:第 2 步在用户已明确路径或意图(例如直接给出 drafts/…、或明确说「新开一篇」)时可不再重复盘问。
多草稿 / 未闭环:与第 2 步同原则——不了解续写/新开时须先问,禁止自动选中某一 drafts/… 跑写作脚本。
确认轮次优化
以下步骤可合并或静默通过以减少交互轮次:
- Step 1(全局三键):若
article_category、target_reader、default_author已非空 → 静默通过,无需再确认。 - Step 4(publish_method):若已是
draft/published/none(合法值)→ 静默通过(规则第3条已允许)。 - 合并询问:当需要同时确认 Step 2(新篇/续写)和 Step 4(发布意图)时,合并为一轮提问。
- 配图确认:若用户已给出明确主题且未提出风格要求,images skill 可按默认风格自动生成,无需单独确认配图方案。
最少轮次:用户意图明确时(如给出主题 + "写一篇文章"),理想轮次为 1 轮(确认标题/摘要)+ 写完后展示结果。
第1步:全局账号三键(.aws-article/config.yaml)⛔
在续旧/新开询问之前,打开 .aws-article/config.yaml,检查 article_category、target_reader、default_author 是否 trim 后均非空。任一项缺失:逐项询问用户,取得用户当轮明确答复后再写回该文件,再进入第 2 步。禁止从 article.yaml、其它草稿或仓库文件静默推断并写盘;可把从某文件读到的内容仅作建议展示,须用户同意后再写入。禁止跳过本步。禁止仅在对话里确认却不落盘。与 main「2) 全局账号约束」一致。
第2步:续旧稿还是新稿(不了解时须先问)⛔
当不清楚用户是要续写 drafts/ 下某篇进行中草稿还是新开一篇时:须先询问(可列出候选目录),待用户选定后再进入第 3 步。须在第 1 步全局三键已落盘之后执行。已明确时跳过本步询问。
目录命名:新开一篇时,目录名必须为 YYYYMMDD-标题slug(如 drafts/20260406-wechat-article-skills/)。YYYYMMDD 为当日日期,slug 为小写、连字符分隔的标题缩写。禁止省略日期前缀。
第3步:读取本篇约束与写作规范
⛔ 关键字段不得空跑:在调用 write.py 或按合并约束让 Agent 代写之前,确认合并后的 article_category、target_reader 均为非空字符串(trim 后);default_author 非空 或 本篇 article.yaml 的 author 非空。若任一项不满足,须暂停写稿,引导用户补全 .aws-article/config.yaml(及/或本篇 article.yaml),并实际写入文件——不要仅用对话表格收集「读者」却不落盘。全局三键的优先检查顺序见 main「2) 全局账号约束」;若第 1 步已正确落盘,此处多为合并 article.yaml 覆盖后的复核。
约束从哪来:write.py 会先读全局 .aws-article/config.yaml,再读本篇目录下的 article.yaml,把两边的键叠成一张表用来生成写作提示——若同一键在两份文件里都有,以本篇 article.yaml 为准。字段分工见 articlescreening-schema.md。
.aws-article/config.yaml:文风、结构预设、禁用词、字数、embeds等与「写什么、怎么写」有关的顶层字段会进入这张表。
writing_model/image_model两段只给脚本连 API 用(地址、模型名等),不整段放进给大模型的「写作说明」里,以免把技术配置当成正文要求。- 本篇
article.yaml:本篇标题、作者、摘要、publish_completed等;与 config 重名的键会覆盖 config。
write.py 在仓库根执行,按输入 .md 所在目录找到本篇 article.yaml;叠完后的约束表不能为空(一般只要 config.yaml 里已有账号/文风等即可)。publish_completed:新建或补全本篇 article.yaml 时须为 false;本篇发布真正结束后由 publish skill 改为 true;publish.py 不修改此字段。
default_structure / default_closing_block 指向的 预设正文来自 .aws-article/presets/(及用户目录下同名 presets),与配置中的文件主名对应。两者在本篇 article.yaml 中必须为单元素列表 [名](或空列表 []);write.py 对预设选择仅读取本篇 article.yaml,不再在执行阶段从 custom_* / default_* 候选池推断。
多候选自动选择:当 default_structure(或 default_closing_block)含多个候选时,Agent 须:
- 读取每个候选预设文件(如
.aws-article/presets/structures/<名>.md),了解其适用场景; - 结合本篇主题 / 选题卡内容,判断最匹配的一个;
- 将该名写入
article.yaml同键为单元素列表[名]; - 然后再调用
write.py。 禁止盲选第一个——须基于内容匹配。若无法判断,向用户展示候选及说明后请用户选择。
另加载 .aws-article/writing-spec.md(如有)。
| 字段 | 用途 |
|---|---|
target_reader | 读者画像 → 深度、用词、案例 |
tone | 调性 → 语气与句式 |
writing_style | 结构表达方式(口语/书面/故事/方法论等) |
配置中其它与写稿相关的键(如 topic_direction、forbidden_words、heading_density、target_word_count)一并写入约束。
说明文档资源库(写稿前)⛔
目的:减轻垂直领域表述含糊或臆测;默认路径为 .aws-article/assets/stock/references/(按文件命名存放说明类 Markdown;项目另有约定目录时一并视为同一类资源库)。
写作只有 两种方式,说明文档用法如下(二选一,勿混用同一条命令里的职责)。
方式一:智能体直接写稿
- 写稿前:查看资源库(及项目约定目录)里是否有与本篇主题、选题卡明显相关的说明文档。
- 写作时:可引用其中内容并转化为账号文风;没有相关文档就不引用,不阻断写稿。
draft.md:凡正文中实际引用或依据了某份说明文档的,在该处表述之后用括号附上该文件的仓库相对路径(路径须真实存在);未引用则不必加括号。- 配图占位(硬性):当
image_source不为user(合并config.yaml+ 本篇article.yaml)时,按image_density生成配图占位;若未配置或为空,默认每节一图。格式必须为,每个占位独占一行,封面占位放在标题之前;类型名与细则见 references/structure-template.md「配图标记」。 article.md定稿:面向读者发布,正文中不保留上述括号路径(与审稿/排版约定一致)。
方式二:write.py 写稿
- 运行脚本前:同样先查看/判断资源库是否有与主题相关的
.md(判断标准与方式一一致)。 - 有相关文档:在仓库根执行
write.py时传入--reference <路径>(可重复,最多 5 个;路径须在.aws-article/assets/stock/references/下,详见脚本与 usage)。脚本将全文注入系统提示「参考资料库」,并约定模型在依据处标注资料路径。 - 无相关文档:不传
--reference,仅靠选题卡与合并配置写稿即可。 - 若写作 API 因上下文/token 超限失败,减少
--reference篇数或换更短文档后重试。
禁止:将与主题无关的文档硬塞进正文;伪造说明文档中不存在的事实。
第4步:发布意图(publish_method)⛔
在调用 write.py 或进入第6步写作之前,确认 .aws-article/config.yaml 中的 publish_method(与 发布 skill、articlescreening-schema.md 一致):
| 取值 | 含义(向用户说明时用 plain 语言) |
|---|---|
draft(默认) | 定稿后若走 publish.py full,只把图文写入公众号草稿箱,不自动「发出去」。 |
published | 定稿后 publish.py full 会在创建草稿后再提交发布(异步)。也可用 full --publish 单次强制带发布。 |
none | 询问微信配置后用户明确不想填写:写入 publish_method: none。publish.py full 会直接跳过、不调微信;写稿/审稿/排版等照常。 |
规则:
- 默认保持或写入
publish_method: draft,除非用户明确要对外发布 → 改为published;明确不填微信、不走上传 → 改为none。 - 微信:提醒发布需要
aws.env;用户拒绝填写 →none,不要代跑publish.py full(跑了也会无操作退出)。 - 若已是
draft/published/none(小写):可不重复盘问。
禁止:在 publish_method 非法时调用 write.py;禁止未经同意默认 published。
第5步:确定输入与写作方式
输入:topic-card.md / 用户提供的提纲或素材 / 用户口述主题;并已按上文「说明文档资源库」完成判断(直接写稿则已决定是否引用;走 write.py 则已决定是否传 --reference)。
写作方式(优先级):
- 优先:调用第三方模型(
write.py draft/rewrite/continue)— 依赖config.yaml的writing_model+aws.env的WRITING_MODEL_API_KEY(见 usage.md) - 自动降级:模型未配置(退出码 2)→ 先
write.py prompt <mode> <input>获取提示词 JSON,再由 Agent 按相同提示词直接写,无须「本次例外」确认 - 故障降级:调用失败(退出码 1)→ 按下方重试/排错逻辑
必须告知用户当前使用的方式:
- 已配置且调用脚本 →
ℹ️ 使用 write.py 调用第三方模型({model}) - 模型未配置自动降级 →
ℹ️ 写作模型未配置,本次由当前对话模型直接写稿(使用相同写作约束) - 故障降级 Agent 直写 →
ℹ️ 第三方 API 不可用,本次由当前对话模型代写(使用相同写作约束),并说明原因
write.py 退出码处理(智能体必选分支)
运行脚本后须把终端里的具体报错原样摘要给用户(或引用关键行),勿只说「调用失败」。
按退出码与报错类型分支处理:
| 类型 | 判断线索 | 智能体动作 |
|---|---|---|
| 未配置(退出码 2) | stderr 含 [NO_MODEL] | 自动降级:运行 write.py prompt <mode> <input> 获取提示词 JSON({"system_prompt": "...", "user_prompt": "..."})→ Agent 按该 system_prompt 和 user_prompt 写文章 → 输出到 -o 指定路径或展示给用户。无须用户确认或「本次例外」。 |
| 网络类(退出码 1) | 超时、连接失败、URLError、网络错误:、临时性 502/503 等 | 必须自动再试 1 次(可简短等待后重跑同一命令,并告知用户「正在重试」)。第二次仍为网络类失败 → 改用 write.py prompt 获取提示词后由 Agent 按相同约束代写;必须明确告知:第三方 API 网络不可用,本次由对话模型代写。 |
| 配置/凭证类(退出码 1) | 401/403、Key 无效、未找到写作约束、YAML 解析失败等 | 不要为「省事」自动降级掩盖问题。列出须检查项(config.yaml 的 writing_model、aws.env 的 WRITING_MODEL_API_KEY、本篇目录是否有 article.yaml 等),请用户修正后重跑 write.py。若用户明确打字愿意本次改由 Agent 代写,再按 main「本次例外」处理并留痕。 |
| 业务/内容类(退出码 1) | 4xx 中除鉴权外(如 400 参数)、模型返回空等 | 将 API 返回体摘要给用户;可先根据提示改 model / 请求参数再试一次;仍失败则与用户商定是否 Agent 代写。 |
Agent 代写时提示词获取:无论哪种降级路径,Agent 代写前都应先运行 write.py prompt <mode> <input>(--instruction 按需传入),取回与 write.py 调第三方模型时完全相同的 system_prompt 和 user_prompt,确保写作约束一致。
禁止:配置明显错误时静默改用 Agent 写稿却不说明;网络降级后不告知用户「本次未走第三方模型」。
第6步:写作
写作时必须遵循第3步读取的 target_reader、tone、writing_style(来自合并后的约束):深度与用词贴合读者,语气贴合调性,结构与表达方式贴合文章风格。
用户供图分支(image_source: user):
- 用户图片须先放入本篇
imgs/;随后由智能体读图分析并生成或补全img_analysis.md(可用user_image_prepare.py先生成模板再填写)。未落盘img_analysis.md不得调用write.py,否则脚本会报错退出。 img_analysis.md是写稿时配图与章节顺序的唯一依据:write.py会把它并入提示,按「建议章节 / 推荐用途」把每张图放到合理位置(可重排章节以匹配叙事)。img_analysis.md中“推荐用途:封面”必须且只能有 1 处;否则不得写稿。- 写稿时直接使用用户图片路径(
imgs/xxx.png),不再输出placeholder。 image_source只允许:generated/user。禁止写user_provided。- 该字段由智能体按流程动态更新:默认
generated;进入用户供图替换流程时写为user。
状态切换规则(article.yaml):
- 新建文章默认:
image_source: generated、publish_completed: false。 - 当进入“用户上传图片替换/重写”流程时:将
image_source改为user,并将publish_completed置回false(表示需重新发布闭环)。 - 重新发布成功且有回执后:再写回
publish_completed: true。
文章结构:按优先级加载结构预设:
- 用户指定(「用清单体结构」)
- 本篇
article.yaml的default_structure(单元素列表) .aws-article/presets/structures/下的文件- 内置默认:references/structure-template.md
文末区块:按优先级加载:
- 本篇
article.yaml的default_closing_block指定的文件(单元素列表) - 合并约束中
closing_block非空字符串(若有) - fallback:内置默认文末(分割线 + 一句关注引导):
---\n觉得有用?点个关注,持续获取优质内容。
默认模式下,写作时在需要图的位置插入配图标记 (规则见 write.py 系统提示与 references/structure-template.md「配图标记」)。
调用第三方模型时的脚本用法:references/usage.md
第7步:自检与修正
按写作规范做一轮自检(禁用词、段落长度、开头吸睛度、小标题密度),发现问题自动修正。
配图占位自检(默认模式):当 image_source != user 时,核对 draft.md 是否满足 image_density(未配置则按每节一图);缺失或格式不合法时,先补齐/修正  再进入审稿或配图步骤。
续写补充(中间产物门禁):
- 续写新增
时,必须把该占位计入“待配图清单”(供 images 步骤生成与替换)。 - 进入发布相关步骤前,必须复核本篇正文产物:
article.md/article.html若仍含placeholder,只能标记为“正文配图未完成”,禁止宣称发布闭环完成。
第8步:展示并等待用户确认 ⛔
过程文件
| 读取 | 产出 |
|---|---|
topic-card.md、.aws-article/config.yaml、本篇 article.yaml | draft.md(含配图标记);本 skill 可能更新 publish_method(发出去 → published;不填微信 → none;默认 draft);新建/补全 article.yaml 时保持 publish_completed: false |
Capabilities
Install
Quality
deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 14 github stars · SKILL.md body (11,026 chars)