Skip to content

我用AI把《枪炮、病菌与钢铁》做成了“活地图”,让你俯瞰几万年人类文明!

你有没有过这样的经历?捧着一本超棒的历史书,比如贾雷德·戴蒙德的《枪炮、病菌与钢铁》,脑子里塞满了各种地名、人名、时间点,感觉就像在一张巨大的、模糊的地图上来回跳跃,晕头转向?

image.png
Details

《枪炮、病菌与钢铁》是美国学者贾雷德·戴蒙德(Jared Diamond)于1997年出版的一部经典社会科学研究著作,探讨了人类历史发展的不平衡性及其背后的原因。这本书通过分析地理环境、技术发展、疾病传播等多方面因素,揭示了为什么某些文明能够崛起并主导世界,而其他文明则逐渐衰落。

戴蒙德认为,地理环境是决定文明发展的重要因素,粮食生产的出现是人类历史上的一个关键转折点,病菌在人类历史中扮演了双重角色,钢铁的发明和应用标志着技术发展的新阶段。同时戴蒙德否定了种族决定论,认为文明发展的不平衡性主要由地理环境和技术传播的差异导致。

在阅读这本书的时候,我就遇到了来自人名、地名、时间点、事件的“轰炸”和挑战。一会儿是非洲的远古迁徙,一会儿是新月沃地的农业起源,一会儿又是太平洋岛屿的文明碰撞... 我得不停地暂停,去搜地名,查年代,试图在脑海里拼凑出一幅连贯的画卷。书里的插图虽然有帮助,但大多时候,历史还是淹没在文字的海洋里。

“要是这些历史能在地图上‘动’起来就好了!” 这个念头一直在我脑子里盘旋。这样我就可以对着直观的地图,轻松理解历史的发展脉络。

最近,AI 的能力不是越来越强了嘛?能写代码、能画画,甚至能做动画。我突然灵光一闪:能不能让 AI 帮我,把《枪炮、病菌与钢铁》里的世界,真的搬到一张交互式地图上?

说干就干!经过一番折腾(和 AI 的疯狂“对话”),结果…… 相当酷!

想象一下:

  • 你打开一个网页,眼前是一张世界地图。
  • 屏幕下方有个时间轴,从公元前一万年一直延伸到现代。
  • 当你拖动时间轴,地图上的国家边界、文明区域就跟着实时变化! 就像在看一部快进的世界历史纪录片!
  • 地图上还会跳出各种标记:
    • 某个地点发生了重大历史事件(比如农业的发明、帝国的兴亡)。
    • 清晰的箭头展示着我们祖先迁徙的路线,看他们如何一步步走向全球。
    • 甚至还能看到某些关键物种(比如马、小麦)是在哪里被驯化的。

image.png

体验地址:https://worldhistorymap.hapaiqi.top/

这背后是怎么实现的呢?

首先,我得找到靠谱的“历史地图底稿”。这就像寻宝一样,需要各个时期的世界版图数据。幸运的是,我在网上发现了一个超赞的开源宝藏:historical-basemaps 项目。它提供了从古至今大量的历史疆界数据,简直是为我量身定做的!

TIP

Historical-basemaps 是一个开源项目,提供了世界各国和文化区域的历史地理边界数据,主要用于在全球或大陆尺度上绘制历史数据地图。

image.png

有了地图底稿,下一步就是把《枪炮、病菌与钢铁》里的信息“灌”进去。这可是个大工程!书里散落着无数的事件、地点、时间、人物、物种信息。

这时候,我的 AI 小助手(主要是 Claude 3.7)就派上大用场了。我像个产品经理一样,不断给它提需求:“帮我把书里的关键事件按时间和地点整理出来”、“把人类迁徙路线找出来,标好起点终点”、“哪些地方最早种出了什么粮食?”。当然,太口语化的描述不利于后期数据的处理,我让 AI 按照以下格式输出:

