fengyun-publish
Health Gecti
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 13 GitHub stars
Code Basarisiz
- network request — Outbound network request in mp-proxy-worker/src/index.js
- Hardcoded secret — Potential hardcoded credential in mp-proxy-worker/wrangler.toml
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
End-to-end AI ship pipeline for WeChat Official Accounts · 卷「研究 Agent 的云」
☁️ fengyun-publish
单人 AI 公众号〈研究 Agent 的云〉的端到端写作发布流水线
选题 · 调研 · 写稿 · 三轨评审 · 排版 · 配图 · 推草稿 — 19 步全自动落到草稿箱,只留最后一击给人
这是什么 · 架构 · 19 Step · 快速开始 · 关于作者 · 支持作者
这是什么
一个端到端的 AI 公众号写作发布流水线,Python + Claude Code skill 编排。从「热点选题 → 深度调研 → 写稿 → 三轨评审 → 排版 → 封面 → 推草稿」一共 19 步,产出直接落到微信公众号草稿箱,作者只需要在手机上做最后一次审阅 + 发布。
为谁建:对标数字生命卡兹克,一个人运营 AI 赛道公众号「研究 Agent 的云」(微信号 FengYunAgent)。
不是 prompt 链,是工业流水线:
- 19 个 BLOCKING Step + 物理
gate.py拦截(任一 step 没真跑过都通不过) - 三轨独立 critic 投票(数字分 + 灵魂判断 + 挂名意愿),互不知晓彼此 verdict
- 8 项 fake-pass 防伪字段(防主线程拍脑袋写占位)
- 全自动 critic-revise loop,3 轮后走
auto_partial_pass/auto_abort不等人 - Round 25 文内图强制非空 +
assets/placeholder-sketch.png兜底,绝不发裸文
架构
🔍 图太密看不清? 点击图片打开原图(矢量图,浏览器里 Ctrl+滚轮 无限放大),或到 项目官网全屏缩放查看。
源 SVG:docs/architecture.svg· 完整版(更详细):docs/architecture_full.svg
5 个 Layer 自下而上:
| Layer | 名字 | 核心组件 | 状态 |
|---|---|---|---|
| A | 数据层 | aihot · we-mp-rss · RSSHub · TrendRadar · arxiv · corpus · db.sqlite · parquet 特征矩阵 | ✅ LIVE |
| B | 决策层 | ITI 选题 → 写稿 → harness 评分 → lint → 三轨 critic → gate 保安 | ✅ LIVE |
| C | 渲染层 | layout_rules huashu 排版 + 7 模板封面 + 内文图 + placeholder 兜底 |
✅ LIVE |
| D | 发布层 | 微信公众号 API + Cloudflare Worker 反代 + 运行日志 + 审计 | ✅ LIVE |
| E | 反馈层 | 数据飞轮 · flywheel_report.py + force_ship 学习回路 |
✅ LIVE(baseline 193→198) |
Pipeline 19 Step(以 WRITE_AGENT.md 为权威)
| Step | 名字 | 脚本 / Skill |
|---|---|---|
| -1 | 北极星填空 | output/runs/<slug>.runlog.jsonl 第一行 |
| 0 | Voice DNA + corpus 必读 | fengyun-writer skill |
| 0.1 | Style 路由 | frontmatter style: |
| 1.0 | ITI I-1 广搜聚合候选 | tools/iti_collect.py |
| 1.x | topic_recommender 排序 + 7 天去重 | tools/topic_recommender.py · tools/event_dedup.py |
| 1.1 | 自动选题 + slug | runlog 写入 |
| 1.5 | 开头 harness + dogfood gate | tools/opening_signal.py · tools/opening_dedup.py |
| 2 | ITI I-2 深搜调研 | tools/iti_explore.py |
| 3 | fengyun-writer 写完整稿 | fengyun-writer skill |
| 3.3 | 标题 harness | tools/title_signal.py · tools/title_dedup.py |
| 3.5 | ending harness | tools/ending_signal.py · tools/ending_dedup.py |
| 4 | fengyun_lint 机械层 | tools/fengyun_lint.py |
| 4.5 | humanizer-zh 去 AI 味 | humanizer-zh skill |
| 5 | 王小波语感预审 | wangxiaobo-perspective skill |
| 6 | 三轨 critic vote(详见下节) | tools/critic_vote.py · tools/sop_v2_1.py |
| 7.1 | 配图候选位置预筛 | tools/illustrate_decider.py::pick_candidates |
| 7.2 | 花叔 Mode 2 配图决策(BLOCKING) | huashu-image-curator skill |
| 7.3 | 内文图 Seedream 生成 | tools/illustrate_decider.py::generate_from_decision |
| 7-cover | 封面生成 | tools/generate_cover_by_template.py |
| 8 | 排版 + 推草稿(gate 守门) | tools/post_fengyun_publish.py |
| 9 | 报告 + audit log | tools/verify_audit.py |
三轨 Critic + Gate 物理保安
三轨独立评委
| Track | 评什么 | 阈值 | 实现 |
|---|---|---|---|
| A · 数字分 | 综合爆款率预测(0-100) | ≥ 60 PASS | tools/sop_v2_1.py(5 维加权 + style_match 25% 混合) |
| B · 灵魂判断 | ship / not_ship(花叔视角) | binary | huashu-perspective skill |
| C · 挂名意愿 | 这是不是风云会写的开头 | binary | content-judge skill(独立第三方,Round 24 fork) |
门控树(tools/critic_vote.py::gate_tree)
A 缺 → abort(工具链断)
A < 60 → revise
C reject → revise(C 硬否决,founder verdict 优先)
C pass + B pass → ship
C pass + B reject → human_gate(3 轮 revise 后)
B skip + C skip → pass(System A 单轨兜底)
3 轮 revise 后自动出口(Round 24):末轮 A≥65 → auto_partial_pass(继续 Step 7-8);A<65 → auto_abort(不推草稿)。
Gate 物理保安(tools/gate.py)
PreToolUse hook,主线程调 post_fengyun_publish.py 之前拦一刀:
- 11 组 pass_flag 必须全 true(writer / title / ending / lint / humanizer / wangxiaobo / critic_vote / huashu_decision / cover / image)
- 8 项 fake-pass 防伪:每个 step 不仅要
*_pass: true,还要*_real_run: true+*_source字段,source 内容必须匹配正则 - Round 25 image 硬规则:
image_paths非空 + 每文件 size ≥ 5 KB +image_at_h2_indices必填 - R18 自我暴露分级:P0(自暴 AI 身份)→
aborted_r18立即终止 - 缺任一 →
sys.exit(2)阻断 Claude 调用
技术栈
语言
- Python 3.x — 48 个
tools/脚本,15,016 行 - PowerShell 5.1 — preflight / run_trendradar / run_rsshub / headless_ship
关键库(从 import 归纳,暂无 requirements.txt)
pandas·numpy— 评分特征 + parquet 读写anthropic— Claude APIpython-dotenv— 凭证加载urllib.request— 微信 API 直连(避开 requests 减少依赖)concurrent.futures.ThreadPoolExecutor— Seedream 并发出图xml.etree.ElementTree— RSS 解析
外部服务
| 服务 | 用途 | 凭证字段 |
|---|---|---|
| 微信公众号 API | 推草稿 + 素材上传 | WECHAT_APPID · WECHAT_SECRET |
| Cloudflare Worker 反代 | 自建,解决官方代理不稳 | mp-proxy-worker.dufengyun12.workers.dev |
| 火山引擎方舟 Seedream | 封面 + 内文图生成 | VOLCENGINE_IMAGE_KEY |
| Anthropic Claude | 所有 skill 底层 | ANTHROPIC_API_KEY |
| aihot REST API | I-1 广搜信源 | 免费 |
| we-mp-rss(Docker localhost:8001) | 16 个公众号 Atom feed | 扫码 cookie,~80 小时有效 |
| RSSHub(Docker localhost:1200) | B 站 / 知乎 feed | 浏览器 cookie 注入,见 docs/rsshub_cookie_setup.md |
| TrendRadar | 综合日报 | D:\Dev\TrendRadar 本地子项目 |
| arxiv · smol.ai | 学术 + 英文 newsletter | 免费 |
| 飞书 Lark Base | 数据飞轮表(v0) | LARK_* |
目录结构
fengyun-publish/
├── tools/ 48 个核心脚本(写稿/lint/critic/排版/封面/推送)
├── output/ 运行产物(大部分 gitignore,仅 diagrams + 部分 patch 入 git)
├── docs/ 技术决策文档(SPEC_ROUND25 / LAYOUT_RULES / rsshub 教程)
├── reports/ Phase 1-18 调研报告(80+ 篇沙盒辩论结果)
├── vendor/ 开源依赖 clone(gitignore,各自有 .git)
├── assets/ 静态资源(placeholder-sketch.png Round 25 兜底)
├── mp-proxy-worker/ Cloudflare Worker 反向代理源码
├── bin/ 编译工具(md2wechat.exe gitignore)
├── WRITE_AGENT.md ⭐ 系统级宪法(19 Step 全流程,最高优先级)
├── CLAUDE.md 项目级上下文(关键路径 + 决策记录)
├── PLAN.md v2 实施方案
├── NORTH_STAR.md 北极星(两大核心模块)
└── PHASE1_FACTS.md 2730 篇 KOL 数据分析事实
注:KOL 语料(原
corpus/目录,kazik/baoyu/saiboshanxin/huashu 等
第三方文章节选)与历史草稿(output/drafts/、output/research/)
不随本开源仓库一同分发,详见NOTICE.md。
快速开始
前提:Windows + PowerShell · Python 3.x · Docker · Claude Code CLI。
1. clone + 装依赖
git clone https://github.com/duliangkuan/fengyun-publish.git
cd fengyun-publish
pip install -r requirements.txt
2. 配凭证
copy .env.example .env
# 填入:WECHAT_APPID / WECHAT_SECRET / VOLCENGINE_IMAGE_KEY / ANTHROPIC_API_KEY 等
3. 启动 Docker 容器
# we-mp-rss(公众号 feed)
docker run -d --name we-mp-rss -p 8001:8001 ghcr.io/rachelos/we-mp-rss:latest
# RSSHub(B 站/知乎,需 cookie)
# 详见 docs/rsshub_cookie_setup.md
4. preflight 全绿
.\tools\preflight.ps1
7 项 P0 必须全 PASS / WARN。任一 FAIL 必须先修。
5. 触发 ship(在 Claude Code 主对话中)
通过 fengyun-publish skill 触发(自然语言即可):
「ship 一篇关于 Claude Code Auto Mode 的稿子」
主线程会自动跑完 19 Step,最后把草稿落到微信公众号草稿箱,作者在手机上做最后一次审阅 + 发布。
关键概念
| 词 | 含义 |
|---|---|
| huashu(花叔) | 项目内固定指克制版排版,暖象牙底 #FAF9F5 + 陶土橙 #D97757。Round 21 锁定为唯一活跃渲染路径 |
| fengyun(风云) | 项目作者笔名 + 公众号主理人;脚本前缀 |
| ITI | Information-Title-Information,风云自创三段漏斗:I-1 广搜 → T 数据驱动选题 → I-2 深搜 |
| critic 三轨 | Track A 数字分 + Track B 灵魂判断 + Track C 挂名意愿,gate_tree 投票 |
| Round | 系统迭代轮次(当前 26);通常对应一次重要机制改动 |
| Phase | 项目宏观阶段(当前 18 活跃);对应 reports/phaseN_*.md 调研 |
| gate | 物理门控保安(tools/gate.py),PreToolUse hook 拦截 |
| SOP | critic 多维评分系统(tools/sop_v2_1.py) |
| NORTH_STAR | 永不自动化的红线:草稿箱最后一击必须人手完成 |
Phase 进度
| Phase | 主题 | 状态 |
|---|---|---|
| 1 | 语料 + skill 装机 | ✅ LIVE |
| 2 | 端到端手工验证 | ✅ LIVE |
| 3 | 自动化 + 自评层骨架 | ✅ LIVE |
| 4 | critic 沙盒辩论 + 反馈环 | ✅ LIVE |
| 5 | 封面 + 配图系统 | ✅ LIVE |
| 6 | 排版深度优化 | ✅ LIVE |
| 7 | 封面模板 5→7 + 100% 实测 | ✅ LIVE |
| 8 | 信源升级(22→52) | ✅ LIVE |
| 9 | critic-revise loop 修复 | ✅ LIVE |
| 10-16 | 上云调研 | ⏸ 暂停等本地完善 |
| 17 | RSSHub 信源迁移 | ✅ LIVE |
| 18 | Feed 健康诊断 | ✅ LIVE(最新) |
不在 git 里的东西(clone 后缺什么)
| 类别 | 路径 | 怎么补 |
|---|---|---|
| 🔴 凭证 | .env · tools/.wechat_token.json |
见 .env.example 填 |
| 📦 数据库 | db.sqlite(437 MB,2730 篇 KOL metrics) |
重跑数据采集,或从作者本地备份恢复 |
| 📦 特征矩阵 | *.parquet(7 个) |
由脚本从 db.sqlite 重算 |
| 📦 KOL 语料 | corpus/ 整目录(开源版已移除) |
自行抓取,遵守版权 |
| 🔁 开源依赖 | vendor/(5 个子项目) |
各自 git clone |
| 🛠️ 二进制工具 | bin/md2wechat.exe |
重新编译 / 下载 |
| 🗑️ 中间态 | output/runs/ · output/render/ · output/images/ |
跑一次 pipeline 自动生成 |
安全说明
- 绝不把
.env或tools/.wechat_token.json提交到 git(已被.gitignore拦截) - 微信
access_token7200 秒有效,本地缓存安全 - 若复用本管道做自己的公众号,抓取的 KOL 文章请勿对外公开分发(版权敏感),仅供本机风格分析用
- 任何 cookie 字符串(B 站 / 知乎 / 公众号)只放本地 Docker 环境变量
🤝 关于作者
风云,公众号「研究 Agent 的云」主理人。一个人运营 AI 赛道公众号,
所有发出的文章都是用这套 pipeline 跑出来的——README 里你看到的每一个 step,
都是在我自己公众号上反复试过的活物,不是设计草稿。
这是我的第一个 MIT 开源项目,欢迎 ⭐ star / 提 issue / 拍砖 / PR。
| 渠道 | 怎么找到我 |
|---|---|
| 📰 公众号 | 研究 Agent 的云(微信搜索关注) |
| 💬 微信号 | FengYunAgent(加好友请备注「来自 GitHub」) |
| 📧 邮箱 | [email protected] |
| 🐙 GitHub | @duliangkuan |
📱 公众号 · 个人微信 · 交流群 · 支持作者
如果这个项目对你有帮助:
关注公众号 → 看真实在跑的产出长什么样;
加个人微信 → 1v1 聊技术或运营,备注「来自 GitHub」会优先通过;
加交流群 → 和其他独立 AI 公众号主理人一起聊;
觉得值 → 请我喝杯咖啡 ☕,但 star 更值钱。
| 关注公众号 | 加个人微信 | 加交流群 | 请我喝咖啡 ☕ |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 研究 Agent 的云 | FengYunAgent · 备注 GitHub | 群活码 · 不定期更新 | 这一杯让我多写几个 Step |
📜 License
MIT · Copyright (c) 2026 风云(GitHub: duliangkuan)
衍生作品请保留 NOTICE.md 里的致谢清单(卡兹克 / 宝玉 / 花叔 / 赛博禅心)。
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi



