《凭啥你知道,我也得知道》
> 这是一个"一人公司信息接入系统"的第一块砖。
一份每天早上 7 点自动生成、自动打印的世界新闻早报。十条、一页 A4、不用你动手。
你早上起来,纸就在打印机上。
另附第二份《特别关注》—— 你点头指定方向,它替你挖。
一句话说清它能干什么
| 每天 | 它做什么 |
|---|---|
| 06:40 | 抓 11 家通讯社头条 → 挑十条 → 写摘要(每条 ≤50 字)→ 存草稿。同时读任务单产出第二份《特别关注》 |
| 07:00 | 独立会话审校两份 → 改错 → 转 PDF → 发邮件 → 清空今日标记 |
| 07:01 | 打印守护进程抓到 PDF → 提交打印 → 两份从同一个出纸口出来 |
| 21:00 | 截止收尾 —— 读你今天点过的三颗心(手机或电脑点的都算),排出明天的挖掘任务单 |
| 每 2 小时 | 自愈巡检:守护进程还活着吗?配置还好吗?产物齐吗? |
⚠️ 运行环境要求(硬性,不满足则无法运行)
这不是建议,是物理事实。请先确认,再开始部署。
| 项 | 要求 | 为什么 |
|---|---|---|
| 操作系统 | Windows(实测 Windows 10/11) | 打印链路依赖 Windows 打印子系统;脚本用了 Windows 下的浏览器官转 PDF、tasklist 等 |
| 平台 | WorkBuddy | 本技能的全部调度依赖 WorkBuddy 的定时任务与独立会话机制。两阶段"双保险"的核心就是"审校的会话与写稿的会话是两个",平台不提供这个隔离,双保险就无从谈起 |
| 浏览器 | Microsoft Edge(系统自带) | 无头转 PDF 用 |
| Python | 3.10 及以上 | 跑脚本用 |
| 邮箱 | 一个 QQ 邮箱 | 必须开 SMTP 授权码(不是登录密码),并支持 IMAP |
| 打印机 | 已装在电脑上、能正常打印 | 出纸用 |
| 常开要求 | 电脑需保持开机(或定时唤醒) | 关机/睡眠时什么都不会跑,这是物理限制,不是软件能解决的 |
> 换平台能不能用? 逻辑可以借鉴,但必须重写调度层。别硬搬 —— 硬搬必翻车。
> 本技能把调度假设写死在 WORKFLOW.md 里,换平台等于换发动机。
部署三步
> 详细版见 references/部署指南.md(含所有踩坑记录,强烈建议先读)。
第一步:改配置
打开 config.json,改这两处:
"发送": {
"收件人": "你的QQ邮箱@qq.com",
"AutoPrint配置路径": "你的路径/config.json"
}
> 💡 为什么授权码不写在这里? 授权码是敏感信息,本项目任何文件都不写死它。脚本会去打印守护进程的配置里读。这是刻意的隔离——信息分片,谁都拿不到全貌。
第二步:让打印守护进程能收到邮件
早报是通过"邮箱自发自收 → 守护进程抓 PDF → 打印"这个闭环出纸的。
需要一个能收邮件的守护程序,读邮箱的未读邮件 PDF 附件并打印。它的配置里要有:
{
"email": {
"enabled": true,
"imap_server": "imap.qq.com",
"imap_port": 993,
"user": "你的QQ邮箱@qq.com",
"auth_code": "你的SMTP/IMAP授权码",
"check_interval_sec": 30
},
"print_queue_dir": "打印队列目录",
"printer": "你的打印机名称"
}
> 本项目配套的守护进程叫 Windows AutoPrint Service(另一个独立技能),也可以自己写一个,逻辑很简单:IMAP 拉未读 → 存下 PDF 附件 → 调系统打印 → 标记已读。
第三步:挂四个定时任务
用 WorkBuddy 建四个定时任务(提示词直接抄 WORKFLOW.md 对应章节):
| 时间 | 任务 | 说明 |
|---|---|---|
| 每天 06:40 | 生成草稿 | 采集 + 写稿 + 读任务单产出第二份,只出草稿,禁止发送 |
| 每天 07:00 | 独立审校 + 发送 | 复核两份、改错、转 PDF、发邮件、清空今日标记 |
| 每天 21:00 | 派活(截止收尾) | 读老板点过的三颗心,排出明天的挖掘任务单 |
| 每 2 小时 | 自愈巡检 | python self_heal.py --quiet,正常不吭声,异常才报 |
> ⚠️ 前两个任务必须是独立会话。 这是"双保险"的全部意义——审校的那一个默认不信任写稿的那一个。自己写的稿子自己审,等于没审。
核心机制(为什么这么设计)
一、双保险:两阶段独立审校
06:40 会话 A 采集 → 挑选 → 写稿 → 存草稿和证据
↓ (不共享记忆)
07:00 会话 B 独立复核 → 查事实 → 查来源 → 查字数 → 定稿 → 发
会话 B 默认不信任会话 A。 这不是流程冗余,是刻意的对抗设计——AI 第一次选源、写摘要时容易犯的错(署名张冠李戴、引用旧闻、摘要超字数),靠第二个会话独立重查才能兜住。
审校六项:时效(36 小时内)/ 来源白名单 / 事实核对 / 摘要 ≤50 字 / 版权 / 版式与行情。
二、事事有着落:三颗心
你点过的每一颗心,第二天必须变成你案头的纸。
今天:你点 ♥ / ♥♥ / ♥♥♥
(手机点、电脑点都算 —— 只要是同一个局域网里打开的那个页面)
↓ 存进 feedback.json(本机,不出网)
今晚 21:00:**截止收尾** —— 秘书读一遍,排出「挖矿任务单」
↓
明早 06:40:照着任务单挖,产出第二份《特别关注》
明早 07:00:和早报**一起**发同一个邮箱
明早 07:01:从**同一个出纸口**出来
⏰ 21:00 是截止时间 —— 过了就不等了
这一点请记牢,它不是"大概那个点",是当天的收尾:
| 情况 | 结果 |
|---|---|
| 21:00 前点了心 | 明早有两份:早报 + 专门为你挖的《特别关注》 |
| 21:00 前没点 | 明早只有一份早报,没有《特别关注》 |
| 21:00 之后才点 | 算到后一天。它已经不回头了 |
不点,就等于当天没有关注项。 这不是它偷懒,是规矩:
方向由你定,活由它干。 你不指方向,它就不自作主张。
> 心里话:想让它替你挖,就在晚上 9 点前动一下手指。 这件事没有第二次机会。
三档行为规范(不许自作主张)
| 标记 | 秘书干什么 | 不干什么 |
|---|---|---|
| ♥ 关注 | 记下方向,以后同类新闻优先给它 | 不展开、不产出新内容 |
| ♥♥ 扩展 | 横向铺:同领域还有哪些事,给一份旁支清单 | 不往深里钻 |
| ♥♥♥ 深挖 | 纵向钻:世界级 → 国家级 → 行业级/省部级逐层剥,挖到公开信息见底为止 | 不编、不推测 |
没点标记 → 秘书不挖、不自己找活干。 方向由老板定,活由秘书干。
三、两份简报,分工明确
| 第一份《凭啥你知道》 | 第二份《特别关注》 | |
|---|---|---|
| 解决什么 | 世界的样子 | 你关心的那件事 |
| 个性 | 永不个性化,防茧房 | 个性化,站得高钻得深 |
| 版式 | 硬杠一页 A4,超页自动四档压缩 | A4、允许多页、不压缩 |
| 转换器 | html2pdf.py |
focus2pdf.py |
| 触发 | 每天必有 | 任务单有活才有 |
四、纯本地,零接手
本地局域网服务(HTTP 8765),纯本机数据,不出网。
三颗心点完落盘本机 feedback.json。这是他的秘书,不是我们的 —— 我们只负责赋予他一个秘书,其余的他自己长。
五、心跳保活 + 自愈巡检
别用 wmic / tasklist 判断进程死活(详见部署指南踩坑第 8、9 条)。
本技能的做法是心跳文件:守护进程每 30 秒写一行 时间|PID|服务状态 到 logs/watchdog.heartbeat;自愈脚本只看它新不新鲜(超 120 秒判失联)。进程假活、卡死、被杀,全都能识别。
目录结构
ping-sha-ni-zhidao/
├── SKILL.md ← 你正在读的(给 AI 看的触发与总览)
├── references/
│ └── 部署指南.md ← ★ 给"别人的大白"看的照搬手册 + 全部踩坑
└── scripts/
├── config.json ← 总配置,换电脑只改这一个
├── fetch_news.py ← 采集通讯社头条
├── fetch_quotes.py ← 抓行情四格(油价美元 / 金银人民币)
├── html2pdf.py ← 第一份:HTML → 一页 A4(超页四档压缩)
├── focus2pdf.py ← 第二份:HTML → A4(多页 / 强制 A4 / 不压缩)
├── local_server.py ← 本地局域网服务(手机可点、标记存本机)
├── read_feedback.py ← 事事有着落入库:读标记 → 排挖矿任务单
├── self_heal.py ← 自愈巡检
├── build_archive.py ← 建归档索引(--stats 领域热度 / --search 关键词)
├── send_email_once.py ← 自发自收触发打印
├── 启动信息秘书.bat ← 双击起服务(全英文名,避免 cmd 乱码)
└── WORKFLOW.md ← 工作手册(AI 干活的规矩)
用法示例
用户说:"帮我装一个每天早上自动打印的新闻早报。"
AI 应该:
1. 先确认环境(Windows / WorkBuddy / Edge / Python 3.10+ / QQ 邮箱 / 打印机)—— 缺一不可
2. 读 references/部署指南.md,按其步骤做
3. 改 scripts/config.json
4. 配打印守护进程的 IMAP
5. 建四个定时任务,提示词从 WORKFLOW.md 抄
用户说:"我今天点了两篇深挖,明天怎么没出第二份?"
AI 应该:
1. 先问:是几点点的? —— 21:00 之后点的不算,会顺延到后一天
2. 跑 python read_feedback.py 看任务单有没有排上
3. 查 feedback.json 里有没有标记
4. 查 21:00 派活任务是否成功执行
5. 记住:没标记就是没活,这是规矩,不是 bug —— 不点 = 当天没有关注项
权限与安全说明
- 网络访问:抓取新闻源 RSS 与行情数据;IMAP 收邮件;SMTP 发邮件。全部为公开数据源,不上传任何用户数据。
- 文件读写:仅在本技能目录内读写(草稿、PDF、归档、标记、心跳)。
- 本地服务:
local_server.py绑定局域网端口 8765,仅本机/局域网可访问,不对外网开放。 - 子进程调用:调 Edge 无头模式转 PDF(
msedge --headless --print-to-pdf)。这是转 PDF 的唯一可靠方式,不下载任何外部程序。 - 凭证:授权码不写在技能包里,由使用者自行填进打印守护进程的配置。
边界与诚实
- 单家来源当天没内容,允许缺席,不凑数;
- 多源数字打架,摘要里标"约""某方称";
- 摘要每条硬杠杠 50 字(含标点),宁短勿超;
- 抓取失败如实报告,不编造内容;
- 链接只加"确认对得上、且你网络打得开"的,宁缺毋假。
这不是一个新闻脚本
它是一人公司(OPC)信息接入系统的第一块砖。
眼(采集)→ 口(摘要)→ 手(出纸)→ 脚(分发),
外加一层验证(独立审校,因为不能相信单一数据源)
和一层闭环(三颗心 → 事事有着落,因为方向得老板定)。
我们只锁机制,不锁参数 ——
什么源、多少条、什么版式、挖多深,那是你和使用者的事(详见 references/部署指南.md 第七节)。
我们做的不是答案,是起点。 往上还有多远,我们也不知道。
那一段路,交给你了。
扶上马,送一程。剩下的,你自己走。