技术白皮书 · 2026年5月
“当所有人都在教 AI 如何当一个更好的助理时,我们在教它如何当一个更好的审计员。”
快速导航
- 一、缘起 — 问题背景与范式切换
- 二、核心理念 — 职业怀疑论的 AI 数字化实现
- 三、技术架构 — 双站点 + 零成本栈
- 四、协作架构 — 多智能体指挥官模式
- 五、演进日志 — 故障修复记录
- 六、成果 — 站点结构与运营数据
- 七、结语 — 经验与下一步
- 附录 A — 完整配置与代码
一、缘起:当专业人士遭遇信息洪流
1.1 一个普遍而尖锐的困境
在云基础设施、金融监管、半导体供应链这三个高度专业化的领域,每天的生产内容量早已超出任何个人的阅读能力边界。
| 领域 | 典型信源 | 日均生产量 |
|---|---|---|
| 云基础设施 | Cloudflare Blog, Hugging Face | 10-20 篇技术公告 |
| 金融监管 | SEC Press Releases, PCAOB | 5-15 条监管动态 |
| 半导体供应链 | Semiconductor Engineering, EE Times | 10-30 篇产业分析 |
传统解决方案——RSS 阅读器、AI 摘要工具、邮件简报——本质上都在做同一件事:把 1000 字变成 200 字。但它们从未解决以下三个致命缺陷:
- 缺乏立场:AI 摘要默认站在”信息发布者”的立场,逐点罗列原文观点,事实与宣传混在一起;
- 缺乏判断:不具备对”这个动作背后到底是谁在获利”的追问能力;
- 缺乏风险意识:信息只在”发生了什么”层面流转,不触及”这可能带来什么副作用”。
1.2 从”阅读者”到”审计员”的范式切换
我们的核心洞察是:
信息处理不应该止步于”读懂”,而应该推进到”审过”。
这个想法来自一个冷酷的事实:SEC 的监管文件中从不写”这一法规将增加合规成本”,Cloudflare 的博客也从不说”这个新功能的 adoption 代价很高”。信息是公关过的——这正是”职业怀疑论(Professional Skepticism)“的用武之地。
职业怀疑论,是 CFA/CPA 审计准则中的核心理念:“以质疑的思维方式和批判性眼光评价审计证据,对可能导致财务报表重大错报的情况保持警觉。” 我们将这一准则从金融审计移植到了信息审计。
二、核心理念:职业怀疑论的 AI 数字化实现
2.1 System Prompt 中的”思维阉割”
传统 AI 摘要 Prompt 的核心结构是:
请用简洁的语言总结以下文章的要点。
我们的 Prompt 核心结构是:
你是一名冷酷的信息审计员,不是摘要助手。
强制规则:
1. 禁止使用任何正面修饰词(增强、领先、卓越、有效、创新、突破、引领、显著、高效)
2. 事实摘要控制在80字以内,只准讲"发生了什么动作"
3. 底层逻辑:必须挖掘该动作背后的"利益驱动"或"补救性质"
4. 风险分析:严禁写好处!必须寻找该技术/事件的副作用、潜在成本、技术债
5. 如果没发现具体风险,写"由于数据披露不足,存在无法评估的合规暗箱风险"
6. 如果内容没有实质性数据或是纯情绪宣泄,返回 null
这一 Prompt 的工程内核:
- 正面修饰词禁令:9 个高频”公关词”被列入黑名单,强制 AI 从”市场部”切换到”审计部”的叙事框架。
- 事实脱水:80 字硬约束,只准产出”谁做了什么”的客观陈述。
- 因果追溯:要求底层逻辑字段挖掘动作背后的”利益驱动”或”补救性质”——前者回答”谁在获利”,后者回答”谁在修补什么漏洞”。
- 风险强制:明确禁止写任何好处,迫使 AI 在信息中寻找不对称性——这正是职业怀疑论的精髓。
2.2 输出对比:原文 vs 审计稿
原始标题(SEC 新闻稿原文):
SEC Approves Exemptive Order for Proposed Rule Change to Permit Customer Cross-Margining in the U.S. Treasury Market
传统 AI 摘要:
美国证券交易委员会批准了一项豁免令,允许美国国债市场的客户进行跨保证金交易。该举措预计将增强市场效率和流动性。
审计引擎输出:
事实摘要:SEC 发布有条件豁免令,允许客户对清算机构的国债现货与期货头寸进行跨保证金操作。 底层逻辑:降低金融机构保证金占用成本,刺激国债市场流动性。 风险分析:跨市场风险传导可能加剧系统性风险,清算机构风控压力未披露。
对比要点:传统摘要的”预计将增强市场效率和流动性”在审计输出中被拆解为”降低保证金占用成本”(利益驱动)和”跨市场风险传导”(副作用)。信息量相当,但立场完全不同。
原始标题(Cloudflare Blog):
Post-Quantum IPsec Now Generally Available
传统 AI 摘要:
Cloudflare 宣布其 IPsec 后量子加密方案全面可用,展示了与 Fortinet、思科的互通测试成果。
审计引擎输出:
事实摘要:Cloudflare 宣布 IPsec 服务采用混合 ML-KEM 算法实现后量子加密,与 Fortinet、思科设备完成互通测试。 底层逻辑:应对量子计算威胁提前至2029年的时间表,防止现网数据被截获后遭量子计算机解密。 风险分析:混合加密方案增加协议栈复杂度;ML-KEM未经长期实战验证;企业需承担旧设备兼容性测试成本。
传统 AI 把这篇定位成”技术进展报道”;审计引擎把它定位成”后量子迁移的行业代价分析”。
2.3 评分机制:信息质量的量化标尺
每条审计输出附带 0-100 的评分。评分并非衡量”正面/负面”,而是衡量信息的信息熵——评分越低,信息越接近”无实质内容”(按下限10分过滤);评分越高,信息越具有”可审计的实质动作”。评分 < 10 的条目和纯情绪宣泄类内容被自动过滤,永不出现在输出中。
三、技术架构:逻辑隔离与物理闭环
3.1 双站点架构:Notes vs Audit
核心设计原则是主客分离:
| 维度 | notes.zhuzg.com(主观思考) | audit.zhuzg.com(客观审计) |
|---|---|---|
| 内容性质 | 个人知识库、长期笔记 | 每日情报报告、自动审计 |
| 内容来源 | 手动撰写 | 全自动采集+AI生成 |
| 更新频率 | 按需 | 每日 UTC 00:00 |
| 部署触发 | Push 触发 | GitHub Actions 定时调度 |
| 数据保留 | 永久 | 自动覆盖(保持每日3篇) |
这种架构设计的合理性在于:个人思考与情报审计是两种完全不同的信息处理活动。前者需要沉淀和反思,后者追求时效和覆盖。放在一个站点中会互相污染——读者无法区分哪些是作者深思熟虑的观点,哪些是 AI 自动生成的当日速报。
3.2 零成本技术栈
整个系统的运行时成本近乎为零:
| 组件 | 费用 | 说明 |
|---|---|---|
| GitHub Actions | 免费 | 每月 2000 分钟免费额度,每日运行约 3 分钟 |
| SiliconFlow API | 极低 | DeepSeek-V3 调用,每日约 3 篇 × 3 通道 = 9 次 API 调用 |
| Cloudflare Pages | 免费 | 无限带宽、无限请求、自动 CDN |
| Quartz 4 | 开源免费 | 静态站点生成框架,基于 Node.js |
| 源码托管 | 免费 | GitHub 公开仓库 |
每月绝对成本:仅 DeepSeek-V3 的 API 调用费,日均不到 0.002 元 RMB。
3.3 数据流全景
┌─────────────────────────────────────────────────────────────────┐
│ GitHub Actions (定时触发) │
│ │
│ ① Checkout repo │
│ │ │
│ ② python scripts/daily_audit.py │
│ ├── RSS 抓取 ──→ Cloudflare Blog, HuggingFace, SEC ... │
│ ├── HTML 抓取 ──→ PCAOB (无 RSS 的站点) │
│ ├── HN API 抓取 ──→ Hacker News Top 15 │
│ ├── AI 审计 ──→ SiliconFlow API (DeepSeek-V3) │
│ │ ├── 质量过滤(低分 / 空内容 → reject) │
│ │ ├── 中文标题翻译 │
│ │ └── Markdown 生成(Quartz frontmatter) │
│ └── 文件写入 ──→ content/00_Daily_Audit/{channel}/ │
│ │ │
│ ③ git commit + push (含版本冲突自愈) │
│ │ │
│ ④ npm ci + npx quartz build → public/ │
│ │ │
│ ⑤ 环境自愈:Ensure Cloudflare Pages project exists │
│ │ │
│ ⑥ wrangler pages deploy → audit.zhuzg.com │
│ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────┐
│ Cloudflare Pages CDN │
│ audit.zhuzg.com │
│ 全球 330+ 节点缓存 │
└─────────────────────────┘
3.4 运行逻辑全流程(文字版)
作为上述数据流的文字对照,以下按阶段拆解每次调度周期的完整链路:
第一阶段:情报截流(Data Ingestion)
- 定时触发:GitHub Actions 每 24 小时自动唤醒一次,执行
daily_audit.py。 - 多源抓取:脚本扫描预设的 RSS 订阅源、HTML 页面,以及 Hacker News Firebase API。
- 内容预处理:剥离广告和冗余 HTML 标签,仅保留纯净文本供审计引擎处理。
第二阶段:冷酷审计(AI Analysis)
- Prompt 注入:将清洗后的文本发送至 DeepSeek-V3,强制以审计员身份思考。
- 约束逻辑:正面修饰词被黑名单拦截;输出强制结构化为
事实摘要、底层逻辑、风险分析三个字段。 - 质量把关:评分 < 10 的条目自动丢弃,纯情绪宣泄类内容同样被过滤。
第三阶段:自动化构建(CI/CD)
- Git 同步:脚本自动将生成的 MD 文件 commit 并 push 到 GitHub(含版本冲突自愈)。
- Quartz 渲染:Actions 调用
npx quartz build,将 MD 转化为高性能静态 HTML。 - 自愈检查:自动化脚本检查 Cloudflare 项目状态,不存在则自动初始化(“自动建房”)。
第四阶段:边缘发布(Deployment)
- Wrangler 投送:通过 Cloudflare API Token,将生成的
public/目录部署至全球边缘节点。 - CDN 分发:Cloudflare 自动完成 SSL 管理与 330+ 节点缓存加速。
四、协作架构:多智能体(Multi-Agent)的指挥官模式
4.1 角色拆解
这一系统不是在单个提示词会话中完成的,而是跨越多次对话,调用不同 AI 的领域能力,形成一个三段式协作链:
| 角色 | 实体 | 职责 | 能力特征 |
|---|---|---|---|
| 指挥官 | 项目所有者 | 定义风控底线、确定业务边界、决策取舍 | 领域专业判断,对工程成本的敏感度 |
| 架构师 | Gemini | 逻辑推演、故障诊断、跨平台策略设计 | 对系统层面的宏观把握,能跳出代码看结构 |
| 执行员 | Hermes | 底层代码实现、Git 冲突处理、物理部署调试 | 直接操作文件系统,管理构建+部署管线 |
4.2 三个关键决策回合
决策一:从子仓库到内嵌 Quartz 的架构迁移
最初的方案是使用 Git 子模块(submodule)将 Quartz 作为外部依赖引入。Gemini 在推演后指出:子模块会引入复杂的同步问题,增加 CI/CD 管线的不确定性。
最终决策:将 Quartz 4 的核心文件直接复制到 daily-audit 仓库中,使仓库自包含。代价是仓库体积增加约 5MB,收益是 CI/CD 流程从 6 步简化到 4 步核心步骤,且不再依赖外部构建环境。
决策二:全自动 vs 安全性的取舍平衡
Workflow 需要自动 git push 才能触发 Cloudflare Pages 部署。但这带来一个问题:如果两个进程同时推送到 main 分支(Hermes 在本地推送框架文件,Actions 推送审计报告),就会产生版本冲突。
妥协方案:在 git commit 后插入 git pull --rebase origin main + git push --force-with-lease。这条指令在”自动化需求”和”安全性”之间找到了平衡——--force-with-lease 比 --force 安全,它只在远程分支未发生预期外变更时才强制执行。
决策三:环境自感知逻辑的加入
首次部署时遇到了 8000007: Project not found 错误——wrangler 试图部署到一个尚不存在的 Cloudflare Pages 项目。标准做法是”让用户在 Cloudflare Dashboard 手动创建项目”。
我们的做法:在 deploy 步骤前插入一个自检步骤:
- name: 🏠 Ensure Cloudflare Pages project exists
run: |
npx wrangler pages project list | grep -q '"daily-audit"' && \
echo "✅ Project exists" || {
echo "📦 Creating project..."
npx wrangler pages project create daily-audit --production-branch main
}这意味着:从第一次部署开始,这条流水线就是全自动的。不需要任何人的人工干预——不必登录 Cloudflare Dashboard,不必手动创建项目,甚至不必配置 DNS(Cloudflare 在绑定自定义域名时自动添加 CNAME 记录)。
4.3 工程高度:从”写提示词”到”系统设计”
这不是一个”写好 Prompt 然后一键运行”的系统。它涉及的工程维度包括:
- 状态管理:判断”是否有新文件需要 commit”,避免空提交;
- 并发安全:git pull —rebase 解决双进程推送冲突;
- 自愈机制:项目不存在则自动创建;
- 幂等部署:如果当天已经部署过,再次触发只做增量更新;
- 缓存感知:Quartz 使用固定文件名的 CSS/JS,部署后需用户硬刷新才能看到样式变更;
这些都不是 Prompt Engineering 的范畴——而是**系统设计(System Design)**的工程实践。
五、演进日志:那些消失的 Exit Code 1
5.1 回合记录
回合一:Prompt 阉割
首次尝试的 Prompt 是一个标准的”请总结以下文章的要点”,输出结果是平庸的公关式内容。经过 4 轮迭代:
- 第一轮 → 加入”禁止使用正面修饰词”
- 第二轮 → 加入”风险分析字段”并明确禁止写好处
- 第三轮 → 加入评分机制,设定 10 分过滤阈值
- 第四轮 → 加入
null返回值规则,使”拒绝回答”成为合法行为
关键转折:AI 默认的”助手本能”非常顽固——即使有禁令,它仍然倾向于写”这将显著提升…有助于…”。我们不得不在 Prompt 中反复强调这一禁令,并用 <null> 返回作为”说不了好话就闭嘴”的兜底机制。
回合二:版本冲突修复
Error:
Updates were rejected because the remote contains work that you do not have locally
根因:Hermes 在本地推送了 Quartz 框架文件的工作,与 Actions 自动提交的审计报告在时间线上重叠。
修复:引入 git pull --rebase origin main 前置步骤,将顺序改为:
commit → pull --rebase → push --force-with-lease
仅在存在新文件要推送时执行这组操作,无新文件时跳过(避免空提交)。
回合三:Project Not Found 修复
Error:
✘ [ERROR] 8000007: The project 'daily-audit' was not found.
根因:Cloudflare Pages 项目尚不存在,但 workflow 直接执行了 wrangler pages deploy。
修复:增加环境自感知逻辑——先查询项目是否存在,不存在则自动创建,创建成功后再部署。
5.2 从”写死脚本”到”自愈流水线”
这三个回合的核心共性问题是环境脆弱性:
| 问题 | 脆弱性描述 | 修复方案 | 工程原则 |
|---|---|---|---|
| 版本冲突 | 依赖单线程推送假设 | git pull —rebase | 防御性编程 |
| 项目不存在 | 依赖人工预配置 | 自动创建项目 | 自愈能力 |
| 空提交 | 未考虑无数据场景 | git diff —cached 预检 | 幂等性 |
每一次修复不是”改一个参数就完事”,而是增加一段逻辑,使整个系统在更多环境中可以运行而不需要人工干预。这正是工业级流水线的核心特征。
5.3 系统安全与稳健性设计(Robustness)
除上述演进修复外,系统在设计中还贯穿了以下稳健性原则:
- 逻辑隔离:Quartz 通过
-d content/00_Daily_Audit参数限定审计站只渲染特定文件夹,不污染站点中的其他目录。 - 失败容错:Python 脚本中的
try-except确保单篇 AI 审计失败不会中断整个流水线。一个源报错,其他源照常产出。 - 零成本扩展:Cloudflare Pages 的免费额度足以承载不限流量的流量高峰,无需为服务器月租费提心吊胆。
- Markdown 优先:所有情报以纯文本 MD 存储在 GitHub 仓库。即使 Cloudflare 停止服务,你依然拥有完整的、可全文检索的本地底稿库。
设计哲学:这套系统的精髓在于”让 AI 代理人管理 AI 代理人”。你作为审计长,只需要在最终的
audit.zhuzg.com页面验收结果。
六、成果:一份脱水的情报内参
6.1 站点结构
audit.zhuzg.com 目前包含三个审计频道:
| 频道 | 日均产出 | 典型审计立场 |
|---|---|---|
| 01_Infra_Audit 基础设施审计 | 2-3 篇 | 技术债评估、供应商锁定风险 |
| 02_Finance_Audit 金融监管审计 | 2-3 篇 | 监管不对称性、市场传导风险 |
| 03_Supply_Chain 供应链审计 | 2-3 篇 | 地缘政治暴露、产能瓶颈分析 |
每篇审计报告包含四个固定字段:
- 事实摘要(≤80 字):只讲发生了什么动作
- 底层逻辑:揭示利益驱动或补救性质
- 风险分析:只找问题,不写好处
- 审计评分(0-100):衡量信息的信息熵(不是好坏,是实质)
6.2 审计示例一览
基础设施审计示例(Cloudflare IPsec 后量子加密上线)
- 事实摘要把产品发布压缩到一个动作
- 底层逻辑揭示”应对2029年量子威胁时间表”的真实动因
- 风险分析指出”ML-KEM 未经验证 + 兼容性测试成本”
- 评分:75/100(有实质性技术内容,但仍是厂商博客)
金融审计示例(SEC 跨保证金交易豁免令)
- 事实摘要把 55 词英文标题压缩为 40 字中文动作陈述
- 底层逻辑揭示”降低保证金 → 刺激流动性”的利益链
- 风险分析指出”跨市场风险传导”的系统性风险盲点
- 评分:75/100(监管文件有实质内容,但信息透明度有限)
6.3 运营成本
| 指标 | 数据 |
|---|---|
| 每日 Token 消耗 | ~15,000-25,000 input + ~3,000-5,000 output |
| 日 API 费用(DeepSeek-V3) | < 0.002 元 RMB |
| 月 API 费用 | < 0.06 元 RMB |
| 月 GitHub Actions 消耗 | ~90 分钟(免费额度 2000 分钟) |
| 月 Cloudflare 费用 | ¥0 |
| 总月运营成本 | < 0.1 元 RMB |
七、结语:AI 时代的数字手工艺人
7.1 这篇文章的写作方式
这篇白皮书本身也是跨多智能体协作的产物。它形成于 Commander + Architect + Executor 的三段式协作,每一层贡献了自己的视角。
这不是在炫耀”我用了几个 AI”,而是在展示一种新的工作范式:
当 AI 足够廉价、能力足够普及时,真正的差异不在于”是否使用 AI”,而在于”如何组织 AI 协作地完成一件复杂的事情”。
7.2 你可以带走的三件事
-
提示词是一种”思维接口设计”:我们不是在”教 AI 如何回答问题”,而是在用 System Prompt 定义一个虚拟专家的职业立场、价值观和工作边界。这对任何需要专业判断的领域都成立——法律、审计、医学、工程。
-
零成本不等于零工程:GitHub Actions + Cloudflare Pages 的免费额度足够跑一条工业级的情报管线。但让它真正可靠工作的是工程细节——自愈逻辑、幂等性、并发安全。
-
多智能体协作不是玄学:Commander → Architect → Executor 的三角结构本质上就是传统软件开发中的”产品 → 架构 → 开发”协作模式。只是这一次,部分角色由 AI 担任。分工的价值不在于”谁更聪明”,而在于不同层面的约束条件被分拆到了不同的会话中处理。
7.3 下一步
- 增加日语信源(日本半导体设备管制动态)
- 审计结果周报推送(Telegram / 邮件)
- 长期趋势分析:对同一话题的连续跟踪
免责声明:本系统及所有生成内容仅作底层逻辑复盘参考,不构成任何投资或决策建议。AI 审计结果可能存在事实性错误,请结合原始信息综合判断。
附录 A:技术底稿
A.1 GitHub Actions Workflow(完整版)
# 📡 Daily Intelligence Audit Pipeline
# Fetches RSS/HTML sources → AI audit (SiliconFlow) → Quartz build → Cloudflare Pages deploy
#
# Required GitHub Secrets:
# SILICONFLOW_API_KEY — API key for SiliconFlow
# CLOUDFLARE_API_TOKEN — Cloudflare API token (Cloudflare Pages edit permission)
# CLOUDFLARE_ACCOUNT_ID — Cloudflare Account ID
name: Daily Intelligence Audit
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
permissions:
contents: write
jobs:
audit:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: 📥 Checkout repo
uses: actions/checkout@v4
- name: 🐍 Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip"
cache-dependency-path: requirements.txt
- name: 📦 Install Python dependencies
run: pip install -r requirements.txt
- name: 📡 Run daily audit pipeline
env:
SILICONFLOW_API_KEY: ${{ secrets.SILICONFLOW_API_KEY }}
run: python scripts/daily_audit.py
- name: 📝 Commit generated audit reports
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add content/00_Daily_Audit/
if git diff --cached --quiet; then
echo "No new audit reports to commit."
else
git commit -m "📡 Daily audit reports — $(date -u '+%Y-%m-%d')"
# 自愈:同步远程变更,防止版本冲突
git pull --rebase origin main
git push --force-with-lease
fi
- name: 🏗️ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: 📦 Install Node.js dependencies
run: npm ci
- name: 🔨 Build Quartz site
run: npx quartz build --directory content/00_Daily_Audit -o public
- name: 🔍 Verify build output exists
run: |
if [ ! -d "public" ]; then
echo "❌ ERROR: public/ directory not found — Quartz build failed."
exit 1
fi
echo "✅ public/ directory exists with $(ls public/ | wc -l) items"
# 自愈:自动创建 Cloudflare Pages 项目(如果不存在)
- name: 🏠 Ensure Cloudflare Pages project exists
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
run: |
echo "🔄 Checking if project 'daily-audit' exists..."
npx wrangler pages project list 2>/dev/null | grep -q '"daily-audit"' && \
echo "✅ Project 'daily-audit' already exists" || {
echo "📦 Creating project 'daily-audit'..."
npx wrangler pages project create daily-audit --production-branch main || true
}
- name: 🚀 Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy public/ --project-name=daily-audit --branch=mainA.2 AI 审计 System Prompt(核心逻辑)
你是一名冷酷的信息审计员,不是摘要助手。
强制规则:
1. **正文全部使用简体中文输出**
2. 禁止使用任何正面修饰词(如:增强、领先、卓越、有效、创新、突破、引领、显著、高效)
3. 事实摘要:控制在80字以内,只准讲"发生了什么动作"
4. 底层逻辑:必须挖掘该动作背后的"利益驱动"或"补救性质"
5. 风险分析:严禁写好处!必须寻找该技术/事件的副作用、潜在成本、技术债
或由于信息不透明导致的审计盲点。如果没发现具体风险,
写"由于数据披露不足,存在无法评估的合规暗箱风险"
6. 如果内容没有实质性数据或是纯情绪宣泄,返回 null(JSON null 值)
返回格式(JSON,不要 markdown 包裹):
{
"title_cn": "中文标题翻译",
"fact": "事实摘要(80字以内,只讲动作)",
"logic": "底层逻辑(利益驱动或补救性质)",
"risk": "风险分析(副作用/成本/技术债/审计盲点)",
"score": <整数0-100>
}
A.3 Python 数据流:日常执行的完整流程
① fetch_all()
├── fetch_rss() → 6 个 RSS 源(feedparser + requests)
├── fetch_html() → 1 个 HTML 源(PCAOB, BeautifulSoup)
├── fetch_hackernews() → Hacker News Top 15(Firebase API)
└── 返回 {channel: [{title, link, pubdate, content, source}]}
② run_ai_audit(article)
├── 构造审计 Prompt
├── POST SiliconFlow /chat/completions (model=deepseek-ai/DeepSeek-V3)
├── 正则提取 JSON 响应
├── 过滤评分 < 10 的条目
└── 返回 {title_cn, fact, logic, risk, score}
③ generate_md(channel, article, audit)
├── 从中文标题生成安全文件名
├── 组装 Quartz frontmatter (title, date, tags, score, source)
├── 写入四字段审计正文
└── 写入免责声明
④ main()
├── 每个通道按评分降序取 Top 3
├── 清理旧文件(每日覆盖)
├── 写入新报告
└── 输出审计摘要统计
A.4 GitHub Secrets 配置速查
系统正常运行需要以下 3 个 GitHub 仓库 Secret(Settings → Secrets and variables → Actions):
| Secret | 用途 | 获取途径 |
|---|---|---|
SILICONFLOW_API_KEY | 硅基流动 API 密钥,用于调用 DeepSeek-V3 | SiliconFlow Dashboard |
CLOUDFLARE_API_TOKEN | 具备 Cloudflare Pages Edit 权限的令牌 | Cloudflare Dashboard → My Profile → API Tokens |
CLOUDFLARE_ACCOUNT_ID | Cloudflare 账户 ID | Cloudflare Dashboard → Workers & Pages → API 概览 |
三者缺一不可:缺少前两个会导致 AI 审计或部署步骤失败,缺少 ACCOUNT_ID 则环境自愈(自动创建 Pages 项目)无法工作。
源码:github.com/alericzhu/daily-audit-pipeline