EduKB · 教育数据知识引擎

中国中小学全量名录 + 全球高校排名 + 专业目录;同一份数据同时供人查、供机器调、供智能体用。

1. 数据覆盖与来源

数据规模来源更新授权
中国中小学(含幼儿园)名录203,431(全国口径)学生体质健康网 学籍学校代码库跟随学籍库,脚本可日更内部/查询用途;对外分发需确认
全球高校 + 综合排名2,000(CWUR 2026)cwur.org年更公开可下载,转载须注明来源
中国高校名录(教育部)3,196(本科 1,412 / 专科 1,540 / 成人 244)教育部全国高等学校名单(互动查询接口)年更,新增院校随批复入库政府公开信息,可引用
专业目录91 专业类 / 839 专业(2025;另 6 个军事学门类专业未公开)教育部《本科专业目录》年更公开政策文件
未收录:QS / THE / US News / 软科 明细(闭源,禁止商业再分发)。如需并排名次,只保留名次与自算指标,并在界面标注来源。

2. REST 接口

当前版本 v1.1.4:门户支持深浅双主题,首屏分布条随 tab 切换(学校=省份×学段 / 排名=名次分档 / 高校=办学层次 / 专业=学科门类),点条形即按该维度检索;手机端(≤720px)完成整段适配;名次分档点击按真实名次区间过滤(rank_min / rank_max);新增 CSV 导出 /api/export.csv。
GET  /api/stats                                         覆盖度、来源、最近同步
GET  /api/schools?q=&province=&level=&limit=&offset=     学校检索(name/code 模糊)
GET  /api/schools/{code}                                学校详情(10位学校代码)
GET  /api/universities?q=&country=&level=&source=moe&limit=  高校检索(带 CWUR 名次;source=moe 只看教育部名录)
GET  /api/universities/{slug}                           高校详情 + 全部榜单成绩
GET  /api/rankings?source=cwur&year=&top=&country=&q=   榜单查询
GET  /api/majors?q=&level=&category=&discipline=      专业检索(category=专业类,discipline=学科门类)
GET  /api/grid?level=                                   省份×学段 交叉分布(不传 level 返回各段合计)
GET  /api/rank_stats?country=CN                         排名分档分布 + 上榜国家前十
POST /api/employee/ask  {"q":"福建有多少所小学"}            数字员工(结论+证据链)
POST /mcp                                                MCP JSON-RPC(智能体)
GET  /openapi.json                                       OpenAPI 3.1 规格

3. 智能体接入(MCP)

# 1) 握手
curl -X POST /mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'

# 2) 列工具
{"jsonrpc":"2.0","id":2,"method":"tools/list"}

# 3) 调用
{"jsonrpc":"2.0","id":3,"method":"tools/call",
 "params":{"name":"edu_search_schools",
           "arguments":{"province":"福建","level":"小学","limit":5}}}
工具用途
edu_search_schools按名称/省市/学段检索中小学,返回学校代码
edu_get_school按学校代码取档案
edu_search_universities检索全球高校(带最新名次)
edu_ranking某榜单某年前 N 名,可按国家过滤
edu_university_detail高校详情 + 各榜单成绩
edu_coverage覆盖度与同步记录(判断可信度优先调它)

4. 同步任务

python ingest/k12.py  --db data/edukb.db --workers 12      # 全国 20 万条学校,约 15-25 分钟
python ingest/cwur.py --db data/edukb.db --year 2026       # 2000 所高校,秒级
python ingest/moe.py  --db data/edukb.db --listid 10000101 # 教育部普通高校 2952 条,约 2 分钟
python ingest/moe.py  --db data/edukb.db --listid 10000022 --job moe_adult  # 成人高校 244 条
python ingest/moe_reconcile.py --db data/edukb.db          # 与榜单实体去重合并(同校只留一条)
K12 接口有 Referer 校验:缺 Referer 会返回 200 但内容为空(静默失败),脚本已内置;同时必须带省市锚点参数才会返回列表。教育部名单走 hudong.moe.gov.cn 的 getMoDataIndex.jsp 分页(每页 5 条),moe.gov.cn 的静态页一律 403。

5. 公开访问策略

限流:单 IP 每分钟 120 次(EDUKB_RATE_LIMIT 可调,0=关闭),超限返回 429 + Retry-After
缓存:GET /api/* 结果缓存 30 秒(EDUKB_CACHE_TTL 可调),响应头 X-Cache: HIT 表示命中
静态:Cache-Control: public, max-age=30
两部分都是进程内实现,零第三方依赖;nginx 侧如需更强防护可再加 limit_req / proxy_cache。

5. 学校代码规则(用于地区/学段解析)

10 位学校代码:第 3-4 位 = 省级行政区划码(11 北京 / 35 福建 …)
例:2111000346 → 北京;学段按校名关键词推断,字段 level_inferred=1 表示推断值
K12 源接口只返回「学校名称 + 学校代码」两列,没有市/县字段,故 schools.city / county 保持为空——这是源数据口径,不是遗漏;需要市/县级定位时按代码 3-4 位取省、再按校名与代码段细分。