A 阶段:31省真实录取位次/一分一段表接入 实现内容: 1. SCHEMA.md 扩展:新增 §2.1 score_distribution 字段定义 2. 湖南接入 2026 官方一分一段锚点: - 来源: 湖南省高考工作第二次新闻发布会 - 物理类600分以上: 18876人 - 历史类600分以上: 2139人 3. 黑龙江接入 2026 官方一分一段完整锚点: - 来源: 省招生考试院一分段统计表 - 物理类: 700分17人, 600分6580人, 本科线340分累计82444人 - 历史类: 670分15人, 600分857人, 本科线385分累计21417人 4. 新增 test_score_distribution.py 锁住契约 数据结构: - score_distribution: 顶层可选字段 - subjects: 物理/历史分类 - benchmarks: 分数->累计位次锚点 - score_line_at_600: 600分以上总人数 - bachelor_score_line: 本科分数线 验证: pytest crowd_db 158 passed, 3 skipped
8.6 KiB
8.6 KiB
Crowd DB 溯源数据 Schema (T3.1)
For Hermes: 数据溯源 / provenance schema for
data/crowd_db/{province}.json配套 T3.1「扩展院校数据模型」:27省JSON含溯源字段。
1. 顶层(每个省份文件根节点)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
province |
str | ✅ | 省份中文名(如 湖南),需与 loader.PROVINCE_FILE_MAP 的 key 对齐 |
last_updated |
str (ISO) | ✅ | 本文件最后更新日期,格式 YYYY-MM-DD |
data_year |
int | ✅ | 数据的参考年份(如 2025 表示基于 2025 高考数据) |
source |
str | ✅ | 数据来源描述(人类可读),如 千问/元宝/百度/豆包 公开推荐汇总 |
source_url |
str | ⚠️ | 主参考来源 URL;不得使用仓库自引用路径冒充来源证明 |
source_type |
str enum | ✅ | manual_summary / official_release / platform_scrape / derived |
confidence |
float | ✅ | 数据可信度,区间 [0.0, 1.0];0.5 以下视为不可用,触发人工复核提示 |
score_ranges |
list | ✅ | 分数段列表(结构见下节);骨架文件允许 [] 表示待人工整理 |
trusted_sources |
list[object] | ⚠️ | 可信参考源数组;用于记录后续年度复核应优先使用的官方/权威来源 |
quality_note |
str | ⚠️ | 对当前省份数据可信度口径的人工说明(如“高置信人工整理”/“结构化骨架”) |
source_type 枚举
manual_summary:人工整理(最常见,T2.1 湖南数据走此路径)official_release:省考试院 / 教育部官方公告platform_scrape:从大厂AI公开页抽取(注意合规边界)derived:由其它数据派生(如 985/211 名单)
2. score_ranges 元素
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
range |
[int,int] | ✅ | 分数区间 [min, max],闭区间 |
note |
str | ⚠️ | 段名/批次说明(如 一本中段) |
recommendations |
list | ✅ | 推荐条目列表,可空 |
2.1 score_distribution(一分一段表,顶层)
2026-06-25 Phase A 新增:用于存放官方公布的一分一段表/位次数据。
{
"score_distribution": {
"data_year": 2026,
"source_url": "https://www.hneeb.cn/...",
"source_type": "official_release",
"last_updated": "2026-06-25",
"subjects": {
"物理": {
"benchmarks": [
{"score": 700, "cumulative_count": 17},
{"score": 690, "cumulative_count": 80},
{"score": 600, "cumulative_count": 6580}
],
"score_line_at_600": 18876,
"total_above_bachelor_line": 82444,
"bachelor_score_line": 340
},
"历史": {
"benchmarks": [
{"score": 670, "cumulative_count": 15},
{"score": 600, "cumulative_count": 857}
],
"score_line_at_600": 2139,
"total_above_bachelor_line": 21417,
"bachelor_score_line": 385
}
}
}
}
说明:
score_distribution为可选顶层字段,未接入一分一段表的省份省略subjects分物理类/历史类(新高考省份)或理科/文科(旧高考省份)benchmarks为关键分数段锚点(从一分一段表采样)score_line_at_600为 600 分以上考生总数total_above_bachelor_line为本科线上累计人数bachelor_score_line为本科分数线
3. recommendations 元素
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
str | ✅ | 院校名称 |
major |
str | ⚠️ | 专业;无专业聚合时填 "" |
subject_requirements |
object/null | ⚠️ | 新高考省份选科要求;历史推荐不填时为 null |
program_type |
str/null | ⚠️ | 特殊类型(定向培养/专项计划/公费师范等);无则为 null |
frequency |
int | ✅ | 推荐频次(0-4) |
platforms |
list[str] | ✅ | 推荐平台名(千问/元宝/百度/豆包) |
predicted_increase |
int | ⚠️ | 预测分数上涨分;无可靠预测可填 0 |
alternatives |
list | ⚠️ | 替代院校推荐,可空 |
subject_requirements 结构
{
"preferred_subject": "物理",
"reselect_subject": ["化学", "生物"],
"note": "首选物理,再选化学/生物"
}
说明:
preferred_subject: 首选科目(物理/历史)reselect_subject: 再选科目组合,可为空 listnote: 人类可读说明- 旧高考省份或选科要求未整理时填
null
program_type 枚举
常见值:
定向培养国家专项地方专项高校专项中外合作办学公费师范生军校公安院校艺体类null(普通专业)
4. trusted_sources 元素
推荐结构:
{
"name": "教育部阳光高考",
"url": "https://gaokao.chsi.com.cn/",
"kind": "national_official"
}
说明:
name: 来源名称url: 入口 URL;如仅确认机构类型、尚未完成年度入口复核,可暂为空串kind:national_official/province_official_pending_review/ 其他内部约定枚举
5. 骨架文件约定
未完整整理数据的省份,应输出符合顶层 schema 的骨架:
{
"province": "山东",
"last_updated": "2026-06-12",
"data_year": 2025,
"source": "",
"source_url": "",
"source_type": "manual_summary",
"confidence": 0.0,
"score_ranges": []
}
骨架文件 confidence=0.0,loader 应在 confidence < 0.5 时打印 WARN 但不抛错(避免阻断运行)。
6. 质量等级门槛定义
质量等级判定采用综合门槛(confidence + score_ranges + recommendations + alternatives + 分数带覆盖),而非仅依赖 confidence。
门槛来源:docs/plans/2026-06-23-national-high-trust-crowd-db-plan.md §4
6.1 skeleton(骨架)
confidence < 0.5- 用途:UI 占位、provenance 展示、告知"该省数据仍待人工补完"
- 不允许驱动反扎堆强结论
6.2 low(建设中)
confidence >= 0.5但未达 usable 门槛- 或
confidence >= 0.65但 recommendations / alternatives 不达标 - 用途:标识"已脱离骨架但未达可用",区别于 skeleton
6.3 usable(可用)
必须同时满足:
confidence >= 0.65score_ranges >= 6个分数段recommendations >= 24条alternatives >= 24条- 至少 1 个省级官方来源入口完成年度复核
用途:普通省份的基础反扎堆分析、用户侧展示"中等信任"标签
6.4 high(高置信)
必须同时满足:
confidence >= 0.80score_ranges >= 8个分数段recommendations >= 40条alternatives >= 60条- 覆盖高/中/低至少三层分数带(而非只覆盖头部段)
- 省级官方入口已完成年度复核
用途:核心省份的反扎堆强结论、用户侧展示"高信任"标签
6.5 防静默升级
判定逻辑位于 data/crowd_db/risk_report.py::_compute_quality_level。
禁止仅修改 confidence 值就升级 quality_level;必须同时补齐 score_ranges / recommendations / alternatives。
7. 当前覆盖范围与全国化边界
当前代码兼容口径(31 省,2026-06-25 Stage 4 起全国化)
- 23省:河北、山西、辽宁、吉林、黑龙江、江苏、浙江、安徽、福建、江西、山东、河南、湖北、湖南、广东、海南、四川、贵州、云南、陕西、甘肃、青海、新疆
- 4直辖市:北京、上海、天津、重庆
- 4自治区(Stage 4 新增):内蒙古、广西、西藏、宁夏
港澳台(未纳入)
- 港澳台地区暂未纳入 crowd_db loader
7. 验证
python3 -c "import json,glob; [print(p, list(json.load(open(p)).keys())) for p in sorted(glob.glob('data/crowd_db/*.json'))]"
每个文件必须包含上述顶层 8 个字段中的至少 province / last_updated / data_year / source_type / confidence / score_ranges 6 个。