智能知识图谱
AI Reader 的知识图谱将小说中错综复杂的人物关系以力导向图(Force-directed Graph)的形式直观呈现。系统从每章提取的 ChapterFact 中自动聚合关系数据,支持从几十人到数百人的大规模网络可视化。
关系类型自动识别
系统内置 _RELATION_TYPE_NORM 规范化映射表,覆盖 70+ 种关系类型变体。LLM 提取的原始关系描述(如"师父"、"师傅"、"授业恩师")会被自动归一化为标准类型,确保同一关系不会因措辞差异而重复出现。
归一化采用两级匹配策略:先精确匹配,再子串匹配,最大程度兼容 LLM 的多样化输出。
六大关系分类
每条归一化后的关系会被进一步分入 6 个语义分类,用于图谱着色和筛选:
| 分类 | 英文标识 | 典型关系 | 边颜色 |
|---|---|---|---|
| 血亲 | family | 父子、母女、兄弟、姐妹 | 暖色 |
| 亲密 | intimate | 夫妻、恋人、知己 | 粉色 |
| 师承 | hierarchical | 师徒、主仆、上下级 | 蓝色 |
| 社交 | social | 朋友、同门、邻居 | 绿色 |
| 敌对 | hostile | 仇敌、对手、宿敌 | 红色 |
| 其他 | other | 未归类关系 | 灰色 |
图谱上方提供 分类筛选芯片(Category Filter Chips),点击可快速显示/隐藏特定分类的关系边。
边(Edge)特性
- 权重过滤:后端自动计算建议的最小权重阈值,滑动调节可隐藏低频关系,聚焦核心人物网络
- 频次聚合:边的关系类型基于 Counter 统计最高频类型,而非"最后一章覆盖",结果更稳定
- 虚线弱边:权重 <= 1 的关系以虚线绘制,视觉上区分一次性提及和持续关系
- 悬浮详情:每条边显示
relation_type(最高频类型)、all_types(按频次排序的全部类型)和category分类
节点(Node)特性
- 大节点:标签绘制在圆内部,适合主要角色
- 小节点:标签显示在节点下方,避免遮挡
- 尺寸映射:节点大小反映角色出场章节数或关系连接数
- 颜色编码:人物蓝色、地点绿色、物品橙色、组织紫色,全局一致
密集网络优化
针对大部头小说(如《红楼梦》400+ 角色)的专项优化:
- minChapters 智能默认值:根据节点总数自动设定最小出场章节数,仅保留重要角色
- 力间距自适应:力导向排斥力随图密度动态调整,防止节点重叠
- 标签碰撞检测:每帧追踪标签矩形区域,重叠时自动隐藏低优先级标签
- 交互式图例:图例条目可点击,等同分类筛选
别名自动合并
基于 AliasResolver 的 Union-Find 算法,自动合并同一角色的多个称呼。例如"林黛玉"、"黛玉"、"林妹妹"会被识别为同一人物节点,关系和出场次数自动汇总。
别名来源包括:
- 实体预扫描阶段的字典别名(
entity_dictionary.aliases) - 逐章提取时 LLM 识别的新别名(
characters[].new_aliases)
安全过滤机制防止通用称谓(如"妖精"、"那怪"、"师父")成为 Union-Find 节点,避免不相关角色被错误合并。
暗色模式
图谱通过 MutationObserver 监听系统/应用主题切换,自动适配暗色模式下的背景、节点和标签颜色。
章节范围筛选
支持指定章节区间(chapter_start ~ chapter_end),仅展示特定章节范围内的关系数据,便于追踪人物关系的阶段性变化。