OpenViking
基于OpenViking的RAG系统,支持文档查询、知识管理与向量检索。
基于YouTube研究生成高转化微信公众号爆款文章,支持多格式输出。
openclaw skills install @jeffli2002/jeff-content-factory命令、参数、文件名以原文为准
标题 + 开头 = 80%的阅读量
流量权重公式(来自饼干哥哥200+篇文章数据验证):
⚠️ 90%的人第一步就错了——第一步不是写提示词,是选题。
选题不对,内容再好也是从零开始。同一个工具,换个选题角度,数据天差地别。
文章必须给用户带来真正价值:
Hook 是必须的:开头必须有一个 Hook,不能直接进入正文。
Hook 的结构:承认一个普遍痛点 + 今天这期的独特发现
Jeff 给的示范:
「大家使用 OpenClaw,其实并没有特别好的找到商业应用场景。今天通过地图 API 的结合,让我们看到了更多商业落地应用的可能性。」
其他 Hook 示例:
一句话总结:开头先承认用户的困惑或局限,再抛出今天的发现,让读者觉得『这正是我需要的』。
四种高转化开头类型:
禁止开头用:「你知道吗」「很多人不知道」「今天分享」「值得注意的是」
提示词模板(让AI批量生成开头):
给我这个主题写10个开头:
前5个用不同情绪触发(好奇/恐惧/惊喜/共鸣/挑衅)
后5个用不同结构(数字/问句/故事/反常识/悬念)
每个不超过15字
禁止「你知道吗」「很多人不知道」「今天分享」
主题:[填你的主题]三种强力结尾类型:
禁止结尾用:总结全文、展望未来趋势、以「总之/综上/希望」开头
提示词模板(让AI按类型写结尾):
为这篇文章写3个不同风格的结尾,禁止:
x 总结全文
x 提到「AI门槛/人工介入/未来趋势」
x 以「总之/综上/希望」开头
要求:
A:首尾呼应,呼应开头的 [填你的开头场景]
B:以作者个人的反常识判断收尾
C:以一个反直觉数据收尾2-3个具体案例,层层递进:
每个案例包含:
来自饼干哥哥对比200+篇文章数据后提炼——阅读量和完读率双高的文章,基本都符合这六条:
| # | 标准 | 说明 |
|---|---|---|
| 一 | 逻辑层层递进 | 每300-500字要有一个新观点或新问题把读者往下拽 |
| 二 | 开头反常识 | 制造认知冲突,读者前3秒决定要不要继续读 |
| 三 | 持续阅读钩子 | 新观点、问题、悬念,任何让读者觉得「下面还有东西」的信号 |
| 四 | 三感:素人感+人设感+故事感 | 读者能感受到「这是一个真人在说话」 |
| 五 | 强烈个人观点,敢表态 | 中立等于无聊 |
| 六 | 结尾是洞察/金句/反问 | 不是空洞总结 |
这六条标准就是给AI下指令的核心约束条件。
| 维度 | Qwen3.5篇 | MiniMax M2.5篇 | Seedance 2.0篇 |
|---|---|---|---|
| 标题 | 争议词+结论 | 疑问句+颠覆 | 对比+数字 |
| 开头 | 问题切入 | 观察洞察 | 回应期待 |
| 结构 | 2.0→3.0升级 | 基础→附加→终极 | 行业分类 |
| 干货 | 代码配置 | 提示词实测 | 完整工作流 |
| 真诚 | 报错经历 | 槽点承认 | 不足之处 |
| 结尾 | 心里话升华 | 测试入口 | Agent未来 |
1. 选题精准
2. 结构清晰
3. 语言生动
4. 利他思维
5. 平台友好
使用此技能时,根据提供的主题或标题,结合 YouTube 研究、用户确认与专业写作,并通过自我迭代生成完整的微信公众号“爆款风格”文章,输出 Markdown 与 HTML 两种格式。
在开始任何研究之前,强制进行工具检查:
yt-dlp --version如果未安装或命令失败:
pip install yt-dlpls scripts/yt_dlp_search.py
ls scripts/yt_dlp_captions.py如果脚本缺失:
~/.claude/skills\content-factory\scripts\# 测试 Tavily(主用)——先检查凭证
python3 -c "import json; print(json.load(open('/root/.openclaw/credentials/tavily.json'))['api_key'])" && echo "Tavily: OK"
# 测试 Brave(备用)——检查凭证
python3 -c "import json; print(json.load(open('/root/.openclaw/credentials/brave.json'))['api_key'])" && echo "Brave: OK"
# 测试 smart_search 脚本
python3 /root/.openclaw/workspace/scripts/smart_search.py "test" --max-results 1 2>&1 | head -5如果 Tavily / Brave 凭证存在:
smart_search.py 进行网络研究(优先 Tavily,次选 Brave)如果凭证缺失:
始终向用户通报工具状态:
重要原则:
smart_search.py 执行(Tavily → Brave 备用)** - 测试命令:python3 /root/.openclaw/workspace/scripts/smart_search.py "test" --max-results 1
- 不得将 OpenClaw 内置的 web_search 工具作为主要手段(其使用独立的 Brave key 配置)
重要:研究应来自多样化网络来源——YouTube 是关键来源之一,但非唯一来源。
主要研究来源(按优先级排序):
Skill: 内容工厂
Version: 1.0.2
Chunk: 2/11
关键:YouTube 内容提取优先级顺序
首选方法(优先尝试):
scripts/yt_dlp_search.py 搜索并收集视频元数据python scripts/yt_dlp_search.py "你的搜索关键词" --max-results 10scripts/yt_dlp_captions.py 下载字幕/逐字稿python scripts/yt_dlp_captions.py VIDEO_URL --whisper-if-missing备选方法(若脚本失败时使用):
exec 调用 smart_search.py 查找 YouTube 视频链接,再提取元数据最后手段(所有 YouTube 访问均失败时):
内容提取指南:
references/youtube_research_checklist.md 获取详细提取步骤- 核心主题关键词(如:“Claude Cowork 企业部署”)
- 使用场景(如:“AI 代理工作流自动化案例”)
- 问题/解决方案组合(如:“减少报告生成时间 AI”)
- 行业趋势(如:“2026 年 AI 代理采用预测”)
- 对比类查询(如:“Claude Cowork vs Copilot”)
- “根据 Anthropic 官方博客 (anthropic.com/news/...)”
- “YouTube 视频《...》中提到 (youtube.com/watch?v=...)”
- “Gartner 2026 年报告指出 (...)”
- “TechCrunch 报道称 (techcrunch.com/...)”
- 零基础入门指南
- 破除常见误解内容
- 可执行清单
- 趋势分析 + 未来预测
- 基于真实数据的案例研究
references/wechat_viral_frameworks.md 以丰富角度与钩子关键:在向用户展示选项前,必须将完整研究上下文写入共享内存。
原因:定时任务在独立会话中运行。向飞书展示选项后,会话结束。当用户在主会话中回复“选X”时,Chief Agent 必须能检索到完整研究上下文。
写入文件路径:
/root/.openclaw/workspace/memory/daily/research-YYYY-MM-DD.md文件内容必须包含:
格式示例:
# Research - YYYY-MM-DD
## Candidate 1 (Recommended)
**Title:** ...
**Target:** ...
**Source URLs:** https://youtube.com/... (关键——必须全部包含)
**Outline:** ...
## Candidate 2
...完成内存写入后,再进入下一步(第 5 步)向用户展示选项。
🚨 关键提醒:选题方向 —— 应用导向(2026-03-17 更新)
⚠️ 禁止生成纯技术类选题!以下方向严禁出现:
✅ 必须生成应用导向选题!优先方向:
掌握核心指令设计与任务分解方法,实现复杂任务的自动化执行。
针对内容生成、数据分析、会议纪要等高频场景,提供可复用的操作模板。
从需求分析到流程编排,分享真实项目中的搭建路径与避坑指南。
展示在营销策划、客户服务、研发支持等岗位的实际应用效果。
覆盖电商、教育、金融等行业,提供定制化解决方案思路。
收集一线从业者反馈,呈现工具带来的效率变化与使用痛点。
分析订阅制、SaaS、API调用、企业定制等主流变现路径。
深入拆解如 Notion AI、Jasper、Copy.ai 等产品的增长逻辑。
识别当前高潜力方向,包括垂直领域助手、智能客服、内容合规检测等。
对比 ChatGPT、Claude、通义千问、DeepSeek 等主流模型在不同任务中的表现。
从响应速度、上下文理解、成本控制等方面给出客观评价。
根据内容创作、代码生成、多语言处理等需求,提供精准匹配建议。
包括初创公司、自由职业者、中大型组织的部署过程与成果。
详细说明投入资源、周期、实际收益及关键失败原因。
总结“评估-试点-迭代-推广”的标准化实施框架。
掌握任务链配置、状态管理与异常处理机制。
教程涵盖飞书、微信、Telegram 等平台接入流程。
通过模块化设计提升系统可维护性与扩展性。
实现从信息收集到报告输出的端到端流程自动化。
详解消息触发、权限控制与跨平台数据同步方案。
提供开发环境搭建、接口规范与调试工具使用指南。
分析面向中小企业的低代码 AI 平台构建路径。
展示某制造企业在生产调度优化中的实际部署成效。
选题评估标准:
🚨 重要提示:话题新鲜度要求(2026-03-09)
after:2026-03-08 或类似条件8d2abf78b8490403831aae82052e8e107054b856
- 标题(默认中文)
- 目标读者
- 核心承诺/价值
- 大纲(含 3-5 个章节,每章配 1-2 个要点)
- 开篇钩子(1-2 句话吸引注意力)
关键步骤:在撰写完整文章前,必须完成以下操作:
确认主题与大纲后进入写作阶段:
第一阶段:初稿撰写
- 至少 2–3 个真实企业案例,注明公司名称、具体指标与成果
- 提供分步实施指南,确保读者可照做
- 输出可直接使用的检查清单或方法论框架
- 使用带数字、时间范围和结果的具体示例
- ❌ 严禁虚构或捏造具体数据、百分比、统计结果
- ❌ 不得杜撰公司名称、日期或案例细节
- ✅ 仅使用来自 YouTube 研究(视频字幕、描述、公开报道)的可验证信息
- ✅ 当精确数据不可得时,采用专业限定表达:
- “预计可达...”
- “通常情况下可提升...”
- “根据行业经验,一般...”
- “类似案例显示约...”
- “预期节省...”
- ✅ 使用具体数字时必须标注来源:“根据 Gartner 报告”、“McKinsey 研究显示”
- ✅ 使用区间而非精确虚假数值:“提升 30–50%”而非“提升 47.3%”
- ✅ 无量化数据时聚焦定性描述:“显著提升效率”而非虚构“93%效率提升”
- 错误示例:“我见证了北京某公司效率提升 93%”(若该数据未经证实)
- 正确示例:“类似部署预计可提升 30–50% 的效率,具体取决于现有流程复杂度”
正式 Markdown/HTML 文章内容中不得出现任何 emoji,仅限小红书版本允许使用。
全文以“我”(I/me)视角展开:
- 体现个人观察与实践经验
- 使用句式如:“我发现...”、“我观察到...”、“让我分享...”、“我建议...”
- 增强互动感:“你可能会问...”、“这让我想起...”
- 保持专业但亲切的语气——不过于随意,也不刻板生硬
- 杜绝无效表达:避免“我认为”、“我觉得”、“我相信”等无实质信息的陈述,直接陈述观点
- 每句话必须传递新信息,不重复已有内容
- 删除所有冗余修饰词与过渡句
- 若删去某句话不影响理解,则必须删除
- 用事实与数据说话,避免主观判断词汇
references/reference.html 中的专业风格:- 使用结构化标题(h1, h2, h3, h4)
- 关键语句使用 blockquote 强调
- 保持清晰的段落划分与合理间距
阶段 2:自我迭代
- 语气一致性:专业、自信,避免傲慢;避免使用复杂术语
- 第一人称视角:确保全程使用“我”的视角,语气温暖且真实
- 结构流畅性:从问题 → 洞察 → 解决方案的逻辑推进清晰
- 开头吸引力:前3秒内必须抓住读者注意力
- 核心要点:每个部分都传递明确价值
- 行动号召:结尾自然且具有说服力
- 案例质量:所有案例需包含具体数据,具备可信度
- 可执行性:行动步骤清晰、可操作
- 精炼检查 ⚠️ 必须完成:
- 删除所有“我认为”、“我觉得”、“我相信”等冗余表达
- 检查是否存在重复表达相同意思的句子,合并或删除
- 确保每段都有新信息,不重复前文内容
- 删除所有不影响理解的冗余句子
- 去AI味检查 ⚠️ 必须完成(全文通过8项检查):
- 是否存在“值得注意的是”、“总的来说”、“此外”等套话?→ 直接删除
- 每段是否均为整齐的“开头-展开-总结”三段式?→ 打破结构
- 连续数字列表超过2个?→ 改为叙述性表达
- 结尾是否为泛泛而谈的总结或展望?→ 更换为具体结论
- 是否缺乏“我”的视角?→ 补充真实个人经历
- 所有观点是否保持中立平衡?→ 大胆表明立场
- 数据完整性验证 ⚠️ 关键要求:
- 检查文中所有数字、百分比和指标
- 确保每项数据均可追溯至 YouTube 研究或引用来源
- 将虚构数据替换为限定性表述(如“预计…”、“通常…”、“约…”)
- 确保公司名称和案例细节可验证,或进行适当限定
- 删除过于精确的虚假统计数据(如“47.3%” → “约45-50%”或“显著提升”)
- 严禁杜撰案例:所有案例必须来自研究阶段的真实来源
阶段 3:质量审查与评分(强制执行)
完成 Markdown 初稿后,进行结构化质量审查与评分:
评分标准(满分100分):
| 类别 | 分值 | 标准 |
|---|---|---|
| 精炼度 | 20 | 无重复表达、无废话(如“我认为/我觉得”)、每句提供新信息 |
| 数据真实性 | 20 | 所有案例与数据可追溯至研究来源,无虚构 |
| 结构清晰度 | 15 | 逻辑顺畅、层次分明、适配移动端阅读 |
| 标题吸引力 | 15 | 开头3秒内吸引注意力,价值主张明确 |
| 可执行性 | 15 | 行动建议具体可行,读者可立即应用 |
| 去AI味 | 15 | 全文通过8项去AI味检查,无套话,无固定三段式结构,有强烈个人观点 |
| 语言质量 | 0 | (已并入精炼度与去AI味,不再单独计分) |
评分流程:
📊 文章质量评分报告
━━━━━━━━━━━━━━━━━━━━━
精炼度: XX/20 [具体问题说明]
数据真实性: XX/20 [具体问题说明]
结构清晰度: XX/15 [具体问题说明]
标题吸引力: XX/15 [具体问题说明]
可执行性: XX/15 [具体问题说明]
去AI味: XX/15 [具体问题说明]
━━━━━━━━━━━━━━━━━━━━━
总分: XX/100⚠️ 去AI味8项检查清单(质量审查强制执行):
□ 有没有「值得注意的是」「总的来说」「此外」等套话?→ 删
□ 每段是否都整齐「开头-展开-总结」三段式?→ 打破结构
□ 连续数字列表超过2个?→ 改成叙述
□ 结尾是泛泛总结或展望?→ 换掉
□ 缺少「我」的视角?→ 加真实故事
□ 所有观点都平衡中立?→ 大胆表态
□ 读出声,哪里走神了?→ 那里要改
□ 删掉最后一段,文章更好?→ 直接删💡 快速检验法:直接删除最后一个总结段,若文章反而更有力,说明原结尾为AI味废话。
决策逻辑:
🚨 关键补充:当 Jeff 回复“选X”后的工作流程(2026-04-14 新增)
Jeff 确认选题后,必须按以下步骤执行:
第一步:撰写母版至飞书云文档
[待确认] {文章标题}第二步:通知 Jeff 确认
第三步:等待 Jeff 明确确认
⚠️ 绝对禁止:Jeff 确认选题后直接生成4种格式和发布!必须先完成飞书母版确认流程!
得分低于85时的自动修复优先级:
在生成4种格式前,必须先将内容写入飞书云文档并等待确认!
步骤 1:创建飞书云文档
[待确认] {文章标题}步骤 2:通知用户确认
- 文档链接
- "请确认内容是否OK,回复确认后生成4种格式"
步骤 3:用户确认后
⚠️ 重要提示:禁止跳过此步骤直接生成4种格式!
阶段 4:最终润色
<hr/> 标签(Markdown 中的 --- 可接受)阶段 5:生成关键数据信息图(仅限 HTML 版本)
关键提醒:若文章包含核心数据可视化内容,必须使用 NotebookLM 生成信息图
何时生成信息图:
信息图生成流程:
- 市场规模/增长数据(如:“$315B → $1.1T”)
- 百分比趋势(如:“36.3% 的企业”)
- 前后对比(如:“传统模式:$25k/月 vs 个人独立:$500/月”)
- 多指标对比(如:“3个关键因素”)
# 针对每个关键数据点,生成一张信息图
notebooklm generate infographic "Create a professional infographic showing [数据描述].
Use blue color scheme (#1a5490, #2980b9, #3498db) to match article theme.
Modern, clean design with clear data visualization. Include: [具体指标]"- 主蓝色:#1a5490
- 强调蓝:#2980b9
- 浅蓝色:#3498db
- 背景色:#ebf5fb(浅蓝)
- 文字色:#2c3e50(深灰)
- 使用蓝色渐变与专业商务风格设计
# 等待信息图生成完成
notebooklm artifact wait <artifact_id> --timeout 900
# 下载到输出目录
notebooklm download infographic "YYYY-MM-DD-[slug]-[data-name].png" # NotebookLM 生成的 PNG 文件体积较大(5-10MB),在微信上传时会超时
# 上传前必须压缩为 JPEG 格式
python scripts/compress_image.py "YYYY-MM-DD-[slug]-[data-name].png"
# 生成文件:YYYY-MM-DD-[slug]-[data-name]-compressed.jpg(通常小于 1MB)
# 压缩效果:PNG 5.93MB → JPEG 0.68MB(减少 88%,质量设置为 85)- 使用压缩后的图片文件名(而非原始 PNG)
- 将基于 CSS 的可视化图表替换为实际的信息图图片
- 使用正确的 <figure> 结构,包含标题和来源说明
- 示例:
<figure style="margin: 40px 0;">
<img src="2026-01-18-article-slug-market-growth-compressed.jpg"
alt="Market Growth Visualization"
class="article-image">
<figcaption class="image-caption">
SaaS市场增长趋势 (2025-2032)
</figcaption>
<p class="image-source">
数据来源:<a href="[source_url]" target="_blank">[Source Name]</a>
</p>
</figure>- 市场增长图表(若文章涉及市场趋势)
- 对比型信息图(传统方式 vs 新方法)
- 数据统计可视化(关键百分比/数值)
- 流程或工作流图(若解释步骤)
常见数据类型的示例提示词:
"创建一张专业信息图,展示 SaaS 市场从 2025 年的 3150 亿美元增长至 2032 年的 1.13 万亿美元。
使用上升柱状图或折线图。主色调为蓝色(#1a5490, #2980b9, #3498db)。
突出显示年复合增长率超过 20%。采用现代商务风格设计。" "创建一张专业信息图,展示 2026 年有 36.3% 的新公司由个人独立创立,
相较于 2025 年不足 10%。体现三倍以上的显著增长。使用与企业主题一致的蓝色调。
推荐使用饼图或对比柱状图呈现。" "创建一张左右并列的对比信息图:传统模式(5 人团队,月成本 2.5 万元,
需要超过 5 万元月收入才能盈亏平衡)vs 个人+AI 模式(月成本 500 元,5 千元月收入即可盈利)。
蓝色调设计,视觉对比清晰明确。"重要注意事项:
YYYY-MM-DD-[article-slug]-[data-description].png⚠️ 仅在用户确认飞书文档后方可生成!
强制要求:始终生成全部四种格式
格式 1:Markdown (.md) - 完整专业版
/root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug].md# 文章标题 开始格式 2:HTML (.html) - 完整专业版(公众号发布专用)
/root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug].htmlstyle="",禁止使用 <style> 块或 CSS class!微信会强制移除所有 class 和 style 块,导致样式失效。详见下方「微信公众号排版规范」章节。 - 墨绿(主色):#556b2f,用于文字、竖线、背景
- 砖红(强调色):#b74134,用于重点字词背景
- 奶黄背景:#fff8e7,用于重点字词
- Hook 背景:#e8f5e0
- 二级标题:<div style="font-size:17px;color:#556b2f;font-weight:bold;margin:28px 15px 14px;padding-left:12px;border-left:3px solid #556b2f;">
- 正文段落:<div style="margin:0 0 12px;padding:0 15px;line-height:1.8;font-size:15px;color:#444;">
- 加粗强调:<span style="color:#556b2f;font-weight:bold;">
- 重点字词:<span style="background:#fff8e7;padding:2px 6px;border-radius:3px;color:#b74134;font-weight:600;text-decoration:underline dotted #b74134;">
- 重点句下划线:<span style="border-bottom:2px dotted #556b2f;padding-bottom:2px;color:#556b2f;">
- CTA 结尾:<p style="margin:0;padding:20px 15px;text-align:center;color:#333;line-height:1.8;font-size:15px;"><strong>如果你觉得文章对你有所帮助,请关注公众号。</strong></p>
<hr/> 标签分隔段落** —— 应通过间距和标题实现视觉分隔**⚠️ 权威依据文件:references/wechat-format-rules.md(以该文件为准,不可冲突)**
🚨 2026-04-09 重大更新(经验教训):
核心问题:微信安全过滤机制会强制覆盖 <h1>/<h2>/<h3>/<p>/<strong> 等 HTML 默认标签的样式(变为蓝色),所有 CSS class 和 <style> 块均会被剥离。
唯一安全方案:所有样式必须通过 <div> 和 <span> 标签的 style="" 内联属性实现,禁止使用任何可能被微信强制覆盖的标签。
排版规范核心要点(完整内容见 references/wechat-format-rules.md):
<!-- 供 wechat_publish.py 提取标题,必须保留且 display:none -->
<h1 style="display:none;">从张雪峰.skill到金谷园饺子馆.skill,给我们带来的思考</h1><!-- 禁止使用 <h2>,微信会强制覆盖为蓝色!必须使用 div 内联 -->
<div style="font-size:17px;color:#556b2f;font-weight:bold;margin:28px 15px 14px;padding-left:12px;border-left:4px solid #556b2f;">一、章节标题</div><!-- 禁止使用 <p>,微信会覆盖样式!必须使用 div 内联 -->
<div style="margin:0 0 12px;padding:0 15px;line-height:1.8;">正文内容</div><!-- 砖红字体 + 奶黄背景,不是红色! -->
<span style="background:#fff8e7;padding:2px 6px;border-radius:3px;color:#b74134;font-weight:600;">重点字词</span><!-- 墨绿色点状下划线,不是红色! -->
<span style="border-bottom:2px dotted #556b2f;padding-bottom:2px;color:#556b2f;">重点句子</span><span style="color:#556b2f;font-weight:bold;">12天</span><div style="background:#e8f5e0;border-left:3px solid #556b2f;box-shadow:2px 2px 8px rgba(0,0,0,0.08);padding:18px 20px;border-radius:0 10px 10px 0;margin:0 0 24px 0;font-size:15px;line-height:1.9;">
<span style="color:#556b2f;font-weight:bold;">2026年4月</span>,短短两天内...
</div><p style="margin:0;padding:20px 15px;text-align:center;color:#333;line-height:1.8;font-size:15px;">
<strong>如果你觉得文章对你有所帮助,请关注公众号。</strong>
</p>| 元素 | ❌ 禁止 | ✅ 正确 |
|---|---|---|
| 文章标题 | <h1>(会变蓝) | <h1 style="display:none;"> + 视觉标题用div |
| 二级标题 | <h2>/<p>(会变蓝) | <div style="border-left:4px solid #556b2f;color:#556b2f;"> |
| 正文段落 | <p>(会变蓝) | <div style="margin:0 0 12px;padding:0 15px;"> |
| 加粗强调 | <strong>(会变蓝) | <span style="color:#556b2f;font-weight:bold;"> |
| 重点字词 | class样式(被剥离) | <span style="background:#fff8e7;padding:2px 6px;border-radius:3px;color:#b74134;"> |
| 重点句下划线 | class样式(被剥离) | <span style="border-bottom:2px dotted #556b2f;padding-bottom:2px;color:#556b2f;"> |
| CTA区域 | <p>(会变蓝) | <p style="text-align:center;color:#333;"> |
| 列表 | <ul>/<ol>/<li>(圆点不可控) | <div style="margin:0 0 6px 20px;">• 内容</div> |
| 用途 | 颜色值 | 示例 |
|---|---|---|
| 二级标题 | #556b2f(墨绿) | color:#556b2f;font-weight:bold; |
| 左侧竖线 | #556b2f(墨绿) | border-left:3px solid #556b2f; |
| 重点句点下划线 | #556b2f(墨绿) | border-bottom:2px dotted #556b2f; |
| 重点字词背景 | #fff8e7(奶黄) | background:#fff8e7; |
| 重点字词字体 | #b74134(砖红) | color:#b74134; |
cd /root/.openclaw/workspace/skills/content-factory && python3 -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/YYYY-MM-DD-article-slug.html" --cover "/root/.openclaw/workspace/output/YYYY-MM-DD-article-slug-cover.png"-X utf8**:否则中文会变成 \uXXXX 转义序列--cover**:否则封面图使用默认图片- 减少项目符号列表,转为流畅的叙述性段落
- 增加第一人称叙述(如“我发现…”、“我观察到…”、“在我看来…”)
- 仅在工具清单或步骤说明中使用项目符号
- 将数据列表转化为带内联高亮的叙述性文字
- 移除所有 <li> 元素之间的空行,防止微信自动添加多余项目符号
- 列表格式需紧凑:<ul><li>项目1</li><li>项目2</li><li>项目3</li></ul>(元素间无换行)
- 对 <ul> 和 <ol> 均适用
- 微信解析器将空行视为新列表项,导致视觉混乱
- 此规则由 wechat_publish.py 脚本在上传时自动处理
- 优先使用 NotebookLM 生成的图表作为关键数据可视化(参见第四阶段)
- 若图表生成失败,再使用基于 CSS 的可视化方案作为备选
- 使用 CSS 渐变和 flexbox 实现内联数据可视化
- 创建前后对比卡片展示变化效果
- 为关键数据点设计彩色信息卡
- 所有数据可视化均需标注来源链接
- 示例:使用渐变色块展示市场增长趋势
- 示例:采用左右并列卡片对比成本结构
- 示例:设计大数字+上下文的信息卡片
- 从原始资料中搜索图表/图形(如 Fortune Business Insights、Scalable.news 等)
- 若无法获取图片,使用 CSS 构建数据可视化
- 所有图片必须包含 <figure> 标签及 <figcaption> 说明,并附上来源链接
- 使用 <p class="image-source"> 包裹可点击的引用链接
格式3:Markdown (.md) - 小红书版(Xiaohongshu Style)
/root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug]-小红书.md- 目标范围:800–1000个字符(中文字符 + 英文单词)
- 必须使用 Python 脚本验证后才能发送给用户
- 验证命令:
python3 -c "import re; c=re.sub(r'#+\s*|---+|^-\s+|#+\s*$|\n\n+','',open('file.md').read()); print(len(re.findall(r'[\u4e00-\u9fa5]',c))+len(re.findall(r'[a-zA-Z]+',c)))"- 若字数 > 1000:大幅精简,但保留核心信息
- **切勿依赖 wc -c** —— 它统计的是字节,而非可显示字符
- ⚠️ 关键提醒:定稿前务必检查字数 —— 必须 ≥800 且 ≤1000
- 使用 Python 验证:800 <= len(content_without_hashtags) <= 1000
- 若不足 800,补充案例细节或实用建议
- 若超过 1000,强力删减内容,但保留核心信息
- 优先级:案例 + 关键数据 + 可操作建议
- 带表情符号的吸睛开头(2–3 句)
- 1–2 个核心洞察或问题
- 1 个完整真实案例,含具体数字/成果
- 3–5 条可执行建议(带表情符号的项目符号)
- 富有感染力的结尾 + 行动号召
- 末尾添加标签(5–10 个相关标签)
#ClaudeCowork #AI工具 #企业效率 #人工智能 #职场提升 #AI代理 #效率翻倍 #科技趋势 # 写完后立即验证字数
content = """[你的小红书内容]"""
lines = content.split('\n')
hashtag_line = [l for l in lines if l.startswith('#')]
if hashtag_line:
content_without_hashtags = content.replace(hashtag_line[0], '').strip()
else:
content_without_hashtags = content.strip()
char_count = len(content_without_hashtags)
assert 800 <= char_count <= 1000, f"字符数 {char_count} 必须在 800–1000 之间!"格式 4:文本 (.txt) - X/Twitter 英文长推文版 (X Pro)
/root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug]-tweet.txt- 强力钩子(2–3 句,阐明核心转变/洞察)
- 案例 1:问题 → 解决方案 → 成果(3–5 个带具体数字的要点)
- 案例 2:问题 → 解决方案 → 成果(3–5 个带具体数字的要点)
- 可选案例 3 或安全/挑战经验(若空间允许)
- 范式转变总结(3–5 个转变点,使用 → 表示)
- 行业预测或趋势(引用 Gartner 数据、市场预测)
- 简要可操作框架或下一步建议(可选,2–3 点)
- 有力行动号召(提问或陈述句)
- 末尾添加 5–8 个相关标签
#AI #ClaudeCowork #EnterpriseAI #Automation #AIAgents #DigitalTransformation #Productivity #FutureOfWork文件命名规范:
YYYY-MM-DD(如 2026-01-14)-小红书-tweet - 2026-01-14-claude-cowork-enterprise-guide.md(专业 Markdown)
- 2026-01-14-claude-cowork-enterprise-guide.html(专业 HTML)
- 2026-01-14-claude-cowork-enterprise-guide-小红书.md(小红书 Markdown)
- 2026-01-14-claude-cowork-enterprise-guide-tweet.txt(Twitter/X 英文)
输出目录结构:
├── 2026-01-14-[article-title-slug].md
├── 2026-01-14-[article-title-slug].html
├── 2026-01-14-[article-title-slug]-小红书.md
└── 2026-01-14-[article-title-slug]-tweet.txt如目录不存在,请自动创建。
⚠️ 微信公众号封面使用固定图片,不调用生图 API。
固定封面图片路径:
/root/.openclaw/workspace/skills/content-factory/assets/wechat-cover-default.png规格: 900×386 像素(21:9),PNG 格式
使用方式:
python scripts/compress_image.py "/root/.openclaw/workspace/skills/content-factory/assets/wechat-cover-default.png"如需更换封面: 替换 assets/wechat-cover-default.png 文件即可全局生效。
封面图提示词工程指南:
核心原则:
不同文章类型示例提示词:
scripts/compress_image.py 进行压缩重要提示:在生成 Format 2(HTML)和封面图后,自动将内容发布至微信公众号进行预览。
.env 文件中(详见下方配置章节).env 中设置 WECHAT_APP_ID.env 中设置 WECHAT_APP_SECRET# 在 Windows 上必须添加 -X utf8 参数,防止中文乱码
python -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug].html"
# 不加 -X utf8 会导致中文字符显示为 \uXXXX 转义序列
# 此问题源于 Windows 默认 GBK 编码,需通过 UTF-8 模式解决✓ 访问令牌获取成功
✓ 内容图片上传成功:[filename] -> http://mmbiz.qpic.cn/...
✓ 草稿文章创建完成
✓ 媒体 ID: WOr7ZIAYNpv...\uXXXX 序列)https://api.weixin.qq.com/cgi-bin/tokenhttps://api.weixin.qq.com/cgi-bin/draft/addhttps://api.weixin.qq.com/cgi-bin/freepublish/submit错误处理:
publish_errors.log安全提示:
文章结尾 - 商业转化(格式 1 和 2 必须包含):
在格式 1(Markdown)和格式 2(HTML)的专业文章中,不得列出“参考来源”或“References”,而必须以商业转化部分结尾,引导读者关注并联系 AI 咨询服务。
注意:格式 3(小红书)不包含此部分,该格式应仅以标签结尾。
Markdown 格式(适用于格式 1):
---
如果觉得这篇文章对您有帮助,欢迎关注公众号。**HTML 格式(适用于格式 2,在 </body> 前添加):**
<p>如果觉得这篇文章对您有帮助,欢迎关注公众号。</p>重要说明:
<hr/>** —— h2 标题已提供足够的视觉分隔- 保持专业自信的语气,避免傲慢
- 使用具体案例和数据支撑观点
- 确保逻辑清晰,价值主张明确
- 优先考虑移动端阅读体验(短段落、清晰层级)
- 引用任何内容时均需正确标注来源
- 精炼表达:避免重复相同含义的表述,每句话必须传递新信息
- 禁止废话:不得使用“我认为”、“我觉得”、“我相信”等无意义表达,直接陈述观点
- 禁止杜撰:所有案例与数据必须来自研究阶段的真实来源,不得虚构
- 直接有力:使用“是”而非“我认为是”,使用“数据显示”而非“我觉得数据可能显示”
- 删除冗余:若删除某句话不影响理解,则应将其删除
发生情况:
错误原因:
正确做法:
# 始终先进行检查
yt-dlp --version
ls scripts/yt_dlp_search.py
ls scripts/yt_dlp_captions.py
# 根据结果决定执行路径发生情况:
错误原因:
正确理解:
发生情况:
references/youtube_research_checklist.md错误原因:
正确做法:
# 每当提及参考文档时,务必加载
Read("references/youtube_research_checklist.md")发生情况:
错误原因:
正确决策流程:
需要 YouTube 内容?
↓
检查 yt-dlp 是否安装?
↓ 是 ↓ 否
尝试脚本 → 通知用户并安装
↓ 成功 ↓ 失败 ↓
继续 → 尝试 WebFetch → 重试脚本
↓ 失败 ↓ 失败
请求用户提供 URL → 使用备用来源
↓ 失败 (记录限制)
使用备用来源
(记录限制)发生情况:
\u6211\u752872\u5c0f\u65f6 而非 “我用72小时”错误原因:
ensure_ascii=False 进行 JSON 序列化不足以解决问题根本原因:
正确做法:
# 在 Windows 上发布微信内容时,始终使用 Python UTF-8 模式
python -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/article.html"
# 仅设置 PYTHONIOENCODING(不充分):
# PYTHONIOENCODING=utf-8 python scripts/wechat_publish.py # ❌ 仅修复 I/O 编码问题
# -X utf8 标志强制启用 UTF-8 编码,适用于:
# - 文件读写操作
# - 字符串编码/解码
# - HTML 解析(BeautifulSoup)
# - JSON 序列化
# - HTTP 请求体验证方法:
\uXXXX 序列,说明编码失败-X utf8 标志重新运行预防检查清单:
python -X utf8发生了什么:
TimeoutError('The write operation timed out')为何错误:
根本原因:
正确做法:
# 步骤 1:正常生成插图(使用 NotebookLM)
notebooklm generate infographic "prompt..." --json
notebooklm artifact wait <artifact_id> --timeout 600
notebooklm download infographic ./output.png
# 步骤 2:上传前必须压缩
python -c "
from PIL import Image
import os
# 将 PNG 转换为 JPEG 并优化质量
img = Image.open('output.png').convert('RGB')
img.save('output-compressed.jpg', 'JPEG', quality=85, optimize=True)
# 验证文件大小缩减
original_mb = os.path.getsize('output.png') / 1024 / 1024
compressed_mb = os.path.getsize('output-compressed.jpg') / 1024 / 1024
print(f'原始文件: {original_mb:.2f}MB → 压缩后: {compressed_mb:.2f}MB')
"
# 步骤 3:更新 HTML 中的图片引用
# 将:`<img src="output.png" ...>`
# 替换为:`<img src="output-compressed.jpg" ...>`
# 步骤 4:使用压缩后的图片发布
python -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/article.html"压缩效果:
预防检查清单:
Content image uploaded: ... -> http://mmbiz.qpic.cn/...图像压缩脚本(可复用):
# 保存为 scripts/compress_image.py
from PIL import Image
import sys
import os
def compress_for_wechat(input_path, output_path=None, quality=85):
"""将图片压缩为适合微信上传的格式(目标 < 1MB)"""
if output_path is None:
base, ext = os.path.splitext(input_path)
output_path = f"{base}-compressed.jpg"
img = Image.open(input_path)
if img.mode in ('RGBA', 'LA', 'P'):
img = img.convert('RGB')
img.save(output_path, 'JPEG', quality=quality, optimize=True)
original_mb = os.path.getsize(input_path) / 1024 / 1024
compressed_mb = os.path.getsize(output_path) / 1024 / 1024
print(f"原始文件: {original_mb:.2f}MB")
print(f"压缩后: {compressed_mb:.2f}MB ({100*(1-compressed_mb/original_mb):.1f}% 减少)")
print(f"输出文件: {output_path}")
return output_path
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: python compress_image.py <输入图片> [输出图片] [质量]")
sys.exit(1)
input_path = sys.argv[1]
output_path = sys.argv[2] if len(sys.argv) > 2 else None
quality = int(sys.argv[3]) if len(sys.argv) > 3 else 85
compress_for_wechat(input_path, output_path, quality)使用示例:
# 使用默认设置(质量=85)压缩
python scripts/compress_image.py infographic.png
# 使用自定义质量压缩
python scripts/compress_image.py infographic.png output.jpg 75
# 指定输出路径压缩
python scripts/compress_image.py infographic.png compressed.jpg- 开始研究前运行依赖项检查
- 向用户告知工具可用性
- 不假设工具不可用
- 主要方法 → 备用方法 → 最后手段
- 不跳过决策树中的步骤
- 记录每种方法失败的原因
- 告知用户当前可用的工具
- 说明正在使用的处理方式
- 若因工具限制导致内容质量下降,需明确告知
- 提及检查清单文件时应加载
- 严格遵循参考文档中的详细流程
- 有明确指引时不要自行发挥
- 若 A 方法失败,先查明原因再尝试 B
- 不应跳过 B 和 C 直接尝试 D
- 记录失败原因,用于后续优化
- 微信发布时始终使用 python -X utf8 标志
- 立即检查草稿预览中的编码情况
- 检查是否存在 \uXXXX 序列,这表示编码失败
- 若中文字符无法显示,请重新以 UTF-8 模式运行
- 正常使用 NotebookLM 生成图文内容
- 在上传微信前,务必先将 PNG 图片压缩为 JPEG
- 目标文件大小:小于 1MB,以确保上传稳定
- 使用 scripts/compress_image.py 脚本进行一致压缩
- 更新 HTML 文件,引用压缩后的图片文件名
- 在宣布完成前,确认日志中图片上传成功
- 将 PNG 转换为 JPEG,质量设置为 85
- 检查压缩后文件大小(应小于 1MB)
- 若仍过大,可降低质量至 75 或调整图像尺寸
- 在微信草稿预览中验证图片是否正确显示
- 保留原始 PNG 文件用于归档
所有 API 密钥和凭证均存储在 .env 文件中,以保障安全并便于管理。
配置步骤:
cd ~/.claude/skills\content-factory
copy .env.example .env # 微信公众号(自动发布必需)
WECHAT_APP_ID=your-wechat-app-id
WECHAT_APP_SECRET=your-wechat-app-secret- 微信凭证:前往 https://mp.weixin.qq.com/ → 设置与开发 → 基本配置
- NotebookLM:通过 notebooklm login 进行认证(用于封面图生成)
python scripts/check_env.py重要提示:
.env 文件提交至 Git(已在 .gitignore 中忽略).env.example 作为模板(可安全提交) - 详见 API_KEY_SETUP.md 获取详细配置说明
- 详见 CONFIGURATION.md 了解配置管理详情
研究工具:
scripts/yt_dlp_captions.py - 下载 YouTube 字幕/字幕文本scripts/yt_dlp_search.py - 搜索并收集 YouTube 元数据scripts/compress_image.py - 为微信上传压缩图片scripts/wechat_publish.py - 自动发布至微信公众号notebooklm-api skill - 生成图文内容及封面图参考指南:
references/youtube_research_checklist.md - YouTube 专项研究流程references/web_research_guide.md - 多源网络研究最佳实践references/wechat_viral_frameworks.md - 文章结构与吸引点框架references/wechat_publishing_guide.md - 微信发布操作文档references/reference.html - 输出用的 HTML 模板与样式参考模板文件:
assets/wechat_outline_template.md - 内容大纲模板(可选)输出目录:
/root/.openclaw/workspace/output/ - 生成的 MD、HTML、小红书、推文文件及封面图的目标存放路径如果觉得这篇文章对您有帮助,欢迎关注公众号。
已收录 1 个 Skill