在线体验(纯静态,打开即用): zinging.github.io/chinese-his...
源码(MIT):github.com/zinging/chi...
如果它对你有用,欢迎点个 Star支持我继续推进,也欢迎一起补充或修正内容。

一、它由三个并排的模块组成
学历史最容易出的问题是:年代表背了又忘,皇帝、思想家、诗人各记各的,脑子里全是散点。 所以这个站没有按"人物百科"来组织,而是拉了三条并行的线,让你看到同一个时代的三个侧面。
1. 帝王谱系 ------ 7 朝 77 位皇帝
隋、唐、五代、宋、元、明、清,一条横向卡片流贯穿。点开任意皇帝,是生平时间线、人物关系图、 冷知识和争议话题;地图上叠着各朝疆域轮廓、古地名点,以及靖难南下、郑和下西洋、清军入关这类 行军/航海路线的分段动画。悬案疑案按"名称由来 → 背景 → 人物 → 经过 → 结果 → 影响 → 开放讨论 → 史料出处"八段拆开,给的是推理链,不是"某某年发生某事"一句话。
2. 思想源流 ------ 儒、道、佛、诸子、理学、心学,27 部经典
儒(孔孟)、道(老庄)、佛(禅宗)、诸子(兵法 / 法家 / 墨家)、程朱理学、阳明心学。 这里刻意不做"金句摘抄",而是把经典放回作者当时的处境里读,再配辩证选择题。
3. 诗词鉴赏 ------ 22 位文人,按朝代编排
不做机械背诵。先看诗人一生的行迹地图,再读一首诗背后的处境。比如李白在江陵写 "轻舟已过万重山",是因为他刚接到大赦令------劫后余生,船才显得那么快。诗路舆图会标出 他们去过哪、在哪写下名句(还在开发中)。
二、总体架构:三个入口,一份数据层
三个模块对应三个 HTML 入口,但共用同一套约定和同一个 data/ 目录:
bash
chinese-history-atlas/
├── data/ # 知识层,全部是可读可改的 JSON
│ ├── sui/ tang/ wudai/ song/ yuan/ qing/
│ │ ├── emperors/ # 皇帝卡片:生平、时间线、人物、冷知识、争议
│ │ ├── cases/ # 悬案疑案
│ │ ├── places/ routes/ # 古地名(含今址、经纬度)、行军航海路线
│ │ └── quiz.json # 该朝选择题
│ ├── quiz/quiz.json # 明朝题库(其余朝代在各自目录)
│ ├── rujia/ daojia/ foxue/ zhuzi/ lixue/
│ │ └── index.json # 儒/道/佛/诸子/理学心学,每个一个 index.json
│ ├── shiwen/index.json # 诗词:22 位文人 + 13 个公案
│ ├── boundaries/ # 各朝疆域 GeoJSON
│ └── portraits/ # 工笔风头像
├── web/
│ ├── index.html # 帝王谱系
│ ├── guoxue/index.html # 思想源流
│ ├── guoxue/shici.html # 诗词鉴赏
│ ├── app.js # 帝王谱系主逻辑(约 2900 行原生 JS)
│ ├── search-core.js # 跨页搜索
│ ├── vendor/leaflet.* # Leaflet 1.9.4 本地化,不走 CDN
│ └── serve.mjs # 200 多行的本地静态服务器(兼 LLM 代理)
└── web/tools/ # 题库生成 / 校验脚本
核心思路:代码只负责渲染,所有"知识"都在 JSON 里。
加一个皇帝、补一道题、改一处史料出处,都不用碰 JS,改数据文件即可;同一份数据还能被 校验脚本和 smoke 测试直接读。视图和知识彻底分开之后,内容的迭代速度比我预想的快得多。
三、设计思路
数据规模:
| 模块 | 内容 |
|---|---|
| 帝王谱系 | 7 朝 77 帝 · 381 道辩证题 · 545 条时间线 |
| 思想源流 | 6 大流派 · 27 部经典 |
| 诗词鉴赏 | 22 位文人 · 13 个诗词公案 · 行迹地图 |
381 道题是七个朝代题库加总的实数(隋 18 / 唐 71 / 五代 30 / 宋 91 / 元 33 / 明 78 / 清 60)。
选择题不是是非题,而是分两种认知动作。 一种 arg(论证判断:你如何评价这项政策), 一种 chain(因果链:此事因何发生、直接原因是什么);约四分之一标了 open,是没有唯一答案的 开放题。每条都带 why 解析,正确项位置打散,避免靠位置猜:
json
{
"mode": "arg",
"open": true,
"q": "有人说胡惟庸该死,也有人说朱元璋兔死狗烹,你怎么看?",
"options": [
{ "t": "完全同意第一种,功臣就该死" },
{ "t": "完全同意第二种,他忘恩负义" },
{ "t": "需辩证看:胡确有专横,且相权威胁皇权;但株连数万、手段极端", "ok": true },
{ "t": "两种说法都对" }
],
"why": "蓝玉等确有骄横,但朱元璋以严峻刑法借机大杀功臣,株连甚广,手段极端......"
}
演义和正史分开。 时间线和侦探线索都标《旧唐书》《宋史》《明史》这类出处; 凡是《三国演义》这类小说里的说法,单独标"小说演绎,正史不载",不让人把演义当正史读。 争议人物不替读者下结论,而是把多方观点和史料摆出来------比如隋末那段,杨广被洛阳小朝廷谥为 "世祖明皇帝",唐朝却给了一个恶谥"炀";当时长安、江都、洛阳还并立着杨侑、杨浩、杨侗三个 傀儡皇帝。这些都进了争议话题和题库,因为"谁赢了谁写历史"本身就是要学的东西。
地图是真的能查,不是贴图。 Leaflet 底图 + 手绘简化疆域 GeoJSON,古地名点带经纬度和今址对照 (点"睦州"会告诉你约等于今天浙江建德一带);路线按时间分段动画播放,而不是一张静态示意图。
AI 是可选的私教,且数据不出本机。 只有开放题可以接 AI 点评,接的是你自己填的 OpenAI 兼容接口(DeepSeek / OpenAI 都行)。配置存在本机 llm-config.json(已 gitignore), 问答经过本地小服务器转发,不上传任何第三方。 后面核心方向之一就是优化和扩展AI的交互和学习场景,大家有什么好的想法也能相互交流。
四、技术架构
技术栈:
- 原生 HTML / CSS / JavaScript(ES Module),无框架、无打包、无
node_modules - 地图:Leaflet 1.9.4,css/js 全部下载到
web/vendor/本地引用,不依赖任何 CDN,断网能开 - 数据:纯 JSON,前端
fetch读取 - 本地服务:一个 200 多行的
serve.mjs,只用 Node 内置模块(node:http/node:fs/node:zlib/node:crypto),顺带做 gzip - 校验:
smoke.mjs/smoke-dynasties.mjs/smoke-geo.mjs等脚本,每次改完数据跑一遍, 查缺字段、查地理坐标越界、查题库结构
这个项目的交互虽然多,但本质是"选一个对象 → 把对应 JSON 渲染成卡片/地图图层", 没有复杂的跨组件状态要管理,浏览器原生 DOM + 少量事件委托完全够用。去掉框架和构建链之后, 调试就是直接看源码、改完刷新,十年后翻出来也不会因为依赖装不上而跑不起来------对一个想长期维护的 知识型项目,这点比什么都重要。
唯一需要一个"后端"的地方是 AI:浏览器直连 LLM 会有 CORS 和 Key 暴露问题。所以 serve.mjs 顺手挂了三个接口,把 Key 留在本机、由服务端代理转发,并注入历史学习专用的系统提示词:
js
// 仅用 Node 内置模块,没有任何第三方依赖
// GET /api/llm-config 读取本机配置(不存在返回空对象)
// POST /api/llm-config 保存配置到 web/llm-config.json
// POST /api/llm/chat 代理调用 OpenAI 兼容接口,附带历史学习系统提示词
import { createServer } from 'node:http';
import { gzip } from 'node:zlib';
注意这个代理只在本地开发/自部署时用;部署到 GitHub Pages 时 AI 功能自动降级为不可用, 其余所有功能(卡片、地图、题库、疑案)照常------静态部分和可选服务是解耦的。
题库也不是手写 JSON 硬怼,而是 web/tools/ 下一批 Node 脚本生成 + 审计:quiz-lib.mjs 定义 题目结构和校验规则,_gen-tang.mjs / _gen-song.mjs / _gen-ming.mjs 等按朝代产出, 再用 audit 脚本查重、查正确项、查解析是否齐全。381 道题靠人工逐题维护迟早会烂,脚本化是必须的。
五、为什么要学历史
做这个项目的过程里,我越来越觉得历史不是一门"背过去"的学科。
你看朱元璋废丞相,不是为了记 1380 这个年份,而是能看到一个制度选择的代价:皇权空前集中, 皇帝直接统领六部,但也让后来的内阁和司礼监一步步长成新的权力中心。你读苏轼在黄州写的东西, 看到的不是一个被贬的官员在发牢骚,而是一个人被命运按到谷底之后,怎么重新把日子过宽。 权力怎么运转、制度怎么积弊、人在绝境里怎么自处------这些事过去发生过,现在也没什么不同。
思想那条线给人的东西更安静一点。儒讲人和人怎么相处,道讲人和自己、和天地怎么相处, 佛讲怎么面对无常,理学心学讲怎么在日常里"知行合一"。它们不是博物馆里的标本, 而是中国人遇到事的时候,脑子里会自动冒出来的那些反应。把这些源流理顺,某种程度上是在弄明白: 我今天看世界的方式,是怎么一步步被塑造出来的。
所以这个站不想替谁下结论。开放题没有标准答案,争议人物只把多方观点和史料摆出来, 最后那一下判断留给你自己。工具能做的,是把散点连成线、把演义和正史分开、把原文放回处境里------ 剩下的思考,得是你自己的。
如果它对你有用,欢迎点个 Star,也欢迎一起补内容。