AI Reader V2

多层级世界地图

AI Reader 的世界地图从小说文本中自动提取地点层级关系,以可视化地图的形式呈现小说世界的地理全貌。无论是玄幻仙侠的架空世界,还是现实题材的真实地理,都能生成直观的空间布局。

地点层级自动解析

父级投票系统

WorldStructureAgent 从每章提取的 ChapterFact 中收集地点父级关系投票。投票来源包括:

  • 地点事实中的 parent 字段
  • 空间关系中的"包含"关系(按置信度加权)
  • 章节主场景推断

系统对所有投票进行汇总,得票最高者成为最终父级。遇到循环引用时,DFS 检测会切断最弱链接。用户手动设定的层级关系优先级最高。

后缀等级系统

中文地名后缀天然编码了地理尺度信息。系统内置后缀等级表(界 > 国 > 城 > 谷 > 洞 > 殿),以后缀等级作为父子方向判定的首要信号,仅在双方名称均无可识别后缀时回退到 LLM 分类的层级。

兄弟聚类

双向冲突检测识别同级地点对(相同后缀等级、投票比例接近),自动将两者重新分配到共同父级。还支持基于 LocationFact.peers 的显式同级证据检测。

层级整合

consolidate_hierarchy() 处理层级反转修复、噪声根节点救援、振荡抑制,以及分层的孤儿收养策略(前缀匹配 -> 主导中间节点 -> 层级门控的超级根节点回退)。

布局模式

葵花籽分布(默认)

使用黄金角分布算法实现有机的地点摆放,自适应扩散半径随子节点数量缩放,防止聚簇。

约束求解器

ConstraintSolver 采用差分进化算法,配合力导向预布局作为初始种子,计算最终布局位置。

真实地理模式(GeoMap)

对于现实题材小说,GeoResolver 将小说地名匹配到真实世界坐标:

  • 自动检测:根据小说类型和 CJK 字符比例判断是否为现实地理
  • 四级匹配:人工补充表 -> 中文别名索引 -> GeoNames 精确匹配 -> 后缀剥离 + 人口消歧
  • 数据集:中国地点(14 万条)和全球城市(人口 > 5000,5 万条)
  • 玄幻/仙侠类型自动跳过地理匹配

真实地理模式下使用 React-Leaflet 渲染,CircleMarker 大小反映提及次数,颜色区分地点类型。

地形与风格

Whittaker 生物群系矩阵

5x5 海拔 x 湿度网格,双线性插值实现平滑地形着色。Lloyd 松弛算法生成均匀 Voronoi 细胞,呈现自然的地形区域划分。

程序化河流生成

后端基于 OpenSimplex 高程场的梯度下降算法,从水系类型地点出发生成河流路径。前端使用 d3 curveBasis 渲染平滑河道。

地形纹理符号

terrainHints.ts 在地形类型地点周围生成装饰性 SVG 符号(山脉、水系、森林、沙漠、洞穴),符号大小随层级变化,位置确定性摆放且有碰撞检测。

手绘风格

使用 roughjs 渲染领地边界、河流和海岸线,呈现素描美学:

  • 海岸线:凸包 + 径向扩展 + 多倍频噪声生成自然轮廓
  • 领地填充:面积门控,仅对大面积领地进行填充渲染
  • 区域标签:SVG textPath 沿曲线排布,晕影和位移滤镜增强手绘质感

轨迹动画

追踪角色在小说中的移动路径:

  • 双路径渐进绘制:逐步展开移动轨迹
  • 驿站停留时长缩放:在重要地点停留更久
  • 脉冲标记:当前位置以脉冲动画标识
  • 章节标签:标注每段移动对应的章节
  • 自动跟随平移:镜头随角色移动自动调整
  • 可调速度:支持播放速度调节

冲突标记

conflict_detector.py 检测不同章节间的父级关系分歧。地图上以红色脉冲动画圆环标识存在冲突的地点,帮助用户发现需要人工介入的层级问题。系统过滤同名异地的高频词,并要求多章节少数派证据以减少误报。

密集地点优化

两阶段筛选管线应对大量地点:

  • 提及次数滑块:过滤低频地点
  • 层级折叠/展开:默认隐藏场所/建筑层级,父节点上显示"+N"展开徽章,点击可展开查看子地点

交互功能

  • 拖拽重定位:编辑模式下可拖动地点调整位置,修改结果持久保存
  • 点击打开卡片:点击地点直接打开实体卡片抽屉,查看详细信息
  • 8 锚点标签布局computeLabelLayout() 为每个标签尝试 8 个候选锚点位置,多锚点碰撞检测确保标签不重叠
  • 模拟退火优化labelAnnealing.ts 在高清地图导出时使用模拟退火算法优化标签布局

层级重建

支持两步式层级重建流程:

  1. POST /rebuild-hierarchy:流式返回 SSE 进度事件,输出层级变更差异(不直接保存)
  2. POST /apply-hierarchy-changes:应用用户选择的变更,自动清除地图覆盖以重新定位

三层循环检测防御贯穿解析、整合和保存全流程。