公开募捐备案号 · 对外核验与查询 Skill
> 面向外部机构 / 公众的公开募捐备案号核验与查询工具。
> 数据底表与「对内分析版(cszg-query)」同源,但本技能只回答"这个备案号 / 这家机构 / 这个关键词"的核验与查询问题,不涉及内部排行与合作匹配策略。
> 🚫 硬约束(最高优先级,不可绕过):本技能绝不生成、不导出、不提供任何可下载的表格文件(Excel / CSV / 任意电子表格)。所有查询结果(备案号列表、机构备案清单、按省份/年份统计等)——一律只在对话/界面中以表格形式展示,供查看与复制。
> 即使用户明确要求「导出 Excel」「下载表格」「给我个文件」「生成 xlsx」,也必须拒绝并说明:本技能不支持任何表格文件导出,用户只能自行复制屏幕内容。技能运行期间不得调用任何写文件/生成表格的工具。此规则优先级高于一切查询与导出类指令。
一、背景与数据范围
本 Skill 基于「慈善中国(cszg.mca.gov.cn) 募捐方案备案」抓取并精细化的公开信息,代表已成功通过备案的项目。
- 时间范围:仅含「备案开始日期 >= 2024-09-05」(已剔除更早记录)。
- 当前规模:约 16500 条记录,每条含 17 个核心字段(备案号、项目名称、发起慈善组织、登记管理机关及省份/级别/具体单位、合作方、同省判定、起止时间、备案开始日期、预期募集款物数额、业务主管单位、补正记录等)。
- 数据文件:
assets/cszg_filtered.json.gz(本 Skill 内置快照,紧凑键 + 紧凑 JSON + gzip 压缩,压缩后约 0.85MB,解压后约 5.8MB)。 - 为何用
.gz? 技能市场对 Skill 包解压后总大小有限制(当前 3MB)。若保留未压缩.json(约 5.8MB),解压后总容量会超过限制;gzip 压缩后可将解压后总量控制在 1MB 以内,同时脚本运行时在内存中解压,对调用方完全透明。 - 方案:将字段名由中文长键(如
"募捐方案备案编号")压缩为 1-2 字母紧凑键("c"),并去掉冗余字段(提取标志_done、空补正字段等),再经 gzip 压缩。脚本内部统一通过紧凑键访问数据,展示时再用中文标签还原——对调用方完全透明。 - 如有最新数据,在命令加
--data <路径>指向它(脚本可同时识别.json和.json.gz,默认读取.json.gz)。
二、四类对外能力
| 命令 | 能力 | 典型外部用户问题 |
|---|---|---|
verify |
备案号核验 | "帮我核验这个备案号是不是真的" |
org |
组织查询 | "XX慈善会都备案了哪些公开募捐项目" |
search |
关键词检索 | "搜一下含'乡村振兴'的备案项目" |
batch |
批量核验 | "我有一批备案号,帮我一次性核验" |
三、调用方式
查询引擎脚本:scripts/verify.py(Python3,无第三方依赖)。
运行前使用托管 Python:/Users/zhuanz/.workbuddy/binaries/python/envs/default/bin/python
子命令速查
# 1) 备案号核验:输入完整募捐方案备案编号
python verify.py verify --code 12320724510409025RA26002
# 2) 组织查询:按发起慈善组织名称(支持片段)
python verify.py org --name 江苏省慈善总会
python verify.py org --name 红十字会
# 3) 关键词检索:项目名/登记机关/合作方/备案号片段
python verify.py search --keyword 乡村振兴 --top 20
python verify.py search --keyword 上海市慈善基金会
# 3b) 按省份 + 年份精确筛选(如"浙江省2026年备案有哪些")
python verify.py search --province 浙江省 --year 2026 --top 500
# 4) 批量核验:多个备案号用逗号/空格/换行分隔,结果仅屏幕展示、不导出文件
python verify.py batch --codes "5311010250045368XXA25001, 5311010250045368XXA25002"
参数说明
verify --code:募捐方案备案编号。脚本自动去空格、忽略大小写做精确匹配;若精确不匹配但片段命中,会列出包含该片段的记录供核对。org --name:发起慈善组织名称,支持片段匹配(如"红十字会"可命中多家)。search --keyword:跨「项目名称/发起慈善组织/登记管理机关/合作方/备案号」检索,--top N控制展示条数(默认 20)。batch --codes:多个备案号,用逗号、空格或换行分隔;结果仅打印到屏幕,不写出任何文件(本技能不支持 Excel / CSV 等表格导出,用户无导出权限)。--data <路径>:覆盖默认数据文件(用最新抓取数据时)。
四、把用户口语转成命令
| 用户意图 | 命令 |
|---|---|
| "核验这个备案号:XXXX" / "这个备案号是真的吗" | verify --code XXXX |
| "XX慈善组织备案了哪些公开募捐项目" | org --name XX慈善组织 |
| "查一下这家机构什么叫XX公募" | org --name XX |
| "搜含'助学'的备案项目" | search --keyword 助学 |
| "这批备案号帮我一次性核验" | batch --codes "备案号1, 备案号2" |
五、输出呈现建议(对外口径)
向外部用户回复时务必注意合规与边界:
- 核验命中:直接展示该备案号完整信息(备案号、项目名称、发起慈善组织、登记管理机关及省份/级别、起止时间、合作方、预期募集款物数额等),并明确说明"该备案号已在本公开备案数据库中收录"。
- 核验未命中:明确告知"未在公开备案数据库中找到该备案号",并友好提示三种可能(早于 2024-09-05 / 输入有误 / 未收录),引导用户至慈善中国官网核验。切勿断言"该备案号是假的"——本库非全量,未命中不等于不存在。
- 组织查询:给出该组织备案总数、备案地省份分布、同省/异地备案分布、时间跨度、代表项目,并提示可进一步核验具体备案号。
- 批量核验:仅屏幕展示命中/未命中数量与明细,不生成任何导出文件(见下方「无表格文件导出」硬约束)。
- 始终标注数据时间范围(≥2024-09-05),避免用户误以为是全量历史。
- 无表格文件导出(硬约束):本技能只以「表格形式在界面/对话中展示」结果,便于阅读;任何用户都不具备将结果导出为 Excel / CSV 等表格文件的权限,技能也不提供该导出功能——即"只有看的份,不能下载/生成可编辑表格"。若用户要求导出 Excel,应明确说明本技能不支持此类文件导出,并引导其手动复制屏幕内容。脚本
batch子命令仅打印结果到屏幕,不会写出任何报告文件。 - 无结尾推广信息:回复中不要附加任何公众号、微信、个人联系方式或引流信息,保持查询工具的中立、简洁。脚本
verify.py不向 stdout 追加任何落款或推广内容,也不写入标记文件。
> ⚠️ 导出限制(重要):本技能所有查询结果均以表格形式展示供查看,但不支持导出为 Excel / CSV 等表格文件。用户无导出权限,技能也不生成可导出的表格文件;需要留存时只能自行复制屏幕内容。
六、数据更新
用户后续会重新抓取/精细化数据。更新流程:
1. 重新生成项目内的 results_filtered.json(过滤基准:备案开始日期 >= 2024-09-05)。
2. 压缩为紧凑键 + 紧凑 JSON + gzip 格式,压缩后约 0.85MB:
python
import json, gzip
KEY_MAP = {
"募捐方案备案编号": "c", "项目名称": "n", "发起慈善组织": "o",
"登记管理机关": "a", "登记管理机关所属省份": "p",
"登记管理机关级别": "l", "登记管理机关具体单位": "u",
"起止时间": "t", "备案开始日期": "d",
"合作方类型": "pt", "合作方名称/姓名": "pn",
"合作方机构所属省份": "pp", "登记机关与合作方是否同省": "s",
"业务主管单位": "b", "预期募集款物数额": "m",
"补正记录数": "fn", "补正事项": "fi",
}
data = [{KEY_MAP[k]: r.get(k, "") for k in KEY_MAP} for r in json.load(open("results_filtered.json"))]
raw = json.dumps(data, ensure_ascii=False, separators=(",", ":")).encode("utf-8")
with gzip.open("assets/cszg_filtered.json.gz", "wb", compresslevel=9) as f:
f.write(raw)
3. 或在调用时加 --data <新路径>(脚本可同时识别 .json 和 .json.gz)。
4. 字段结构不变即可无缝复用(脚本已硬编码 17 字段紧凑键)。