住建政策情报采集分析助手
面向省级住建部门业务人员,验证完整业务闭环:
选择日期范围 → 采集三个官网 → 查看采集日志 → 筛选主题/地区 → 下载政策附件 → 生成交互式网页周报 → 查看分析结论与证据来源。
三个固定信息源(站点结构见 references/site_schema.md):
| 层级 | 来源 | |---|---| | 国家层面 | 住房和城乡建设部 https://www.mohurd.gov.cn/index.html | | 本省 | 江苏省住建厅 http://jsszfhcxjst.jiangsu.gov.cn/ | | 对标省 | 浙江省住建厅 https://jst.zj.gov.cn/index.html |
运行环境
- 采集脚本用 WorkBuddy 内置 Python 运行时:
C:/Users/shaoyuanhang/.workbuddy/binaries/python/envs/default/Scripts/python.exe - 依赖:httpx、beautifulsoup4、lxml(已安装于该 venv)
- 数据目录:
C:/Users/shaoyuanhang/WorkBuddy/Claw/data/(SQLite + 附件 + 日志 + 快照) - 产物目录:
C:/Users/shaoyuanhang/WorkBuddy/Claw/output/(search.html + report.html) - 图表库:
assets/echarts.min.js(本地 bundle,无需外网)
执行流程(6 个工作流单元)
单元 1:采集任务初始化
- 与用户确认:起止日期、采集站点(默认三站全选)、主题筛选(默认全部)。
- 若用户未给日期,默认「最近 7 天」(今天往前 7 天)。
- 用
date命令获取今天日期,计算起止(不要手算)。
单元 2:站点采集(scripts/collect.py)
cd "C:/Users/shaoyuanhang/WorkBuddy/Claw/.workbuddy/skills/housing-policy-intelligence/scripts"
"C:/Users/shaoyuanhang/.workbuddy/binaries/python/envs/default/Scripts/python.exe" collect.py \
--start <YYYY-MM-DD> --end <YYYY-MM-DD> \
--sites mohurd,jiangsu,zhejiang \
--db "C:/Users/shaoyuanhang/WorkBuddy/Claw/data/policy.db" \
--data-dir "C:/Users/shaoyuanhang/WorkBuddy/Claw/data" \
--snapshot-fallback
- 逐站抓列表 → 日期过滤 → 抓详情 → 结构化 → 去重 → 入库 → 下载附件 → 保存快照。
- 单站失败不阻塞;任务状态:成功 / 部分成功 / 失败。
- 失败时自动加载
data/snapshot/articles.json(最近成功快照)。
单元 3:内容结构化(scripts/structure.py)
- 标题、时间、来源、栏目、正文、主题、摘要、指纹、重要度。
- 主题按
references/topics.md词表分类,WorkBuddy 可补充标签。
单元 4:附件处理(scripts/download_attachments.py)
- 类型白名单 pdf/doc/docx/wps/ofd;单文件 ≤ 20MB;单站 ≤ 20 个;sha256 去重;失败可单独重试。
单元 5:知识库入库(scripts/store.py)
- 文章正文入库 SQLite;保留原始 URL、抓取时间、任务 ID。
单元 6:周报生成
- 数据聚合 + 组装网页:
scripts/generate.py一键完成(内部调用 build_data + build_html,并复制 echarts)。 - WorkBuddy 读取 report_data.json 里的文章,用自身 LLM 生成分析(见下),写入
data/analysis.json。 - 用 preview_url 展示生成的
output/report.html。
网页模板已固化在
assets/report.html、assets/search.html,只需注入数据与分析,无需重写页面。
AI 分析产出规范(写入 data/analysis.json)
{
"key_conclusions": [{"title": "", "content": "", "article_ids": [..]}],
"compare": {"national": "", "jiangsu": "", "zhejiang": "", "diff": ""},
"topic_analysis": [{"topic": "", "overview": "", "policy_summary": "", "layer_compare": "", "judgement": "", "article_ids": [..]}],
"clues": [{"title": "", "regions": [], "topics": [], "clue_type": "新政策|试点|资金|监管|改革", "importance": 0, "ai_basis": "", "action": "", "article_ids": [..]}]
}
- 每个主题至少生成四类分析:数据概览、政策摘要、层级对照(住建部要求 vs 江苏/浙江落实差异)、业务研判(对本省参考意义/待关注/潜在行动)。
- 政策线索含:标题、地区、主题、类型、重要度、AI 判断依据、建议动作、支撑文章 ID。
- 可编辑边界:结论、摘要、线索可编辑;原文、来源、时间、附件不可改写。
- 所有结论必须带支撑 article_id(结论 → 文章 → 原文/附件可追溯)。
组装 HTML(generate.py 一键)
python scripts/generate.py --db data/policy.db --data-dir data --out-dir output \
--start <YYYY-MM-DD> --end <YYYY-MM-DD> --analysis data/analysis.json
内部:build_data.py 聚合 → build_html.py 把 __REPORT_DATA__/__ANALYSIS__ 占位符替换为 JSON → 复制 echarts.min.js → 输出 output/report.html + search.html。然后用 preview_url 打开 report.html。
数据标识约定
- 实时数据 = 本次真实采集;缓存数据 = 失败时加载的快照;AI 草稿 = 模型生成待审核。
- 页面统一区分三类标识;采集失败记录在周报「采集说明」区块展示。
重试与兜底
- 附件重试:直接重跑
collect.py(指纹去重保证文章不重复入库,失败附件会重新下载);或调用download_attachments.py中的retry_one(att, dir)函数对单个附件重试。 - 单站失败重跑:
python collect.py ... --sites <失败站>(仅重采失败站点)。 - 断网演示:直接加载
data/seed/种子数据(python seed.py --db ... --data-dir ...已生成的离线快照)。
Scan to join WeChat group