番茄小说自动化上传辅助助手(novel-daily-publisher)
这个技能解决什么
用户要的是每天定时定点把已写完的小说,以「单批 ≤10000 字、去了AI味、能过番茄审核」的形态,发到番茄作家后台。
核心约束(来自番茄平台规则,详见 references/tomato_review_rules.md):
- 单批体积建议 ≤10000 字(避免一次传太多被风控/卡审)。
- 种马后宫文零容忍:四女共侍一夫、多妻多恋明示、身体物化(胸部/翘臀等)、低俗色情暗示,会直接驳回。
- 去 AI 味:填充词(就在这时/忍不住/微微地…)、套路比喻、解释性旁白会被判低质。
本技能把"过审"和"上传"合成一条流水线:先过审(重构+去AI+扫描),再切批上传。
前置条件
- 完本小说
.docx放在工作区source/下(默认C:\Users\quany\WorkBuddy\novel-publish-pipeline,可用环境变量NOVEL_PIPELINE_DIR覆盖)。 - 若小说含结构性违规(种马后宫、多女共侍一夫等):在
state/reframe_map.json放一本"针对你这本书"的重构映射(见references/reframe_map.md怎么建)。放了这个文件,流水线会自动重构;没放则跳过重构、只做去AI+扫描(这种情况下有结构硬伤的书可能过不了审——日志会提示)。 - (可选自动上传)用户本机 Chrome/Edge 已开启远程调试(
chrome://inspect/#remote-debugging勾选允许),且已登录番茄作家后台。详见references/workflow.md。 - 需要
python-docx(托管 venv:C:/Users/quany/.workbuddy/binaries/python/envs/default/Scripts/python.exe)。
工作流程(每次被调用都按此顺序执行)
步骤 1 | 过审重构(可选,条件执行)
若 state/reframe_map.json 存在,调用 scripts/reframe_novel.py 重构人物关系(解决种马后宫等结构性硬伤)。该映射必须针对当前小说自建(见 references/reframe_map.md),不要直接套用 references/example_map.json(那是《重生2026》的样例,套到别书会误改正常文本)。
- 不存在则跳过,日志注明"未提供重构映射"。
步骤 2 | 去 AI 味(必做)
调用 scripts/deai_humanizer.py(humanizer 禁用词子集,fiction-safe),清除填充词/比喻连接词/套话结构。
步骤 3 | 生成当天批次(必做)
用 venv python 运行本技能编排脚本:
C:/Users/quany/.workbuddy/binaries/python/envs/default/Scripts/python.exe \
"<SKILL_DIR>/scripts/daily_publish.py"
脚本自动:读 source/ 小说 →(若有映射)重构 → 去AI → 按「第X章」切章 → 聚合出当天 ≤10000 字的一批 → 写 outbox/第NN批_番茄发布_YYYYMMDD.docx(python-docx 不可用时退回 .txt)→ 更新 state/progress.json → 全本 + 本批扫描审核风险词写 logs/。
结尾打印一句话汇报(文件名 / 第几批 / 字数 / 重构说明 / 风险提示),原样回传给用户。
> 若 source/ 下没有 .docx,脚本输出「【等待源文件】」,停止后续,提示放入小说。
步骤 4 | 审核风险复核(必做)
读取当天 logs/YYYYMMDD.log 风险提示。若检出「低俗色情/种马后宫」「未成年负面」「暴力/不适」等高危词:
- 先不要上传;
- 提示用户:这些词可能触发驳回,建议补一份 state/reframe_map.json 重构或手修;
- 若用户明确「仍要发布」,再继续。
步骤 5 | 上传番茄(条件执行)
判断浏览器是否可用:
node "<WEB_ACCESS_DIR>/scripts/check-deps.mjs"
exit 0→ 浏览器已连接,继续自动上传。- 非 0 / 未开远程调试 → 跳过自动上传,把 outbox 批次留给用户手动粘贴,提示用
scripts/outbox_extract.py取纯文本。
自动上传流程(浏览器已连接时,必须加载 web-access skill 并遵循其 CDP 指引):
1. 向用户展示 web-access 须知(部分站点对自动化操作有封禁风险,继续即视为接受)。
2. 从 state/tomato_url.txt 读取作家后台 URL(没有则询问)。
3. 通过 CDP 打开该 URL,/eval 确认已登录;未登录则提示用户登录后继续,不强行操作。
4. 已登录 → 新建章节,找到标题框与正文编辑器,写入 outbox 批次正文;/click 触发「发布」。
5. state/progress.json 标记该批 uploaded: true;关闭自建 tab。
> 作家后台具体选择器运行时 /eval 探查,不硬编码。发布失败(验证码/限流)回退手动。
步骤 6 | 汇报(必做)
一句话说明:本次日期、输出了哪个文件、约多少字、是否成功上传、有无审核风险提示。
与自动化任务配合
本技能专为「每天定时运行」设计。典型自动化配置(由宿主 automation 创建):
- 触发:FREQ=DAILY,固定时刻(如 08:00),首次次日。
- 任务 prompt:加载本技能 + web-access → 执行步骤 1–6 → 汇报。注入 NOVEL_PIPELINE_DIR=<工作区路径>。
- 建议:先在 source/ 放书、按需建 state/reframe_map.json,再启用每日任务。
文件结构
novel-daily-publisher/
├── SKILL.md
├── scripts/
│ ├── daily_publish.py # 编排器:重构(可选)+去AI+切≤1万字+outbox+风险扫描
│ ├── reframe_novel.py # 关系重构(bulk + 整章替换 + 标题),用 --map 指定本书映射
│ ├── deai_humanizer.py # 去 AI 味机械层(humanizer 禁用词子集)
│ ├── extract_docx.py # docx 提取为按段文本(人工诊断用)
│ ├── build_map.py # 从原始重构脚本重建映射 JSON(维护用)
│ └── outbox_extract.py # 一键提取当天批次纯文本,便于粘贴/上传读取
└── references/
├── tomato_review_rules.md # 番茄8类驳回规则与修改方向
├── reframe_map.md # 种马后宫→过审 方法论 + 如何为你的书建映射
├── humanizer_banned.md # 去 AI 味禁用词与结构清单
├── example_map.json # 《重生2026》样例映射(114条+第40章整章替换),仅作模板参考
└── workflow.md # 搭建指南:远程调试、作家后台URL、建自动化
已知边界(务必如实告知用户)
- 自动上传依赖浏览器当天在线 + 已登录:未开远程调试或番茄掉线 → 优雅回退「生成 outbox,手动传」。
- 结构重构需用户自建映射:
reframe_novel.py不会自动判断书里有没有多女设定,必须你提供state/reframe_map.json。不提供则只去AI+扫描,有硬伤的书会过不了审。 - 机械去AI不解决深层AI味:角色声纹趋同、节奏均匀、安全比喻、tell 而非 show 需逐章人工重写,不在一次性脚本范围。
- 不自动处理封面/版权库/时政敏感库:这三类需用户另行人工核查。