法律公众号周报(周报模式)
概述
帮法律人解决五件事:该关注哪些号(推荐)、关注的号发了什么(监测+周报)、同行在怎么做内容(对标分析)、随手收藏喜欢的号(自定义添加)、越看越准(自动迭代)。数据获取走 WebSearch,零配置开箱即用。
核心交付:每周一 08:00 自动扫描关注号近 7 天的新文章,按实务价值评分分层,生成浅色周报,高价值文章自动入库 IMA 知识库。
解释器:优先用 /Users/zouhao/.workbuddy/binaries/python/envs/default/bin/python;脚本仅标准库,python3 ≥ 3.8 即可。
铁律
| 场景 | 必须遵守 | 不应发生 |
|---|---|---|
| 搜索结果 | 只写搜索到的真实文章;无把握的 url 留空;覆盖不到的账号标「未发现」 | 不应编造文章标题/链接/日期 |
| 推荐账号 | 推荐前用 WebSearch 核实账号当前仍活跃;告知「以微信内搜索为准」 | 不应保证推荐目录中的号一定存在 |
| 数据文件 | 只通过 mpwatch.py 子命令改 assets/accounts.json 与 state/seen.json |
不应手写/手改这两个 JSON(易写坏格式) |
| 推送 | 推送失败时降级为「保存文件 + 说明原因」 | 不应因推送失败中断简报生成 |
| IMA 知识库 | 仅限用户自建个人 KB,使用前确认归属 | 不应指引订阅/加入/接受邀请非自建 KB |
| 评分 | 每条入选文章必须给出评分理由(1-2 句) | 不应给空洞的「推荐阅读」式评价 |
| 反馈 | 用户反馈必须记录到 state/feedback.json 并影响后续评分 |
不应收集反馈但不使用 |
身份系统
支持四种法律职业身份,影响推荐账号、内容筛选和评分分层:
| 身份 | 核心需求 | 内容偏好 | 评分加成 |
|---|---|---|---|
| 律师 | 办案参考、客户开发、技能提升 | 典型案例、裁判规则、实务技能、行业动态 | 实务技能+1 |
| 法官 | 类案参考、裁判统一、学术前沿 | 类案分析、裁判观点、学术理论、司法解释 | 学术理论+1 |
| 检察官 | 公诉参考、法律监督、政策把握 | 刑事案例、检察政策、证据规则、公诉技能 | 刑事案例+1 |
| 法务 | 合规管理、风险防控、合同审查 | 合规指南、合同审查、劳动用工、公司治理、数据合规 | 合规指南+1 |
身份在首次部署时选择,可随时用 mpwatch.py profile --identity <身份> 修改。
评分算法(五维评分 + 多样性约束 + 篇数可选)
每周从 212 个号中搜到的候选可能超过 150 篇,用户可选 20 篇(轻量版)或 40 篇(完整版)。算法分三步:评分 → 排序 → 截断。
篇数选择
| 版本 | 篇数 | 适合谁 | 阅读时间 |
|---|---|---|---|
| 轻量版 | 20 篇 | 时间紧张的律师/法务 | 10-15 分钟 |
| 完整版 | 40 篇 | 想全面了解一周动态 | 20-30 分钟 |
用户在首次部署时选择,也可随时用 mpwatch.py profile --limit 20 或 --limit 40 切换。
第一步:五维评分(每篇文章 1-17 分)
| 维度 | 权重 | 5 分 | 4 分 | 3 分 | 2 分 | 1 分 |
|---|---|---|---|---|---|---|
| source_authority | 5 | 最高法/最高检 | 省高院/知名学者 | 中院/头部律所 | 一般自媒体 | 无法确认 |
| content_type | 4 | 新司法解释/法律修订 | 裁判规则/指导性案例 | 典型案例分析 | 实务技能/方法论 | 行业动态/资讯 |
| practice_match | 3 | 执业方向+身份双匹配 | 执业方向匹配 | 身份匹配 | 通用实务 | 不相关 |
| freshness | 3 | 3 天内 | 5 天内 | 7 天内 | 超 7 天 | 无法确认 |
| popularity_proxy | 2 | 多平台转载/大号首发 | 单一来源但权威 | 一般来源 | 小众来源 | 无法确认 |
总分 = 五维之和(1-17 分)
popularity_proxy 说明:WebSearch 拿不到真实阅读量,用以下代理指标估算:同一文章在多个搜索结果中出现(+2)、来源是 10 万+ 大号(+1)、被其他媒体转载(+1)。这些信号叠加,模拟「这篇文章正在被传播」的效果。
第二步:排序 + 多样性约束
按总分降序排列后,应用以下约束防止「一个号霸屏」:
- 单账号上限:同一公众号最多入选 2 篇
- 单分类上限:同一执业方向最多入选 4 篇
- 必须覆盖:至少覆盖 3 个不同执业方向(如果候选足够)
第三步:截断 + 分档
轻量版(20 篇):
| 总分 | 档位 | 含义 | 占比 |
|---|---|---|---|
| 13-17 | ⭐ 必须看 | 直接影响办案 | ~5 篇 |
| 8-12 | 📌 值得看 | 有参考价值 | ~10 篇 |
| 5-7 | 📄 扫一眼 | 背景了解 | ~5 篇 |
| <5 | ❌ 淘汰 | 不推荐 | — |
完整版(40 篇):
| 总分 | 档位 | 含义 | 占比 |
|---|---|---|---|
| 13-17 | ⭐ 必须看 | 直接影响办案 | ~8 篇 |
| 8-12 | 📌 值得看 | 有参考价值 | ~20 篇 |
| 5-7 | 📄 扫一眼 | 背景了解 | ~12 篇 |
| <5 | ❌ 淘汰 | 不推荐 | — |
篇数不足时按实际数量出,不注水。
评分原则
- 每条入选文章必须有 1-2 句评分理由(为什么值得看)
- 评分理由中注明关键维度得分(如「source=5, content=4, 执业匹配=3」)
- 执业方向匹配的加 +1 档(如用户做建工,建工相关文章自动升级)
- 身份匹配的加 +1 档(如用户是法官,学术理论文章自动升级)
- 时间超过 7 天的 freshness=1,最多 📄
- 无法确认出处的 source=1,最多 📄
- 反馈加权:历史 👍 多的来源 popularity_proxy+1,👎 多的 -1
工作流一:周报生成(核心)
触发语:「生成本周公众号周报」「公众号周报」「看看最近有什么实务文章」。
读清单 → 逐账号 WebSearch(近 7 天)→ 内容筛选 → 评分分层 → dedupe → render → IMA 入库 → 交付 → 收集反馈
- 运行
scripts/mpwatch.py list --json取 active 账号;文件不存在先init。执业方向用profile读取,影响评分加成。 - 逐账号 WebSearch,查询词模式:
"<账号名>" 公众号+ 时间词(如「近一周」「2026年7月」)。每个账号找近 7 天文章,搜不到就记「未发现」,不编造。 - 内容筛选:只收录与法律实务/法律适用直接相关的文章。符合以下任意一条即纳入:
- ✅ 典型案例/类案分析、裁判规则/裁判观点解读
- ✅ 新法新规/司法解释的条文解读与适用指引
- ✅ 实务技能/办案方法论(举证、庭审、谈判、文书等)
- ✅ 行业数据/司法统计/法律科技工具评测
- ✅ 法律风险提示/合规指南(面向企业/当事人视角) 以下内容一律剔除:
- ❌ 领导调研/视察/讲话、党建活动、政治学习
- ❌ 法院/检察院内部行政动态(如人事任免、表彰、运动会)
- ❌ 纯时政新闻(如防汛救灾、会议通稿)——除非其中包含可直接引用的法律适用观点
- ❌ 普法短文/宣传稿(无实务参考价值的口水文章)
- 五维评分:对每篇入选文章按五维算法打分(source_authority/content_type/practice_match/freshness/popularity_proxy),写 1-2 句评分理由并注明关键维度得分。执业方向匹配的升一档,身份匹配的升一档。
- 排序截断:按总分降序排列,应用多样性约束(单账号≤2篇,单分类≤4篇,覆盖≥3个方向),按
profile中的weekly_limit截断(20 或 40 篇)。按总分分档:13-17=⭐, 8-12=📌, 5-7=📄, <5=淘汰。 - 候选写 NDJSON 到临时文件,每行:
{"account","title","url","date","summary","score","score_reason"},account/title 必填,score 为 1-3(3=⭐, 2=📌, 1=📄)。 - 去重:
scripts/mpwatch.py dedupe --input <候选文件> > /tmp/new.jsonl。 - 渲染:
scripts/mpwatch.py render --input /tmp/new.jsonl --out <输出.md>。新增为 0 也照常渲染(写「本期无新增」)。 - HTML:用 Python 脚本生成浅色周报 HTML(
#f8f7f5背景,评分分栏,⭐ 在最前),保存到工作区公众号周报-<日期>.html。 - IMA 入库:⭐ 和 📌 文章自动推送到 IMA 知识库(走
references/ima-integration.md配置,未配置时跳过并说明)。 - 用 present_files 交付;并在回复里附各账号覆盖情况 + 评分分布统计 + IMA 入库条数。
- 收集反馈:周报交付后,问用户「这期周报怎么样?哪些文章对你有用?」,记录到
state/feedback.json。
工作流〇:首次部署(初始化全流程)
触发语:「帮我做公众号监测」「设置公众号监控」「首次部署」「我想用这个技能怎么做」。 当用户首次使用本技能、或关注清单为空、或执业方向未设置时,执行此流程。
首次引导(自然对话式,不要机械问)
你是用户的法律同行,帮 ta 把这件事聊明白。分四步走,每步都附带默认建议,用户可以随时说「就这样」「都行」跳过。
第一步:搞清楚身份
「先确认一下,您是做什么的?
① 律师 —— 办案为主,需要实务参考和技能提升 ② 法官 —— 审判为主,需要类案参考和裁判统一 ③ 检察官 —— 公诉为主,需要刑事案例和检察政策 ④ 法务 —— 企业合规,需要风险防控和合同审查」
用 mpwatch.py profile --identity <身份> 写入。身份影响后续推荐和评分。
第二步:搞清楚执业方向
「您主要关注哪几个领域?可以多选——公司商事、公司法务、银行金融、建工房产、刑事、劳动、执行、知产、婚姻家事、行政法都行。不确定的也可以说『不区分』,我全推荐。」
对应的 8 个方向来自 references/account-directory.md。用 mpwatch.py profile --areas "方向1,方向2,..." 写入。
第三步:搞清楚想看什么
「您主要想通过这份周报解决什么问题?比如:
① 跟判决 —— 关注最高法院/省高院的典型案例、裁判规则变化,办案时直接引用 ② 学技能 —— 实务操作、举证技巧、文书模板、办案方法论 ③ 追新规 —— 新法新司法解释一出来就能看到解读 ④ 都要 —— 不挑,实务相关的全收」
这个偏好会体现在后续评分分层上。选 ① 时最高法/省高院案例自动升 ⭐;选 ② 时实务技能文章优先 📌;选 ③ 时新法解读自动 ⭐。
第四步:搞清楚看多少
「每周看多少篇文章合适?
① 20 篇轻量版(推荐)—— 每周一 10 分钟看完,只看最重要的 ② 40 篇完整版 —— 想全面了解一周动态,不怕多」
用 mpwatch.py profile --limit 20 或 --limit 40 写入。用户可随时切换。
第五步:搞清楚怎么看
「周报怎么看方便?
① 每周自动出(推荐)—— 每周一 08:00 自动扫描,生成 HTML 周报,打开 WorkBuddy 就能看 ② 想看才跑 —— 不自动跑,您说『帮我看看最近有什么』时才跑 ③ 先试一次 —— 什么配置都不做,先跑一次看看效果再决定」
根据用户选择:
- 选 ① → 创建每周一 08:00 的自动化(走
references/push-setup.md),告诉用户「下周一 08:00 会出第一份」 - 选 ② → 不创建自动化,告诉用户「随时说『跑一次公众号周报』即可」
- 选 ③ → 立即进入工作流一跑一次,跑完再回来问要不要定时
第六步:推荐账号 + 执行
把前四步的答案串成一句简短小结说给用户听(「好的,您是律师,做建工+刑事,想看新规和案例,每周一自动出。我来帮您配」),然后:
mpwatch.py init(如清单不存在)。- 按所选的执业方向+身份,从
references/account-directory.md推荐账号。分方向展示,每方向 10-15 个,附一句话理由,标注 ★ 等级(5★=必关注,4★=推荐,3★=可选)。不抛出 99 个号的信息风暴,只在用户说明「全加」时才批量加。 - 给简洁选择:「全加 / 分方向挑 / 我自己选」。确认后
mpwatch.py add逐个写入。 - 补通用础石:若清单中缺失(最高法、最高检、本地省高院、人民法院报、法律读库、无讼),自动补入。
首次部署的反面教材(不要这样做)
- ❌ 一口气列出 99 个号让用户选
- ❌ 问完执业方向直接跳到推送配置,跳过「想看什么」和「怎么看」
- ❌ 假设用户知道 HTML 推送是什么
- ❌ 用技术命令吓用户(先说人话,操作放后面)
- ❌ 每个问题都必须是单选对错——允许「都行」「你推荐」「先试试」
工作流二:推荐值得关注的公众号
触发语:「推荐公众号」「我该关注哪些号」「XX 方向有什么好的公众号」。
- 读执业方向:
scripts/mpwatch.py profile;未设置先走工作流〇。 - 按
references/account-directory.md对应领域挑账号,逐条给一句话理由;先 WebSearch 核实账号活跃再推荐。 - 用户确认后
scripts/mpwatch.py add <name> --category <分类> --tags <标签>逐个写入。
工作流三:对标账号内容分析
触发语:「分析对标账号」「看看 XX 号最近在发什么」「帮我找选题」。
按 references/benchmark-framework.md 执行:取样近期文章 → 四维分析(更新节奏/选题分布/标题套路/爆款特征)→ 输出 3-5 个可直接用的选题建议。只给有把握的建议,不编造阅读数据,不照抄标题。
工作流四:手动添加喜欢的公众号(自定义收藏)
触发语:「关注 XX 公众号」「把 XX 号加到监测」「添加 XX 到我的列表」「收藏这个公众号」「我想看 XX 号的文章」。
这是用户随时可以使用的快捷入口——不需要经过推荐/部署流程,直接把自己喜欢的号塞进去。
流程
- 确认账号名:用户提供公众号名称(如「天同诉讼圈」「高杉LEGAL」)。名称若不完整,请用户确认全称。
- 可选核实:用 WebSearch 搜一次确认该公众号当前活跃、确实存在(搜索词:
"<账号名>" 公众号)。不存在或不活跃的如实告知用户、让用户核对全称。 - 确定分类:根据公众号内容自动归类。参考分类取值:法院 / 检察 / 律协 / 学术 / 法律媒体 / 实务自媒体 / 对标账号 / 其他。有疑问时问用户,不猜。
- 写入清单:
scripts/mpwatch.py add "<账号名>" --category "<分类>" --tags "<标签1,标签2>"。- tags 根据内容特点加(如「建工」「劳动法」「案例」「行业」等),帮助分类展示。
- 添加成功后告诉用户:「已加入关注清单,共 N 个号」。
- 防重:添加前脚本自带重名校验,同名账号不会重复添加,直接告诉用户「已在清单中」。
示例对话
用户:关注「法客帝国」公众号
→ WebSearch 确认活跃 → 分类「实务自媒体」、标签「公司商事,案例,裁判规则」→ add → 回复:「已加入关注清单(共 130 个号)。下次跑周报时会包含它的文章。」
工作流五:自动迭代(越看越准)
触发语:「迭代」「优化周报」「让周报更准」「看看哪些号该删了」。
每次周报生成后自动执行,也可手动触发。
反馈收集
周报交付后,主动问用户:
「这期周报怎么样?
- 哪些文章对你有用?(👍)
- 哪些觉得没必要?(👎)
- 有没有漏掉什么重要内容?」
记录到 state/feedback.json(每条:日期、文章标题、评分、用户反馈 👍/👎/漏掉)。
评分自适应
基于反馈数据自动调整后续评分:
- 来源加权:某账号的文章连续 3 次 👍 → 该账号后续文章自动 +1 档
- 来源降权:某账号的文章连续 3 次 👎 → 该账号后续文章自动 -1 档(或标记「建议移除」)
- 类型偏好:用户对某类内容(如裁判规则 vs 学术理论)的 👍 率明显高 → 该类内容自动 +1 档
- 频率控制:用户对周报频率的反馈(太多/太少)→ 建议调整自动化频率
账号健康检查
每周自动检查:
- 连续 4 周无产出 → 标记「疑似停更」,建议用户移除
- 连续 4 周无实务文章 → 标记「内容不符」,建议用户移除
- 连续 4 周 👍 率 > 80% → 标记「高质量」,推荐用户关注该账号的其他平台
定期回顾
每月第一周周报自动附带「月度回顾」:
- 本月共收录 N 篇文章,⭐ X 篇 / 📌 Y 篇 / 📄 Z 篇
- 最有价值的 5 个账号(按 👍 率排序)
- 建议移除的 3 个账号(连续无产出或无实务内容)
- 建议新增的 3 个账号(基于高 👍 文章的来源推荐)
关注清单管理
| 操作 | 命令 |
|---|---|
| 初始化(首次) | scripts/mpwatch.py init |
| 查看清单 | scripts/mpwatch.py list(--json 机器可读) |
| 添加账号 | scripts/mpwatch.py add <名称> --category 法院 --tags 案例,综合 --note 备注 |
| 移除账号 | scripts/mpwatch.py remove <名称> |
| 设置身份 | scripts/mpwatch.py profile --identity 律师 |
| 设置执业方向 | scripts/mpwatch.py profile --areas "建筑工程,劳动法" |
| 统计 | scripts/mpwatch.py stats |
分类建议取值:法院 / 检察 / 律协 / 学术 / 法律媒体 / 实务自媒体 / 对标账号 / 其他(渲染简报时按此顺序分栏)。
定时自动推送
用户要「每周自动推送」时,按 references/push-setup.md 配置。
推送方式三选一(按优先级询问用户):
- WorkBuddy HTML 推送(推荐):每次生成带排版的 HTML 周报,通过 present_files 在 WorkBuddy 对话中直接预览,用户打开 WorkBuddy 即可查看。
- 邮件推送:周报渲染为 HTML 邮件发送到指定邮箱(需配置 SMTP)。
- 桌面文件:周报存
~/Desktop/legal-mp-daily/,用户自己打开看。
默认每周一 08:00 执行。已配置的自动化不要重复创建;先 automation_update mode=list 查重。
免费使用与版权保护
本技能完全免费,全部功能开箱即用,无需激活码、不绑定设备,可自由复制安装到任何 WorkBuddy 环境。
防修改保护: 核心脚本内置完整性校验(EXPECTED_HASH),代码被篡改后启动即锁死拒绝运行,提示从官方渠道获取原版。
版本与更新: 运行 scripts/mpwatch.py version 查看当前版本;scripts/mpwatch.py update --check 查看更新方式。新版本由作者发布,用户下载后覆盖安装(保留 assets/accounts.json 和 state/ 目录即可保留个人数据)。
版权声明: 本技能受《中华人民共和国著作权法》保护。允许免费使用与转发原版分发包;未经许可不得修改后二次分发或用于商业用途。
数字指纹: 分发包内含隐形数字水印与金丝雀数据。任何未经许可的复制、蒸馏(抽取账号清单/评分体系二次开发)、二次分发均可被技术溯源,并作为著作权维权证据。账号清单的遴选、分类、标注构成《著作权法》第十五条保护的汇编作品。
已知限制
- WebSearch 覆盖不全:无法保证每个公众号每次都能搜到全部新文章。部分公众号(尤其是新号、小号)可能搜索结果较少或缺失。这是技术限制,不是账号问题。
- 无实时性:WebSearch 结果有索引延迟,通常滞后 6-24 小时。不适合「刚发的文章立刻看」场景。
- 评分依赖主观判断:五维评分由 AI 基于标题+摘要判断,无法像 k-NN 那样量化。评分理由(含各维度得分)是为了让判断可解释,但仍有主观成分。
- 阅读量不可得:WebSearch 拿不到文章真实阅读量。popularity_proxy 用「多平台转载/大号首发/被引用」等信号模拟,不等于真实阅读数。
- 20/40 篇硬上限:每周只推 20 或 40 篇,可能遗漏一些质量不错但排名靠后的文章。如需更多可随时手动跑「帮我看看公众号有什么新文章」获取全量。
- 反馈数据稀疏:自动迭代依赖用户反馈,反馈越少迭代越慢。建议每周至少给 1-2 条反馈。
- IMA 需要单独配置:IMA 知识库集成需要用户提供 API 凭证,未配置时自动跳过。
- 无法阅读原文:WebSearch 返回的摘要是搜索引擎的摘要,不是全文。如需阅读原文请点击链接跳转。
- 完整性校验可被绕过:
EXPECTED_HASH校验是本地校验,技术上可被懂代码的人绕过。这是「防君子不防小人」的设计,目的是防止篡改版冒充原版流通,而非绝对阻止破解。
安全与隐私
- 无外部凭证:本技能不需要任何 API key / OAuth token / cookie。纯 WebSearch 驱动。
- 无敏感数据:不读取通讯录、不访问微信客户端、不存储任何用户私密信息。
- 本地运行:
mpwatch.py仅标准库,只在技能目录内读写assets/和state/,无网络请求。 - IMA 凭证:如用户配置 IMA,凭证仅本地存储,不发送到任何服务器。
- 反馈数据:用户反馈仅存储在本地
state/feedback.json,不发送到任何服务器。
Rationalizations
- 为什么选 WebSearch 而非爬虫:微信无公开 API,爬虫有法律风险和封号风险。WebSearch 是合法合规的替代方案,虽然覆盖不全但可持续。
- 为什么单文件脚本:降低维护成本,用户不需要理解多文件架构。纯标准库,零依赖,python3 ≥ 3.8 即可。
- 为什么用评分分层而非 k-NN:k-NN 需要训练集,对 212 个号的泛化能力有限。评分分层用「评分理由」让 AI 的判断可解释,且不需要维护训练数据。
- 为什么浅色模板:与法律周报(
#f8f7f5)保持视觉一致性,降低用户在两个技能间切换的认知成本。 - 为什么默认周报而非日报:法律人的时间碎片化,每天看 20+ 篇文章不现实。周报模式(每周一集中看)更符合实际工作节奏。
- 为什么加身份系统:不同法律职业的信息需求差异很大。律师需要办案参考,法官需要类案统一,检察官需要公诉技能,法务需要合规管理。身份让推荐和评分更精准。
- 为什么加自动迭代:静态的评分规则会随着时间失效(账号停更、内容质量下降、用户兴趣变化)。自动迭代让系统「越看越准」,不需要用户手动维护。
脚本参考
scripts/mpwatch.py(纯标准库,无网络,只写技能目录内 JSON 与 --out 指定文件):
init / list / add / remove / profile / stats— 清单与配置dedupe --input <NDJSON>— 与state/seen.json比对去重,stdout 输出新增条目并标记已见render --input <NDJSON> [--out 文件] [--date 日期]— 按分类分栏渲染 Markdown 简报feedback [--list] [--add <标题> --account <来源公众号> --rating 👍/👎] [--stats]— 用户反馈管理(自动迭代;--account 让 --stats 能按来源统计)version— 显示当前版本update --check— 查看版本与更新方式selftest— 隔离环境全链路自测;每次改脚本后必跑
scripts/render_html.py(独立脚本,不是 mpwatch.py 的子命令):
python3 scripts/render_html.py --input <NDJSON> --out <HTML> [--date 日期] [--identity 律师]— 渲染浅色周报 HTML(评分分栏 ⭐/📌/📄)
打包结构
法律公众号周报/
├── SKILL.md ← 本文件
├── VERSION ← 版本号(与 frontmatter version 一致)
├── scripts/mpwatch.py ← 清单管理 + 去重 + 渲染 + 反馈(单文件)
├── scripts/render_html.py ← 浅色周报 HTML 渲染(评分分栏,独立脚本)
├── assets/accounts.json ← 关注清单 + 执业方向(init 生成,脚本维护)
├── state/seen.json ← 已见文章库(去重用,自动生成)
├── state/feedback.json ← 用户反馈库(自动迭代用,自动生成)
└── references/
├── account-directory.md ← 分执业方向的推荐目录
├── benchmark-framework.md ← 对标分析框架
├── push-setup.md ← 定时推送配置指南
├── ima-integration.md ← IMA 知识库集成指南
└── update-guide.md ← 版本更新指南