json
{
  "id": "类别缩写+序号",
  "title": "事件标题",
  "category": "事件类别",
  "startYear": 开始年份,
  "endYear": 结束年份,
  "location": {
    "lat": 纬度,
    "lng": 经度
  },
  "region": "地理区域",
  "description": "事件简短描述",
  "importance": 重要性评分(1-5),
  "impact": "事件影响描述"
}

Claude按照响应的规则生成了项目包含多种历史数据,并存储在 data/ 目录下:

  • all_events.json: 主要历史事件
  • migrations.json: 人口迁徙路线
  • technologies.json: 技术发展事件
  • species.json: 物种驯化历史
  • civilizations.json: 文明演变数据
  • wars.json: 主要战争数据
  • diseases.json: 疾病传播历史
  • agriculture.json: 农业发展历史

image.png

其中某些类别可能有额外的特殊字段:

  • migrations.json:可能包含 from、to 和 path 字段,描述迁徙路线
  • wars.json:可能包含战争参与方和战斗地点等信息
  • civilizations.json:可能有文明特征、主要成就等 这种统一的数据结构便于在地图可视化系统中一致地展示和过滤不同类型的历史事件,同时通过时间轴可以按照时间顺序展示所有事件。

AI 负责梳理信息、生成结构化的数据,我则负责整合、调试,并基于开源的地图库 Leaflet.js,把这一切呈现在网页上。过程嘛,有抓耳挠腮,也有“哇塞”的惊喜时刻。比如,看着 AI 自动匹配地图颜色,或者成功绘制出第一条迁徙路线时,那种感觉真的很奇妙!

比如要考虑让它考虑不同平面尺寸的自适应,考虑不同类型事件的图标、筛选、详情等。随着项目文件的增多,代码的复杂度也在增加,需要引入一些rules规范Cursor的代码生成。不然因为AI大模型上下文Token的限制,它经常会忘记之前写过的代码,命名的方式,导致功能的冲突。这时候只能人工接入,耐着性子,一点点引导。

image.png

经历了N次Cursor的免费Agent额度用尽,终于迎来了第一版地图。

现在,这个“历史地图”都能看些什么?

  1. 重大历史事件的发生地和时间点。
  2. 跨越千年的人类迁徙大冒险。
  3. 改变世界的技术**(比如冶铁)如何传播。**
  4. 关键动植物被驯化的地理位置。
  5. 不同文明板块的兴衰轮廓。
  6. 甚至还有历史上主要的战争疾病影响范围。

你可以按事件类型(比如只看迁徙,或者只看技术)进行筛选,让信息更聚焦。

当然,它还不完美。

这只是一个开始,一个基于《枪炮、病菌与钢铁》视角的小尝试。目前,它就像一个 MVP(最小可行产品),但已经能让你直观地从全球视角看到历史科技文化的变迁。未来,我希望能让它更加的智能、美观、丰富:

  • 加入更多元的历史数据,不只局限于一本书。或者通过AI的辅助,让用户可以自己上传数据,生成自己的地图。
  • 让地图信息更丰富,比如展示人口密度、经济指标等。
  • 增加更多互动,比如点击国家能弹出维基百科信息,或者是播放一段相关历史的视频。
  • 把地图做得更漂亮!(设计师朋友们看过来!)

但现在,我更希望你能亲自体验一下!

去拖动时间轴,感受一下几万年的风云变幻。看看那些我们熟悉或陌生的名字,在地图的哪个角落留下了印记。也许你会对历史,对我们人类自己,有那么一点点新的感悟。

再次奉上体验地址:https://worldhistorymap.hapaiqi.top/

欢迎把这个“时空穿梭机”分享给你同样热爱历史和地理的朋友! 如果你有任何想法、建议,或者发现了 Bug,也请一定告诉我!让我们一起把这个“活地图”变得更好玩、更有用!

项目Github地址: https://github.com/SeanFeng91/worldhistoryviz