三剪客 · 爆款标题工坊
> ## ⚠️ 先申请你自己的 API Key
>
> 本 Skill 不内嵌任何密钥,也不代付费用。 请到
> 算力集市 api.a7w.cn 注册并创建你自己的 API Key
> (新用户有赠送点数,可以先免费试跑几条)。
>
> 拿到后填进环境变量 A7W_API_KEY,或直接传给 --key 参数。
> 请勿使用他人提供的 Key —— 用量与费用都记在 Key 所属账号上。
能做什么
给一个主题或产品,自动产出 N 个标题并四维打分排序,附 A/B 测试组合建议。
它替代的是运营每天最耗时的那个环节:不是"想不出标题",而是"想出 30 个之后不知道该用哪个"。
一条命令跑完四件事:
- 出稿 —— 按你选的平台口径一次生成 N 个标题(默认 30),四套公式轮换,避免同一句式刷屏
- 打分 —— 点击欲望 / 信息量 / 平台适配 / 合规,各 1~10 分,加权合成总分降序排列
- 卡两道闸 —— 本地内置广告法违禁词表 + 模板污染检查(公式名/占位符泄漏),
命中就标红、强制压分、退出码变 3,能进 CI 当门禁 - 给打法 —— 从排行里挑出"只差一个变量"的标题配对,告诉你这一对测什么变量、赢了说明什么
| 你最关心 | 答案 |
|---|---|
| 多少钱 | 按 tokens 计费,一次生成 30 条标题通常几千 token,成本很低 |
| 要多久 | 一次调用出一批,实测十几秒到一分钟(取决于模型与条数) |
| 要装什么 | 什么都不用装。只用 Python 标准库,不需要 pip install 任何东西 |
| 支持哪些平台 | 小红书 / 抖音 / 公众号 / 知乎,字数上限与语感口径各不相同 |
| 会瞎编数据吗 | 不提供 --evidence 就不许编数字,提示词里写死了这条约束 |
怎么用(命令行)
第 0 步:获取 API Key
到 api.a7w.cn 注册,创建一个 API Key(形如 sk-...)。
第 1 步:装依赖
零依赖。 不需要 pip install 任何东西,只要机器上有 Python 3.7+:
python3 --version
包里自带的 scripts/a7w.py 是零依赖客户端(只用 urllib / json / mimetypes),
scripts/run.py 也只用标准库。
第 2 步:填 Key
# Linux / macOS
export A7W_API_KEY=sk-你的key
# Windows PowerShell
$env:A7W_API_KEY="sk-你的key"
也可以存进配置文件反复用(推荐):
python3 scripts/a7w.py login --key sk-你的key
第 3 步:先确认网关通(免费,不花点数)
python3 scripts/run.py models
这个命令打的是 GET https://api.a7w.cn/api/v1/models,会列出当前在架的模型。
> 模型名会变,一定用 models 子命令现查,别写死在脚本里。
> 但要注意:deepseek-chat 这个别名实测可用(会路由到 deepseek-flash),
> 而它不在 /api/v1/models 的返回列表里 —— 所以"列表里没有"不等于"不能用"。
第 4 步:跑第一个例子
python3 scripts/run.py gen --topic "便携榨汁杯" --platform xiaohongshu --count 12
输出是按总分降序的 Markdown 排行表 + 逐条说明,命中违禁词的标题会标红并压分。
想先看不花钱的提示词:
python3 scripts/run.py gen --topic "便携榨汁杯" --platform xiaohongshu --dry-run
完整工作流
# 1) 生成 30 条并落盘(JSON,便于后续处理)
python3 scripts/run.py gen --topic "便携榨汁杯" --platform xiaohongshu --count 30 \
--evidence "实测一次榨 350ml、清洗 40 秒、USB-C 充电 90 分钟满" \
--json --out titles.json
# 2) 拿 A/B 配对建议
python3 scripts/run.py ab --file titles.json
# 3) 给已有的标题单独打分(不改写原文)
python3 scripts/run.py score --file my-titles.txt --platform zhihu
直接用 curl 调(不依赖本包脚本)
标题工坊底层就是一个标准的 OpenAI 兼容调用:
curl -sS -X POST "https://api.a7w.cn/api/v1/chat/completions" \
-H "Authorization: Bearer $A7W_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "给「便携榨汁杯」写 5 个小红书标题,只输出 JSON"}],
"temperature": 0.8,
"max_tokens": 2048,
"response_format": {"type": "json_object"}
}'
参数说明
全局
| 参数 | 说明 |
|---|---|
--key |
临时指定 Key;优先级最高。别把它写进脚本或文档 |
--json |
以 JSON 输出,写在子命令前面或后面都可以(gen --json --out titles.json 可直接喂给 ab);JSON 模式下 stdout 只有一个完整 JSON,人读的进度与提示走 stderr |
--out <文件> |
把结果写到文件 |
--model |
模型名,默认 deepseek-chat(实测可用)。用 models 现查在架模型 |
--temperature |
采样温度,默认 0.8;想要更发散用 1.0,想更稳用 0.5 |
--max-tokens |
最大输出 token,默认 4096;生成 30 条标题建议不低于 4096 |
--dry-run |
只打印将发送的提示词,不调模型、不花钱 |
--no-json-mode |
不要求上游返回 JSON 对象(个别模型不支持 response_format 时用) |
gen —— 生成并打分
| 参数 | 说明 |
|---|---|
--topic |
必填。主题 / 产品 / 选题 |
--platform |
xiaohongshu(默认) / douyin / wechat / zhihu |
--count |
要几条标题,默认 30 |
--product |
产品名(与 topic 不同时用) |
--audience |
目标人群 |
--evidence |
可用的真实证据(实测数据 / 检测报告)。没写就不许编数字 |
score —— 给已有标题打分
| 参数 | 说明 |
|---|---|
--titles "标题1" "标题2" |
直接给标题,可多条(也可直接跟在命令后当位置参数) |
--file <文件> |
从文件读:.txt 一行一条;.json 读 gen --json 的结果 |
--platform |
按哪个平台口径打分,默认 xiaohongshu |
score 只打分不改写原文;模型漏掉的条目会用原文补回并按默认分兜底,保证一条不丢。
ab —— A/B 配对建议
| 参数 | 说明 |
|---|---|
--file <文件> |
gen --json --out 的结果文件(推荐用法) |
--titles ... |
也可直接给标题(此时按默认分配对) |
--platform |
平台口径;用 --file 时默认跟随文件里记录的平台 |
--pairs |
最多给几对,默认 5 |
ab 是纯本地确定性逻辑,不再花 token。它优先在同公式的标题之间配对
(同公式 = 钩子相同,差异只来自句式与信息密度),这样跑出来的胜负才可归因。
models —— 列出在架模型
| 参数 | 说明 |
|---|---|
--type |
模型类型,默认 text;传 all 看全部在架模型 |
--json |
原始 JSON |
四维评分与权重
| 维度 | 权重 | 打分依据 |
|---|---|---|
| 点击欲望 | 35% | 陌生人刷到会不会停一下 |
| 信息量 | 25% | 看完标题是否知道能得到什么 |
| 平台适配 | 25% | 字数上限与语感口径(超字数会被强制压分) |
| 合规 | 15% | 绝对化用语 / 虚假承诺 / 医疗投资功效 / 站外导流(命中会被强制封顶);模板污染也计在这一维 |
两个本地硬闸门(模型自评会被覆盖):
- 违禁词:命中按风险等级封顶合规维(高=1 / 中=4 / 低=7)
- 模板污染:标题里残留
{或}、出现公式名本身、或以「公式名+:/、/—/|」起头,
一律把合规维封顶到 3 分。这类标题不可直接发布——公式名和占位符都不是文案。 - 抄提示词示例(
prompt_echo):标题与提示词里的示例去掉标点后相等、
字符二元组 Jaccard ≥ 0.75、或示例的二元组覆盖度 ≥ 0.60,三条任一命中就按模板污染处理。
第三条是补漏:Jaccard 会被长度差摊薄——示例原样嵌进更长的标题里,实测相似度掉到 0.696
(放行),而覆盖度是 1.00(拦下)。覆盖度只看"示例被抄了多少",不看产出有多长。
长度门槛是相对的max(6, 示例长度/2),不是写死的 12。
为什么单列一条:实测模型会锚定提示词里的示例,曾有一轮最高分 89.0 的标题
一字不差就是提示词示例——最高分变成"抄标准答案"而不是"真最好",排序就废了。
提示词侧的对策是不出现任何可复制的完整标题,举例统一用不同主题(电动车充电桩)。
两闸门任一命中都会标红 + 汇总到 stderr + 退出码变 3。
总分 = (点击欲望 × 0.35 + 信息量 × 0.25 + 平台适配 × 0.25 + 合规 × 0.15) × 10
评分细则见 references/scoring-rubric.md。
退出码(可直接用于 CI)
| 退出码 | 含义 |
|---|---|
0 |
全部干净 |
3 |
有标题命中违禁词,或有模板污染(结果已输出,必须人工复核后才可发布) |
4 |
调用失败(网络 / 鉴权 / 点数 / 模型名) |
130 |
用户中断 |
--json 输出契约(给流水线与 agent 消费,只在 --json 下生效):
- 成功:结果对象里多一个
"ok": true;顶层是数组时包成{"ok": true, "data": [...]} - 失败:stdout 输出一个 JSON 信封,形如
{"ok": false, "exit": 3, "error": {"kind": "gate", "message": "…"}}(exit就是本次真实退出码),
kind取gate/usage/budget/call/interrupt/internal。
internal是没预料到的异常(代码 bug)的兜底:此时 stdout 给信封、
完整 traceback 原样打到 stderr、退出码固定 1 —— 报 bug,不藏 bug
—— 只有在本次还没吐过任何 JSON 结果时才补这个信封;已经吐过结果时
(例如跑到一半才发现比例不合格),ok就写在那个结果里,退出码不变 - 人读文案照旧走 stderr;退出码语义一个都不变;非
--json模式输出与以前完全一致 --json写在子命令前面或后面都可以
平台字数上限
| 平台 | 上限(字符) | 语感口径 |
|---|---|---|
xiaohongshu |
20 | 口语、真诚、像朋友安利,emoji 最多 2 个 |
douyin |
15 | 前 3 个字出冲突或悬念,口语到能直接念 |
wechat |
25 | 双段式或完整句,偏理性克制,有信息势能 |
zhihu |
25 | 专业、有信息密度,提问或结论前置 |
已知特性:产出普遍明显短于上限,这是有意保留的行为,不是缺陷。
实测(每平台 2 轮 × 12 条,主题"便携榨汁杯"):
| 平台 | 上限 | 实测均字数 | 占上限 |
|---|---|---|---|
| 小红书 | 20 | 10.8 ~ 12.4 | 54% ~ 62% |
| 抖音 | 15 | 9.2 ~ 9.3 | 61% ~ 62% |
| 公众号 | 25 | 14.8 ~ 16.8 | 59% ~ 67% |
| 知乎 | 25 | 14.9 ~ 15.8 | 60% ~ 63% |
上限在这个包里只当"硬红线"用,不当目标值。 我们试过加一条"长度建议落在上限
70%~90%"的描述性约束,四平台各跑 2 轮,结果是回退掉了(依据见下):
| 平台 | 加约束前 | 加约束后 | 变化 |
|---|---|---|---|
| 小红书 | 11.6 | 11.9 | +2%(两轮 13.0 / 10.8,轮间差 2.2 字) |
| 抖音 | 9.2 | 11.0 | +19%(最有效的平台) |
| 公众号 | 15.8 | 17.6 | +11% |
| 知乎 | 15.4 | 14.9 | -3%(反向) |
回退理由:
1. 效果不一致——抖音/公众号变长,小红书几乎不动,知乎反而更短;
小红书两轮之间就差了 2.2 字,只有 2 次采样时这个改动的收益落在噪声范围内。
2. 最需要变长的知乎(上限 25,实测最短)恰好没反应,说明"提问式/反直觉"这类
平台结构本身有长度天花板,加一句比例约束撬不动它。
3. 引入了新的坏味道——96 条里出现 2 条(2.1%)填充词标题("通勤包里塞它真的不占地"),
即约束里明令禁止的"真的"仍被用来凑长度。为长度指标引入语言质量风险,不划算。
所以:远短于上限是可接受的,不要用指标去拽它。 如果你确实需要更长的标题,
优先用 --evidence "…" 提供具体事实(信息量自然变长),
而不是加长度约束——前者是加信息,后者是加字。
排错
| 现象 / 报错 | 原因 | 怎么办 |
|---|---|---|
Missing or invalid relay API key(HTTP 401) |
Key 无效、已过期或写错 | 重新到 https://api.a7w.cn/ 领取;确认没把 Bearer 重复写进环境变量 |
| 点数不足(HTTP 402) | 账号点数用完 | 到 https://api.a7w.cn/ 充值后重试 |
| 模型不存在(HTTP 404) | 模型名写错或已下架 | python3 scripts/run.py models 现查在架模型名 |
上游 502 / upstream timeout |
网关到上游的瞬时抖动,实测很常见 | 脚本已内置退避重试(最多 4 次)。连续失败就换模型,或降低 --count 分批跑 |
鉴权失败(401) |
A7W_API_KEY 为空或含空格 |
echo $env:A7W_API_KEY 检查;用 --key 临时覆盖验证 |
模型返回的不是合法 JSON |
模型在 JSON 前后多吐了字符或解释 | 脚本已用 json.JSONDecoder().raw_decode() 扫描第一个完整对象。仍失败就加 --no-json-mode 并换模型 |
模型没产出任何可用标题 |
输出被 max_tokens 截断 |
加大 --max-tokens(30 条建议 4096 以上),或减小 --count |
| 标题全部挤在 8 分以上 | 模型没在区分,标尺漂移 | 把 --temperature 提到 1.0 重跑,或换一个模型 |
| 标题超字数很多 | 模型无视字数上限 | 脚本已把超限标题的平台适配分强制压到 5 分(超 5 字以上压到 3 分)并标注超字数 |
| 标题里出现「结论前置:」这类公式名 | 模型把公式名当成了标题前缀 | 脚本已把它判为模板污染:合规维封顶到 3 分、标红、退出码 3。删掉公式名前缀即可发布 |
| 大量标题命中违禁词 | 主题本身涉及医疗 / 金融等高压类目 | 见 references/compliance.md,改动文案角度,或直接人工重写 |
PermissionError / [Errno 13] |
输出目录不可写 | 换 --out 路径;确认不在只读目录里跑 |
| Windows 下中文乱码 | 控制台代码页不是 UTF-8 | 先执行 chcp 65001,或加 PYTHONIOENCODING=utf-8 |
收集排错信息时请附上:完整命令、--dry-run 的输出、原始报错文本。
不要在报错信息或截图里带上你的 API Key。
文件结构
sanjianke-title-workshop/
├── SKILL.md 本文件
├── README.md 给人看的说明
├── LICENSE.md MIT,署名三剪客
├── references/
│ ├── title-formulas.md 各平台标题公式与字数口径
│ ├── scoring-rubric.md 四维评分标准与权重
│ └── compliance.md 合规红线与违禁词
└── scripts/
├── a7w.py api.a7w.cn 零依赖客户端
└── run.py 标题生成 / 打分 / A/B 配对 / 模型清单
端点速查
| 用途 | 方法与路径 |
|---|---|
| 大模型对话(本包全部能力都走这个) | POST https://api.a7w.cn/api/v1/chat/completions |
| 模型清单 | GET https://api.a7w.cn/api/v1/models |
协议是 OpenAI 兼容:Authorization: Bearer <Key>,请求体用
model / messages / temperature / max_tokens / response_format。
联系我们
- 技术微信:9872659 —— 加好友时说一下是从哪个 Skill 找过来的,直接给你配套的 API Key 与能跑的示例。
- 要算力 / 要 API Key:算力集市 · 注册领 API Key —— 一个 Key 调用全部 AI 算力,注册、充值、创建 Key 都在这里。
- 更多 AI 插件与接口:AI 插件市场。
相关链接
- 算力集市 api.a7w.cn(注册领 Key):https://api.a7w.cn/
- 平台标题公式:
references/title-formulas.md - 四维评分标准:
references/scoring-rubric.md - 合规红线与违禁词:
references/compliance.md
> 免责声明:本包内置的违禁词表与判定口径是启发式自检工具,来自公开经验整理,
> 不构成法律意见,也不代表任何平台的官方审核标准。标题与内容的使用与合规责任由使用者承担;
> 医疗、保健食品、金融、母婴、特殊化妆品等高风险类目必须人工复核。