From d23226930d544af4d05deef5b21db30ae4e23266 Mon Sep 17 00:00:00 2001 From: ystyleb Date: Wed, 1 Apr 2026 14:23:45 +0800 Subject: [PATCH 1/3] feat(cpc): optimize topics, frameworks, and writing flow for CPC ad monetization --- ...e7091f34dc9efe81a5aa849_1774877425641.json | 31 +++++++++++++++++++ ...38554dbc75013fd7258e54a_1774877398717.json | 31 +++++++++++++++++++ ...65ffc35ea8adc710ee01497_1774859860380.json | 31 +++++++++++++++++++ ...832dbeef54f6d7c44b0da8c_1774864357665.json | 31 +++++++++++++++++++ ...e2a396e9797f3ddd3a7f22d_1774876931697.json | 31 +++++++++++++++++++ ...e2e63cdb511a0bddb20167c_1774877047642.json | 31 +++++++++++++++++++ ...128a3d830a68de19e6ac214_1774875317427.json | 31 +++++++++++++++++++ ...644121b90157ddb920cc087_1774876720567.json | 31 +++++++++++++++++++ references/frameworks.md | 7 +++++ references/topic-selection.md | 30 +++++++++++------- references/writing-guide.md | 11 ++++--- 11 files changed, 280 insertions(+), 16 deletions(-) create mode 100644 .tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json create mode 100644 .tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json create mode 100644 .tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json create mode 100644 .tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json create mode 100644 .tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json create mode 100644 .tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json create mode 100644 .tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json create mode 100644 .tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json diff --git a/.tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json b/.tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json new file mode 100644 index 0000000..432d12c --- /dev/null +++ b/.tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "9e67fcb59e7091f34dc9efe81a5aa849", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774877425641", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"你是谁?\"}", + "create_time": "1774877425273", + "message_id": "om_x100b5393e1dffc68b27ccdde95570ba", + "message_type": "text", + "update_time": "1774877425273" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/.tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json b/.tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json new file mode 100644 index 0000000..0079dc2 --- /dev/null +++ b/.tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "ddec3f37138554dbc75013fd7258e54a", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774877398717", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"123\"}", + "create_time": "1774877398401", + "message_id": "om_x100b5393e3a9ecacb48c346c3687d90", + "message_type": "text", + "update_time": "1774877398401" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/.tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json b/.tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json new file mode 100644 index 0000000..9c2e8f6 --- /dev/null +++ b/.tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "56063519065ffc35ea8adc710ee01497", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774859860380", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"?\"}", + "create_time": "1774859859975", + "message_id": "om_x100b53972bf17488b3255dc970fc0b8", + "message_type": "text", + "update_time": "1774859859975" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/.tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json b/.tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json new file mode 100644 index 0000000..956f39b --- /dev/null +++ b/.tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "938e06bc0832dbeef54f6d7c44b0da8c", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774864357665", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"https://ycnkbxhjisg4.feishu.cn/base/PEghbgBVtaiWhDswFXQckRyanPd\"}", + "create_time": "1774864357279", + "message_id": "om_x100b5390308208a4c49d59e637397ee", + "message_type": "text", + "update_time": "1774864357279" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/.tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json b/.tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json new file mode 100644 index 0000000..62e56dc --- /dev/null +++ b/.tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "02823b5e8e2a396e9797f3ddd3a7f22d", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774876931697", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"衡阳滚’\"}", + "create_time": "1774876931287", + "message_id": "om_x100b5393deff60acb25a44b7a950e00", + "message_type": "text", + "update_time": "1774876931287" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/.tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json b/.tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json new file mode 100644 index 0000000..00ce2b3 --- /dev/null +++ b/.tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "8ebb277eae2e63cdb511a0bddb20167c", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774877047642", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"苹果\"}", + "create_time": "1774877047332", + "message_id": "om_x100b5393d9be04a8b2dcb00d3b45509", + "message_type": "text", + "update_time": "1774877047332" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/.tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json b/.tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json new file mode 100644 index 0000000..554f315 --- /dev/null +++ b/.tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "8b3a1e97b128a3d830a68de19e6ac214", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774875317427", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"ping\"}", + "create_time": "1774875316985", + "message_id": "om_x100b53936580dca8b2501a592c75fe1", + "message_type": "text", + "update_time": "1774875316985" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/.tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json b/.tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json new file mode 100644 index 0000000..ca2cdb4 --- /dev/null +++ b/.tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json @@ -0,0 +1,31 @@ +{ + "schema": "2.0", + "header": { + "event_id": "b774d5337644121b90157ddb920cc087", + "event_type": "im.message.receive_v1", + "app_id": "cli_a94089c1b038dbcb", + "tenant_key": "1bb39f46345e575d", + "create_time": "1774876720567", + "token": "" + }, + "event": { + "message": { + "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", + "chat_type": "p2p", + "content": "{\"text\":\"收到了吗?\"}", + "create_time": "1774876720233", + "message_id": "om_x100b5393cdcd6ca4b214475ce412e77", + "message_type": "text", + "update_time": "1774876720233" + }, + "sender": { + "sender_id": { + "open_id": "ou_2238151255a13ee063ef44793abead34", + "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", + "user_id": null + }, + "sender_type": "user", + "tenant_key": "1bb39f46345e575d" + } + } +} diff --git a/references/frameworks.md b/references/frameworks.md index a1c4554..b479956 100644 --- a/references/frameworks.md +++ b/references/frameworks.md @@ -4,6 +4,13 @@ 根据选题和客户风格,生成 5 套差异化写作框架供用户选择。每套框架是一个完整的文章骨架——不是写文章本身,而是告诉写作步骤"每一段写什么、怎么写"。 +## CPC 变现场景要求(所有框架通用) + +所有生成的框架必须融入以下“高完读率与高点击率”结构,以优化流量主广告的点击表现: +1. **开头“前置钩子”**:在开头最后一句,必须预告“文末有一份核心资料/避坑清单/实操工具分享”,以此引导读者滑到底部(提高底部广告曝光几率)。 +2. **H2过渡处的“认知停顿”**:在核心大段落(特别是从分析问题转向解决问题的过渡处),刻意设计引人深思的疑问句或悬念。这种留白的“空隙”是平台高频插入文中广告的位置,读者在思考停顿时极易点击相关广告。 +3. **结尾的“需求激发”**:结尾不要做四平八稳的总结。要制造“未完成感”,让读者觉得自己还需要一个工具/社群/服务来落地执行。这种心态下,对底部商业广告的点击率最高。 + ## 5 套框架类型 ### 框架 A: 痛点型 diff --git a/references/topic-selection.md b/references/topic-selection.md index e17c9cf..6390921 100644 --- a/references/topic-selection.md +++ b/references/topic-selection.md @@ -13,11 +13,11 @@ ## 评估维度 -对每个热点,按三个维度打分(1-10): +对每个热点,按四个维度打分(1-10): -### 热度分(权重 30%) +### 热度分(权重 20%) -看这个话题有多火: +看这个话题有多火(权重下调,不再盲目追求无商业意图的纯流量): - 热搜前 10 → 8-10 分 - 热搜 10-30 → 5-7 分 - 30 名之后 → 1-4 分 @@ -32,14 +32,21 @@ - 完全无关 → 0 分 - **命中 blacklist 的词汇或话题 → 直接判 0,整个选题淘汰** -### 切入价值分(权重 30%) +### 切入价值分(权重 20%) 看这个话题写出来能不能好看: -- 有明确的反直觉点或信息差 → 8-10 分 +- 有明确的反直觉点,且能找到“带需求”的切入点 → 8-10 分 - 有争议、有正反两面可以讨论 → 6-7 分 - 纯资讯类、搬运即可 → 3-4 分 - 太复杂不适合 2000 字展开,或太浅没东西可写 → 1-2 分 +### 商业意图分(权重 20%) + +看这个话题带来的读者是否有点击文中/底部广告的高转化潜力(CPC 价值): +- 涉及搞钱、工具推荐、效率提升、职场进阶、商业模式分析 → 8-10 分 +- 带有具体痛点、需要寻找解决方案的场景 → 6-7 分 +- 纯情绪共鸣、吃瓜八卦,无法引申到痛点 → 1-3 分 + ## content_style 加成 根据客户的 content_style,对切入价值分做加成: @@ -57,7 +64,7 @@ ## 综合评分 ``` -总分 = 热度 × 0.3 + 相关度 × 0.4 + 切入价值(含加成) × 0.3 +总分 = 热度 × 0.2 + 相关度 × 0.4 + 切入价值(含加成) × 0.2 + 商业意图 × 0.2 ``` ## 输出格式 @@ -69,10 +76,11 @@ - 对应标题(20-28字):"{为这个选题拟的公众号标题}" - 切入角度:{1-2 句话说明怎么写、从什么角度切} -- 热度:X/10 | 相关度:X/10 | 切入价值:X/10 +- 评估:热度 X/10 | 相关度 X/10 | 切入价值 X/10 | 商业意图 X/10 - 点击率潜力:{高/中/低} — {原因,如"标题含数字+反直觉,点击率高"} - SEO 友好度:{seo_score}/10 — {引用 seo_keywords.py 的数据,如"百度 8 + 360 10,相关词丰富"} -- 推荐框架:{痛点型/故事型/清单型/对比型/热点解读型} +- 推荐框架:{痛点型/故事型/清单型/对比型/热点解读型/复盘型} +- 高 CPC 广告推荐:{从微信广告库39个类目中挑选 3-5 个最优项,如"软件工具"、"金融"} — {说明原因,比如为何读者此时会有此类需求} - 推荐理由:{为什么这个值得写} - 历史标记:{如果 history.yaml 中近 7 天有相同关键词,标注"⚠️ 近期已覆盖类似话题"} ``` @@ -98,16 +106,16 @@ ## 常青选题 -除了热点选题,额外生成 **2-3 个常青选题**——不依赖时效性,长尾流量价值高。 +除了热点选题,额外生成 **4-5 个常青选题**(占比提升,专注沉淀高 CPC 价值的长尾流量)——不依赖时效性,商业转化意图强。 常青选题来源: -- 从用户的 `topics` 列表出发,生成教程/方法论/经验总结/工具推荐类选题 +- 从用户的 `topics` 列表出发,生成教程/方法论/经验总结/工具推荐/避坑指南类选题 - 参考 SEO 数据中搜索量高但竞争度低的关键词 - 如果有 history.yaml,避免与已写过的常青内容重复 常青选题的评分规则: - 热度分固定为 5(不依赖热搜,但也不是 0) -- 相关度和切入价值正常评分 +- 相关度、切入价值、商业意图正常评分(常青选题的商业意图分通常较高) - 标注"🌲 常青",与热点选题混排 ## 选题不足时的处理 diff --git a/references/writing-guide.md b/references/writing-guide.md index 3e4d75d..902b16e 100644 --- a/references/writing-guide.md +++ b/references/writing-guide.md @@ -74,15 +74,15 @@ AI 倾向窄词汇、高频词比例偏高。人类同一篇文章里混用书 **writing-config 参数**:`word_temperature_bias`(cold/warm/hot/balanced) -#### 1.3 段落长度节奏 `→ 对抗突发性检测` +#### 1.3 段落长度节奏 `→ 对抗突发性检测与优化CPC广告曝光` -AI 段落长度趋于均匀。人类段落忽长忽短。 +AI 段落长度趋于均匀。人类段落忽长忽短。在 CPC 计费模式下,密集的文字块会导致读者视觉疲劳跳出(无法看到底部广告)。 **要求**: - 禁止连续 2 个长度接近(±20 字)的段落 -- 穿插 1 句话的短段落(强调、转折、吐槽) -- 长段落不超过 150 字 -- 偶尔 2-3 个短句连续排列,制造密集节奏 +- **多用单句成段**:用 1 句话的短段落(强调、反问、悬念、吐槽)作为段落间的视觉缓冲。这种留白是**微信自动插入文中核心广告的最佳位置**。 +- **严控长段落**:极具压迫感的长段落不允许超过 100 字,遇到复杂逻辑必须拆分成短行或要点。 +- 偶尔 2-3 个短句连续排列,制造快速眼动和滑动的流畅节奏。 **writing-config 参数**:`paragraph_rhythm`(structured/wave/chaotic) @@ -107,6 +107,7 @@ AI 段落长度趋于均匀。人类段落忽长忽短。 | 模式 | 特征 | 适合场景 | |------|------|---------| +| 需求激发(首选) | 制造未完成感:"方法说完了,但你要做成,还需要个好工具/避坑指南。"(诱导点击底部广告) | 商业变现、干货类、工具类 | | 自然断流 | 像聊天说到一半停了("我先睡了"/"就这样吧") | 深夜风格、随笔 | | 未答之问 | 以问题结尾,不给答案 | 争议话题、引发思考 | | 场景回扣 | 回到开头的意象/场景 | 叙事类、故事驱动 | From 62492424907d6f5383e08df14e0c2818de7d7893 Mon Sep 17 00:00:00 2001 From: ystyleb Date: Thu, 2 Apr 2026 17:41:22 +0800 Subject: [PATCH 2/3] chore: remove and ignore .tmp directory containing sensitive webhook events --- .gitignore | 1 + ...e7091f34dc9efe81a5aa849_1774877425641.json | 31 ------------------- ...38554dbc75013fd7258e54a_1774877398717.json | 31 ------------------- ...65ffc35ea8adc710ee01497_1774859860380.json | 31 ------------------- ...832dbeef54f6d7c44b0da8c_1774864357665.json | 31 ------------------- ...e2a396e9797f3ddd3a7f22d_1774876931697.json | 31 ------------------- ...e2e63cdb511a0bddb20167c_1774877047642.json | 31 ------------------- ...128a3d830a68de19e6ac214_1774875317427.json | 31 ------------------- ...644121b90157ddb920cc087_1774876720567.json | 31 ------------------- 9 files changed, 1 insertion(+), 248 deletions(-) delete mode 100644 .tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json delete mode 100644 .tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json delete mode 100644 .tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json delete mode 100644 .tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json delete mode 100644 .tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json delete mode 100644 .tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json delete mode 100644 .tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json delete mode 100644 .tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json diff --git a/.gitignore b/.gitignore index c4c474b..df5fafb 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ CLAUDE.md # IDE .vscode/ .idea/ +.tmp/ diff --git a/.tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json b/.tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json deleted file mode 100644 index 432d12c..0000000 --- a/.tmp/lark-ai/events/im.message.receive_v1_9e67fcb59e7091f34dc9efe81a5aa849_1774877425641.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "9e67fcb59e7091f34dc9efe81a5aa849", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774877425641", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"你是谁?\"}", - "create_time": "1774877425273", - "message_id": "om_x100b5393e1dffc68b27ccdde95570ba", - "message_type": "text", - "update_time": "1774877425273" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} diff --git a/.tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json b/.tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json deleted file mode 100644 index 0079dc2..0000000 --- a/.tmp/lark-ai/events/im.message.receive_v1_ddec3f37138554dbc75013fd7258e54a_1774877398717.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "ddec3f37138554dbc75013fd7258e54a", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774877398717", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"123\"}", - "create_time": "1774877398401", - "message_id": "om_x100b5393e3a9ecacb48c346c3687d90", - "message_type": "text", - "update_time": "1774877398401" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} diff --git a/.tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json b/.tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json deleted file mode 100644 index 9c2e8f6..0000000 --- a/.tmp/lark-codex/events/im.message.receive_v1_56063519065ffc35ea8adc710ee01497_1774859860380.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "56063519065ffc35ea8adc710ee01497", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774859860380", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"?\"}", - "create_time": "1774859859975", - "message_id": "om_x100b53972bf17488b3255dc970fc0b8", - "message_type": "text", - "update_time": "1774859859975" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} diff --git a/.tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json b/.tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json deleted file mode 100644 index 956f39b..0000000 --- a/.tmp/lark-codex/events/im.message.receive_v1_938e06bc0832dbeef54f6d7c44b0da8c_1774864357665.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "938e06bc0832dbeef54f6d7c44b0da8c", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774864357665", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"https://ycnkbxhjisg4.feishu.cn/base/PEghbgBVtaiWhDswFXQckRyanPd\"}", - "create_time": "1774864357279", - "message_id": "om_x100b5390308208a4c49d59e637397ee", - "message_type": "text", - "update_time": "1774864357279" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} diff --git a/.tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json b/.tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json deleted file mode 100644 index 62e56dc..0000000 --- a/.tmp/lark-echo/events/im.message.receive_v1_02823b5e8e2a396e9797f3ddd3a7f22d_1774876931697.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "02823b5e8e2a396e9797f3ddd3a7f22d", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774876931697", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"衡阳滚’\"}", - "create_time": "1774876931287", - "message_id": "om_x100b5393deff60acb25a44b7a950e00", - "message_type": "text", - "update_time": "1774876931287" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} diff --git a/.tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json b/.tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json deleted file mode 100644 index 00ce2b3..0000000 --- a/.tmp/lark-echo/events/im.message.receive_v1_8ebb277eae2e63cdb511a0bddb20167c_1774877047642.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "8ebb277eae2e63cdb511a0bddb20167c", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774877047642", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"苹果\"}", - "create_time": "1774877047332", - "message_id": "om_x100b5393d9be04a8b2dcb00d3b45509", - "message_type": "text", - "update_time": "1774877047332" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} diff --git a/.tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json b/.tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json deleted file mode 100644 index 554f315..0000000 --- a/.tmp/lark-events-test/im.message.receive_v1_8b3a1e97b128a3d830a68de19e6ac214_1774875317427.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "8b3a1e97b128a3d830a68de19e6ac214", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774875317427", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"ping\"}", - "create_time": "1774875316985", - "message_id": "om_x100b53936580dca8b2501a592c75fe1", - "message_type": "text", - "update_time": "1774875316985" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} diff --git a/.tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json b/.tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json deleted file mode 100644 index ca2cdb4..0000000 --- a/.tmp/lark-events-test/im.message.receive_v1_b774d5337644121b90157ddb920cc087_1774876720567.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "schema": "2.0", - "header": { - "event_id": "b774d5337644121b90157ddb920cc087", - "event_type": "im.message.receive_v1", - "app_id": "cli_a94089c1b038dbcb", - "tenant_key": "1bb39f46345e575d", - "create_time": "1774876720567", - "token": "" - }, - "event": { - "message": { - "chat_id": "oc_b4d0fa77444c16d23200606d6cebca26", - "chat_type": "p2p", - "content": "{\"text\":\"收到了吗?\"}", - "create_time": "1774876720233", - "message_id": "om_x100b5393cdcd6ca4b214475ce412e77", - "message_type": "text", - "update_time": "1774876720233" - }, - "sender": { - "sender_id": { - "open_id": "ou_2238151255a13ee063ef44793abead34", - "union_id": "on_4abb720a3a21ceb697a2fe1b17ad5ca3", - "user_id": null - }, - "sender_type": "user", - "tenant_key": "1bb39f46345e575d" - } - } -} From e93dca84f5127ccb94300b34be1ca9be894c188c Mon Sep 17 00:00:00 2001 From: ystyleb Date: Thu, 2 Apr 2026 17:44:39 +0800 Subject: [PATCH 3/3] fix(cpc): add monetization_mode conditionals and decouple prompt conflicts --- SKILL.md | 9 ++++++++- references/frameworks.md | 4 +++- references/topic-selection.md | 26 +++++++++++++++++++++++++- references/writing-guide.md | 16 ++++++++++------ writing-config.example.yaml | 9 +++++++++ 5 files changed, 55 insertions(+), 9 deletions(-) diff --git a/SKILL.md b/SKILL.md index 52cbcbd..ba71d2b 100644 --- a/SKILL.md +++ b/SKILL.md @@ -125,12 +125,13 @@ cd {skill_dir} && git fetch origin main --quiet 2>/dev/null ``` 检查: {skill_dir}/style.yaml -``` +并在 {skill_dir}/writing-config.yaml 中读取 `monetization_mode`(如果不存在默认视为 organic) - 存在 → 提取 `name`、`topics`、`tone`、`voice`、`blacklist`、`theme`、`cover_style`、`author`、`content_style` - 不存在 → `读取: {skill_dir}/references/onboard.md`,完成后回到 Step 1 如果用户直接给了选题 → 跳到 Step 3(仍需框架选择和素材采集,不可跳过)。 +``` --- @@ -165,6 +166,8 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {关键词} ``` 读取: {skill_dir}/references/topic-selection.md + +注意:根据 Step 1.3 的 `monetization_mode` (cpc/organic) 解析对应的 IF/ELSE 逻辑。 ``` 生成 **10 个选题**,其中: @@ -184,6 +187,8 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {关键词} ``` 读取: {skill_dir}/references/frameworks.md + +注意:根据 Step 1.3 的 `monetization_mode` (cpc/organic) 解析对应的条件性排版逻辑。 ``` 7 套框架(痛点/故事/清单/对比/热点解读/纯观点/复盘),自动选推荐指数最高的。 @@ -220,6 +225,8 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {关键词} 读取: {skill_dir}/playbook.md(如果存在,按 confidence 分级执行) 读取: {skill_dir}/history.yaml(最近 3 篇的 dimensions + closing_type 字段) 读取: {skill_dir}/references/exemplars/index.yaml(如果存在) + +注意:在应用 writing-guide.md 时,必须遵循 Step 1.3 的 `monetization_mode` 里的特殊分支。 ``` **4.1 维度随机化**: diff --git a/references/frameworks.md b/references/frameworks.md index b479956..f44c6e4 100644 --- a/references/frameworks.md +++ b/references/frameworks.md @@ -4,12 +4,14 @@ 根据选题和客户风格,生成 5 套差异化写作框架供用户选择。每套框架是一个完整的文章骨架——不是写文章本身,而是告诉写作步骤"每一段写什么、怎么写"。 + ## CPC 变现场景要求(所有框架通用) 所有生成的框架必须融入以下“高完读率与高点击率”结构,以优化流量主广告的点击表现: 1. **开头“前置钩子”**:在开头最后一句,必须预告“文末有一份核心资料/避坑清单/实操工具分享”,以此引导读者滑到底部(提高底部广告曝光几率)。 -2. **H2过渡处的“认知停顿”**:在核心大段落(特别是从分析问题转向解决问题的过渡处),刻意设计引人深思的疑问句或悬念。这种留白的“空隙”是平台高频插入文中广告的位置,读者在思考停顿时极易点击相关广告。 +2. **H2过渡处的“认知停顿”**:在核心大段落(特别是从分析问题转向解决问题的过渡处),刻意设计引人深思的疑问句或悬念。这种留白的“空隙”是平台高频插入文中广告的位置,读者在思考停顿时极易点击相关广告。同时长段落不允许超过 100 字。 3. **结尾的“需求激发”**:结尾不要做四平八稳的总结。要制造“未完成感”,让读者觉得自己还需要一个工具/社群/服务来落地执行。这种心态下,对底部商业广告的点击率最高。 + ## 5 套框架类型 diff --git a/references/topic-selection.md b/references/topic-selection.md index 6390921..2b9485b 100644 --- a/references/topic-selection.md +++ b/references/topic-selection.md @@ -15,9 +15,14 @@ 对每个热点,按四个维度打分(1-10): + ### 热度分(权重 20%) - 看这个话题有多火(权重下调,不再盲目追求无商业意图的纯流量): + + +### 热度分(权重 30%) +看这个话题有多火: + - 热搜前 10 → 8-10 分 - 热搜 10-30 → 5-7 分 - 30 名之后 → 1-4 分 @@ -32,7 +37,12 @@ - 完全无关 → 0 分 - **命中 blacklist 的词汇或话题 → 直接判 0,整个选题淘汰** + ### 切入价值分(权重 20%) + + +### 切入价值分(权重 30%) + 看这个话题写出来能不能好看: - 有明确的反直觉点,且能找到“带需求”的切入点 → 8-10 分 @@ -40,12 +50,14 @@ - 纯资讯类、搬运即可 → 3-4 分 - 太复杂不适合 2000 字展开,或太浅没东西可写 → 1-2 分 + ### 商业意图分(权重 20%) 看这个话题带来的读者是否有点击文中/底部广告的高转化潜力(CPC 价值): - 涉及搞钱、工具推荐、效率提升、职场进阶、商业模式分析 → 8-10 分 - 带有具体痛点、需要寻找解决方案的场景 → 6-7 分 - 纯情绪共鸣、吃瓜八卦,无法引申到痛点 → 1-3 分 + ## content_style 加成 @@ -64,7 +76,12 @@ ## 综合评分 ``` + 总分 = 热度 × 0.2 + 相关度 × 0.4 + 切入价值(含加成) × 0.2 + 商业意图 × 0.2 + + +总分 = 热度 × 0.3 + 相关度 × 0.4 + 切入价值(含加成) × 0.3 + ``` ## 输出格式 @@ -80,7 +97,9 @@ - 点击率潜力:{高/中/低} — {原因,如"标题含数字+反直觉,点击率高"} - SEO 友好度:{seo_score}/10 — {引用 seo_keywords.py 的数据,如"百度 8 + 360 10,相关词丰富"} - 推荐框架:{痛点型/故事型/清单型/对比型/热点解读型/复盘型} + - 高 CPC 广告推荐:{从微信广告库39个类目中挑选 3-5 个最优项,如"软件工具"、"金融"} — {说明原因,比如为何读者此时会有此类需求} + - 推荐理由:{为什么这个值得写} - 历史标记:{如果 history.yaml 中近 7 天有相同关键词,标注"⚠️ 近期已覆盖类似话题"} ``` @@ -106,7 +125,12 @@ ## 常青选题 + 除了热点选题,额外生成 **4-5 个常青选题**(占比提升,专注沉淀高 CPC 价值的长尾流量)——不依赖时效性,商业转化意图强。 + + +除了热点选题,额外生成 **2-3 个常青选题**——不依赖时效性。 + 常青选题来源: - 从用户的 `topics` 列表出发,生成教程/方法论/经验总结/工具推荐/避坑指南类选题 diff --git a/references/writing-guide.md b/references/writing-guide.md index 902b16e..363a513 100644 --- a/references/writing-guide.md +++ b/references/writing-guide.md @@ -74,15 +74,19 @@ AI 倾向窄词汇、高频词比例偏高。人类同一篇文章里混用书 **writing-config 参数**:`word_temperature_bias`(cold/warm/hot/balanced) -#### 1.3 段落长度节奏 `→ 对抗突发性检测与优化CPC广告曝光` +#### 1.3 段落长度节奏 `→ 对抗突发性检测` -AI 段落长度趋于均匀。人类段落忽长忽短。在 CPC 计费模式下,密集的文字块会导致读者视觉疲劳跳出(无法看到底部广告)。 +AI 段落长度趋于均匀。人类段落忽长忽短。 **要求**: - 禁止连续 2 个长度接近(±20 字)的段落 -- **多用单句成段**:用 1 句话的短段落(强调、反问、悬念、吐槽)作为段落间的视觉缓冲。这种留白是**微信自动插入文中核心广告的最佳位置**。 -- **严控长段落**:极具压迫感的长段落不允许超过 100 字,遇到复杂逻辑必须拆分成短行或要点。 -- 偶尔 2-3 个短句连续排列,制造快速眼动和滑动的流畅节奏。 +- **多用单句成段**:用 1 句话的短段落(强调、反问、悬念、吐槽)作为段落间的视觉缓冲。 +- **允许长段落**:普通长段落建议控制在 150 字以内,用来输出复杂逻辑。 +- 偶尔 2-3 个短句连续排列,制造节奏感。 + + +*注:在 CPC 模式下,此规则会被 frameworks.md 特化压缩(如限长 100 字内并强化留白),请叠加遵守。* + **writing-config 参数**:`paragraph_rhythm`(structured/wave/chaotic) @@ -107,7 +111,7 @@ AI 段落长度趋于均匀。人类段落忽长忽短。在 CPC 计费模式下 | 模式 | 特征 | 适合场景 | |------|------|---------| -| 需求激发(首选) | 制造未完成感:"方法说完了,但你要做成,还需要个好工具/避坑指南。"(诱导点击底部广告) | 商业变现、干货类、工具类 | +| 需求激发 | 制造未完成感("方法讲了,还需要个好工具/指南") | monetization_mode=cpc 时优先使用、干货类、变现类 | | 自然断流 | 像聊天说到一半停了("我先睡了"/"就这样吧") | 深夜风格、随笔 | | 未答之问 | 以问题结尾,不给答案 | 争议话题、引发思考 | | 场景回扣 | 回到开头的意象/场景 | 叙事类、故事驱动 | diff --git a/writing-config.example.yaml b/writing-config.example.yaml index a2d7a6a..fbea98b 100644 --- a/writing-config.example.yaml +++ b/writing-config.example.yaml @@ -7,6 +7,15 @@ # # 参数分三层,对应 writing-guide.md 的反检测结构。 +# ============================================================ +# 零、全局流量主变现策略 +# ============================================================ + +# 变现模式 (organic / cpc) +# organic: 追求自然流量与留存,重完读率和分享率 +# cpc: 高商业变现模式,针对性进行排版和结构优化以提升文中和底部广告 CTR +monetization_mode: "organic" + # ============================================================ # 一、统计反检测参数 # ============================================================