Files
llm-wiki/docs/spark/2026-06-18-large-graph-global-community-design.md
T
2026-07-12 21:26:08 +08:00

45 KiB

Large Graph Global/Community Interaction Design

日期:2026-06-18 状态:待用户复核 当前分支:codex/graph-performance-optimization 视觉稿:docs/spark/mockups/2026-06-18-large-graph-global-community-flow.html

目的

这份设计确定 llm-wiki 图谱在 5000+ / 10000+ 节点规模下的产品交互方向。

目标不是把当前图谱做成一个更复杂的自动模式系统,也不是照搬 graphifynashsu/llm_wiki。目标是明确一条长期路线:

全局图谱负责看结构,社区聚焦负责读内容。

当前图谱已经有社区色块、社区图例、筛选、搜索、右侧抽屉、Pin、社区聚焦和密度模式。后续性能优化应围绕这些既有用户动作收敛,而不是增加一套让用户难以理解的自动模式切换。

设计结论

采用“全局降级,社区聚焦升级”的双层体验。

  1. 全局视角的正式目标是支持 5000+ / 10000+ 节点,但只显示地图级信息;当前 DOM/SVG 全局图不再被要求硬撑万级。
  2. 普通节点点击只触发轻量查看,不改变全局视角。
  3. 社区色块或社区图例点击先选中社区并显示社区摘要,用户再通过按钮进入社区聚焦。
  4. 全局节点的“打开详情 / 阅读”进入所属社区,并自动选中该节点。
  5. 社区聚焦后完整社区必须在场:全部节点轻量可见,核心/选中/搜索命中/Pin 节点升级为卡片。
  6. 搜索和筛选不创建新模式,只改变当前全局或社区视角里的可见范围。
  7. 缩放只调整细节密度,不自动切换全局/社区主模式。
  8. 返回全图以可见按钮为主,双击空白只作为辅助快捷方式。
  9. 社区质量不好时不打断用户,但要降低社区边界的视觉确定感,并提供轻量的核心结构辅助查看。

一句话规则:

单击决定当前检查什么;按钮决定是否深入;缩放只决定当前画多少细节。

审查后修订决定

文档审查后,本设计补充以下硬规则。它们优先于早期草案里的含糊表述。

  1. 全局不承担完整阅读。用户在全局节点摘要里点“打开详情 / 阅读”后,进入所属社区,并自动选中该节点。
  2. 社区摘要保留“查看核心节点列表”,它是进入社区前的预览:在抽屉内展开列表,悬停列表项时图上轻微高亮,点击列表项切到节点轻量摘要,但不自动进入社区。
  3. 搜索或筛选把当前选中对象排除时,不自动清空选择;抽屉保留对象并提示它不在当前结果中,同时提供“清除选择”和“显示该对象”。
  4. 核心节点、重要边和强关系由系统自动排序,规则必须可解释;Pin 是强信号,但不是唯一标准。
  5. 社区聚焦不是截断社区。完整社区都在场,表达层按点、标签、卡片和子主题逐级增强。
  6. 超大社区才启用子主题 / 子社区;普通社区不额外增加层级。
  7. 社区质量不好时,保留社区主视图和轻提示;第一阶段只提供“核心结构 / 连接度”这一个轻量辅助查看,不把类型、来源、时间做成完整备用模式。
  8. 大图交互降级必须保持视觉连续性:弱信息淡出淡入,核心锚点、选中对象、搜索命中和 Pin 不消失。
  9. 设计验收使用产品可感知标准:拖动不跟手、缩放卡住、抽屉慢开、搜索高亮迟迟不出现、画面大跳变,都算失败。
  10. 性能测试分三档:真实图谱、压力图谱、极限图谱;每档必须记录节点数、边数、社区数、最大社区规模、搜索命中数和 Pin 数。
  11. 社区聚合节点必须强区分,要看起来像“装着很多节点的容器”,不能像普通内容节点;聚合后也必须提示内部的选中、搜索命中和 Pin。
  12. 第一阶段只保证核心键盘路径可用,不做完整键盘漫游。
  13. 本次主打图谱体验。Agent 提问、边单击关系检查、移动端专项、完整键盘漫游和桌面版专项方案记录为后续探索,不进入第一阶段。
  14. 旧交互直接切到新规则,不做旧主路径兼容。
  15. 抽屉缺少信息时直接显示空状态和下一步动作,不隐藏,也不用推荐内容伪装成真实关系。
  16. 搜索、筛选、抽屉变化默认只更新高亮、淡化、列表和摘要,不重排整张图;重新组织布局必须来自用户明确动作。
  17. 重要性排序拆成稳定结构评分和临时上下文加权,避免核心节点和关键标签频繁跳变。
  18. 第一阶段按桌面宽屏体验设计,移动端和窄屏只保证基础查看,不作为大图主验收目标。

第一阶段范围

第一阶段的目标是把图谱体验和性能规则定硬,并完成可测量的优化路径,不是一次性完成所有未来能力。

第一阶段包含:

  • 固定全局地图和社区阅读的分层规则。
  • 把全局节点、社区、搜索、筛选、Pin、右侧抽屉和返回全图的交互规则写清楚。
  • 补齐大图降级规则:节点、边、标签、卡片、社区聚合、搜索命中和 Pin 的显示预算。
  • 补齐社区聚焦的规模规则:完整社区在场,但点、标签、卡片和子主题按规模分层。
  • 补齐性能测量项和测试图谱数据要求。
  • 明确当前 DOM/SVG 继续服务小图、社区阅读和离线细节;全局万级体验必须经过新的大图渲染或聚合方案验证。

第一阶段不包含:

  • Agent 提问入口。
  • 边单击关系检查。
  • 类型、来源、时间等多套备用组织方式。
  • 移动端或窄屏专项体验。
  • 桌面版专项技术方案。
  • 完整键盘漫游整张图谱。
  • 基于长期阅读历史的智能排序系统。

为什么不做自动切换

不建议根据缩放自动在“全局大图”和“局部阅读”之间切换。

原因:

  • 当前已有社区入口和筛选入口,用户意图已经足够明确。
  • 自动切换容易让用户迷失:只是缩放一下,界面突然换成另一套阅读状态。
  • 大图性能优化需要稳定的规则,不能让细节组件在缩放边界反复出现和消失。
  • 现有社区色块点击已经是自然的社区检查入口,应继续强化它;真正深入社区由明确按钮承接。

允许的自动行为只有信息密度变化:

  • 缩远时隐藏普通标签、弱边和复杂效果。
  • 放近时显示更多关键标签。
  • 手势进行中进一步降级,手势停止后补回允许显示的细节。
  • 降级必须渐进,弱信息淡出淡入,不能突然切成另一张图。
  • 核心锚点、选中对象、搜索命中和 Pin 节点在交互中不能消失。

交互规则

1. 全局视角

全局视角是地图,不是阅读界面。

显示:

  • 节点点位。
  • 社区颜色。
  • 少量关键节点标签,不显示普通节点文字。
  • 重要边或社区间骨架关系。
  • 搜索命中和选中节点高亮。
  • 社区图例和筛选入口。

隐藏或降级:

  • 普通节点卡片。
  • 大段文本摘要。
  • 全量节点标签。
  • 全量边。
  • 复杂阴影、动画和长时间运行的动态布局。

全局视角点击普通节点:

  • 保持图谱视角不变。
  • 高亮该节点和少量直接邻居。
  • 右侧打开轻量查看抽屉。
  • 不自动进入社区聚焦。
  • 不自动打开完整阅读内容。
  • 用户在轻量抽屉里点“打开详情 / 阅读”后,进入所属社区,并自动选中该节点。

全局选中和抽屉优先级:

  • 节点命中优先于社区色块。用户点到具体节点时,抽屉显示节点摘要。
  • 点社区色块、社区图例或社区背景,但没有点中具体节点时,抽屉显示社区摘要。
  • 悬停只做临时提示,不接管右侧抽屉。
  • 搜索和筛选可以改变高亮范围,但不抢占已选中的节点或社区。
  • Pin 是持久标记,不等于当前选中对象,也不自动切换抽屉。
  • 单击全局空白处只清空当前选中对象,抽屉回到全局概览或搜索结果列表;不改变缩放,也不返回全图。

2. 全局轻量查看抽屉

当前代码里点击节点会打开右侧抽屉。这个方向保留,但抽屉需要重新定义为“轻量查看”,不要变成图上大卡片的替代品。

这里不是两个抽屉,而是一个抽屉、两种内容层级:

  • 点社区色块或社区图例时,抽屉显示社区摘要。
  • 点社区里的具体节点时,抽屉切到节点摘要。
  • 如果社区和节点同时存在,节点是主对象,社区只做上下文。

轻量抽屉显示:

  • 节点名称。
  • 类型。
  • 所属社区。
  • 连接数。
  • 3-5 个最重要相邻节点。
  • 1-2 条最强关系。
  • “进入所属社区”动作。
  • “打开详情 / 阅读”动作,进入所属社区并选中该节点;全局图谱不承载完整阅读。

节点动作落点:

  • “打开详情 / 阅读”是主动作:进入所属社区,自动选中该节点,并打开社区阅读抽屉里的节点内容。
  • “进入所属社区”是次动作:进入所属社区的概览状态,不自动打开节点阅读;该节点可作为上下文轻高亮。
  • 如果节点没有可读详情,只显示“进入所属社区”。

社区摘要时,这些字段会换成:

  • 社区名称。
  • 节点总量。
  • 核心节点概览。
  • 关键桥接关系。
  • “进入社区”动作。
  • “查看核心节点列表”动作。

“查看核心节点列表”的行为:

  • 在抽屉内展开核心节点列表。
  • 悬停列表项时,图上对应节点轻微高亮。
  • 点击列表项时,抽屉切到该节点轻量摘要。
  • 点击列表项不自动进入社区。

轻量抽屉不显示:

  • 长正文。
  • 大量相邻节点列表。
  • 复杂 Markdown 阅读内容。
  • 会迫使全局图谱重排的大组件。

轻量抽屉的定位:

  • 它是全局地图的检查面板。
  • 它帮助用户决定是否深入。
  • 它不承担完整阅读。
  • 它的文案和按钮要随“社区”或“节点”这两个对象切换,而不是固定不变。
  • 没有选中对象时,它可以显示全局概览、搜索结果或空状态,但不混进节点/社区摘要。

3. 社区入口

社区色块和社区图例点击继续作为“选择社区”的主入口。

这个设计是合理的,因为用户点击社区本身就是明确动作:我要先看这个社区是什么,再决定是否深入。

点击社区色块或社区图例后:

  • 全局视角保持不变。
  • 高亮该社区和它的少量跨社区关系。
  • 右侧轻量抽屉显示社区摘要。
  • 不立刻进入社区聚焦。
  • 抽屉里的“进入社区”按钮才触发社区聚焦。
  • “查看核心节点列表”只在抽屉内展开列表;列表悬停可以轻微高亮图上节点,但不改变主图视角。

进入社区聚焦后:

  • 图谱视角 fit 到该社区。
  • 该社区内全部节点都在场,默认以点显示。
  • 核心、选中、搜索命中、Pin 节点升级为卡片。
  • 其他社区退出主要视野或降为背景。
  • 显示卡片、更多标签、阅读抽屉和社区摘要。

普通节点也可以进入社区,但必须通过明确动作:

  • 在轻量抽屉里点“进入所属社区”。
  • 不建议单击节点直接进入社区。
  • 不把双击作为社区入口。

4. 社区聚焦视角

社区聚焦是阅读和理解模式。

显示:

  • 社区标题和返回全局入口。
  • 社区完整节点分布。
  • 核心节点卡片。
  • 核心关系。
  • 社区摘要。
  • 关键节点列表。
  • 与其他社区的桥接关系。
  • 阅读抽屉或详情抽屉。

规模控制:

  • 小社区可以全部卡片化。
  • 中大型社区全部节点以点显示,核心、选中、搜索命中、Pin 节点卡片化。
  • 超大社区才启用子主题 / 子社区;普通社区不额外加层级。
  • 其余节点通过缩放、筛选、搜索、一跳邻居或“展开更多”逐步升级显示。
  • 不在社区聚焦里一次性把所有节点恢复成卡片。

5. 搜索和筛选

搜索和筛选是对当前视角的收窄,不是模式切换。

全局视角中:

  • 搜索命中节点强高亮。
  • 命中节点的少量相邻节点轻高亮。
  • 非命中节点降淡。
  • 如果没有选中节点或社区,右侧轻量抽屉可以显示搜索命中列表。
  • 如果用户点中某个搜索结果,抽屉切到该节点摘要。
  • 清空搜索后,保留当前选中对象;如果没有选中对象,则回到全局概览。
  • 如果当前选中对象被搜索或筛选排除,不自动清空选择。
  • 抽屉继续显示该对象,并提示“当前对象不在筛选结果中”。
  • 抽屉提供“清除选择”和“显示该对象”动作。
  • 图上可以用很淡的位置提示保留该对象的上下文。
  • “显示该对象”不清空搜索或筛选,而是临时把该对象和必要的一跳上下文作为例外显示出来。
  • 临时显示时,搜索和筛选条件仍保留,并提示“正在临时显示筛选外对象”。
  • 用户可以清除临时显示,回到纯搜索或筛选结果。
  • 如果对象已被数据刷新移除,只显示“当前对象已不可用”,不再提供临时显示。

社区视角中:

  • 搜索只在当前社区内优先匹配。
  • 可提供“扩展到全局搜索”的动作。

筛选规则:

  • 第一阶段筛选保持轻量,只使用已有且稳定的字段,例如社区、节点类型、Pin 状态、是否有连接。
  • 多个筛选条件默认同时满足。
  • 搜索和筛选都显示结果数量。
  • 用户可以清除单个条件,也可以一键清空。
  • 社区聚焦中的筛选默认只作用于当前社区;扩展到全局必须是明确动作。

筛选后如果剩余节点少,系统可以逐步恢复更多标签和边,但仍遵守当前视角的主规则。

搜索、筛选和抽屉变化不得重排整张图:

  • 搜索默认只改变高亮、淡化和结果列表,不重新计算全局布局。
  • 筛选默认隐藏或淡化不符合条件的内容,不自动重新组织全图。
  • 抽屉打开、关闭或切换内容,不得触发图谱重排。
  • 只有用户明确点击“重置布局”或“核心结构辅助查看”这类动作时,才允许重新组织图。
  • 搜索索引、社区摘要和核心节点列表应预先准备或缓存,避免每次交互从头计算。

6. 返回全图与双击

返回全图是导航动作,必须有可见入口,不依赖用户记住手势。

主规则:

  • “回全图”按钮是主入口。
  • 双击真正的图谱空白背景可以作为快捷回全图。
  • 单击空白只取消当前选中,不改变当前视角。
  • 在社区聚焦里,单击空白只清空当前节点或社区选择,仍留在当前社区;关系选择留到边单击关系检查阶段再定义。
  • 从社区聚焦回全局,需要点“回全图”按钮,或双击真正的空白背景。

回全图后的状态:

  • 视角回到全局并 fit 全图。
  • 搜索、筛选和 Pin 保留。
  • 如果当前选中节点仍存在,回全图后继续选中该节点,右侧抽屉显示全局轻量节点摘要。
  • 如果当前只选中社区,回全图后继续选中该社区,右侧抽屉显示社区摘要。
  • 如果选中对象已不存在,抽屉显示对象不可用状态,并提供清除选择。

双击限制:

  • 双击节点不返回全图,不进入社区。
  • 双击社区色块不返回全图,不进入社区。
  • 双击社区图例、搜索框、工具栏、右侧抽屉不触发图谱导航。
  • 双击边不应作为回全图入口。
  • 现有“节点双击取消固定位置”的旧能力不作为新规则保留。固定/取消固定应改为节点轻量抽屉或节点工具里的明确动作。

关系边第一阶段规则:

  • 第一阶段图上的边不作为可点击对象。
  • 边只承担视觉结构:连接、强弱、跨社区关系。
  • 节点和社区抽屉中保留强关系、桥接关系等摘要,因为这是对象摘要的一部分。
  • 边单击后的关系详情和证据检查进入后续探索。

键盘规则:

  • Escape 先关闭搜索、工具栏或临时提示。
  • 如果当前有选中节点/社区,Escape 清空选中对象。
  • 如果已经在社区聚焦且没有选中对象,Escape 可以返回全图。
  • Escape 不清除 Pin,不重置布局。

第一阶段不做完整键盘漫游,但核心路径必须可用:

  • 搜索结果可以用上下键选择。
  • Enter 打开当前结果的轻量摘要。
  • Tab 可以进入抽屉按钮、搜索结果、“核心结构辅助查看”和“回全图”按钮。
  • 抽屉里的“进入社区”“打开详情 / 阅读”“清除选择”“显示该对象”都可以聚焦和触发。
  • 选中对象、进入社区、返回全图等状态变化应有可感知反馈。
  • 第一阶段不要求用户用键盘逐个遍历几千个图谱节点。

大规模降级规则

全局图谱的目标规模按 5000+ / 10000+ 设计。

这不意味着万级图谱要完整显示全部细节。参考 graphify 的实际策略,大规模流畅来自降级和聚合,而不是硬画所有内容。

第一阶段已经补入预算口径:任何视角都有标签预算、边预算和卡片预算。当前 DOM/SVG 路线用于小图、社区阅读和离线细节;万级全局图的正式流畅目标进入后续 Sigma/Graphology 集成计划验收。

当前预算口径:

场景 节点 标签 卡片 交互中可更新对象
全局地图 10000 1000 40 0 1200
小社区阅读 2500 1500 160 80 1800
中社区阅读 2500 1500 60 40 1800
大社区阅读 2500 1200 80 20 1500
超大社区内部地图 2500 800 40 0 1200

这些数字是第一阶段的安全预算,不是长期上限。后续全局大图换到 Sigma/Graphology 后,可以继续用真实测量调高或调低,但不能取消预算机制。

节点

  • 5000+:全局默认点位为主,只显示核心标签。
  • 10000+:进一步减少标签,只保留搜索命中、选中、核心节点和社区代表节点。
  • 节点大小按重要性变化,但普通节点不变成卡片。
  • 普通节点默认不显示文字;只有搜索命中、选中、Pin、社区代表节点和少数高连接节点显示标签。
  • 全局视角不显示节点卡片。
  • 搜索命中、Pin 和选中节点可以提升显示优先级,但不能突破当前视角的预算上限。
  • 超出预算的节点进入右侧抽屉列表或搜索结果列表,不继续堆在画布上。

  • 默认只显示重要边、强关系边、社区间骨架边。
  • 弱边默认隐藏或极淡。
  • 拖动、缩放、平移过程中隐藏更多边。
  • 停止交互后再补回允许显示的边。
  • 边数量必须受当前视角预算控制。
  • 搜索、筛选和选中对象可以提高相关边的优先级,但不能恢复全量边。

标签

  • 标签预算按当前可见节点数控制。
  • 标签优先级:搜索命中 > 选中节点 > Pin 节点 > 社区代表节点 > 高连接节点。
  • 普通节点标签只能在悬停、轻量抽屉或社区聚焦中出现。
  • 搜索命中可以全部高亮,但不能全部显示标签。
  • Pin 节点可以提高标签优先级,但 Pin 数量超过预算时,超出的 Pin 进入抽屉里的固定列表。

卡片

  • 全局视角不显示节点卡片。
  • 社区聚焦允许卡片,但必须有卡片预算。
  • 卡片优先级:当前选中节点 > 打开的阅读节点 > 搜索命中 > Pin > 核心节点。
  • 超出预算的卡片降级为点或标签,并进入抽屉列表。
  • 卡片数量不能因为搜索命中或 Pin 数量增加而无限增长。

重要性排序

核心节点、重要边、强关系由系统自动排序,排序规则必须可解释。排序分为稳定结构评分和临时上下文加权。

稳定结构评分决定长期核心节点、社区代表节点和骨架边。默认信号包括:

  • 连接数和局部中心性。
  • 跨社区桥接能力。
  • 社区代表性。

临时上下文加权只影响当前交互下的短期高亮和显示优先级。默认信号包括:

  • 与当前搜索或筛选条件的相关度。
  • Pin。
  • 最近访问、最近选中或当前阅读路径。
  • 与当前选中对象的一跳关系强度。

Pin 是强信号,但不是唯一标准。没有足够信号时,系统优先选择结构上能解释社区的节点和边,而不是随机展示。核心节点和社区代表节点不应因为一次搜索、筛选或阅读路径变化而频繁改写。

社区

  • 社区是全局大图的主要组织单位。
  • 当总节点超过性能阈值时,全局优先展示社区结构。
  • 如果完整节点图会影响流畅度,必须进入社区聚合或强降级显示,不能继续硬画全量细节。
  • 社区聚合视图中,社区本身是节点,社区之间的连接代表跨社区关系强度。
  • 社区聚合是全局视角的一种渲染层级,不是新的产品模式;点击后仍然先进入社区摘要,再由按钮进入社区聚焦。
  • 社区聚合节点必须强区分,呈现为装着很多节点的容器,而不是普通内容节点。
  • 聚合节点应显示社区名、节点数量、边界或内部点阵提示。
  • 聚合容器必须承载内部选中、搜索命中和 Pin 的可见提示。
  • 当前选中节点在聚合容器内时,抽屉继续显示该节点,容器显示选中标记。
  • 搜索命中在聚合容器内时,容器显示命中数量。
  • Pin 节点在聚合容器内时,容器显示 Pin 标记或数量。
  • 用户点击聚合容器后,先看社区摘要;如果容器内部有搜索命中或 Pin,抽屉直接列出这些内部对象。

社区聚焦规模

社区聚焦必须保留完整社区的空间轮廓和节点存在感,但完整在场不等于所有节点都升级成卡片、标签或阅读内容。

  • 小社区:可以显示更多卡片和标签,进入后接近阅读状态。
  • 中社区:全部节点在场,大部分以点显示,核心、选中、搜索命中和 Pin 节点升级为卡片。
  • 大社区:保留完整轮廓和节点点位,严格限制卡片和标签数量,更多内容进入右侧抽屉列表。
  • 超大社区:先显示社区内部地图,包括子主题、核心节点和主要关系;用户再进入子主题继续阅读。
  • 超大社区不是回到全局,而是社区内部的第二层组织。
  • 当前分界值:40 个节点以内按小社区处理,250 个以内按中社区处理,1000 个以内按大社区处理,超过 1000 个进入超大社区内部地图。
  • 后续可按真实图谱继续校准,但调整时必须同时参考节点数、边数、最大连通密度和卡片预算。

社区质量兜底

社区仍是默认组织方式,但系统需要识别社区结构不清晰的情况。

触发信号包括:

  • 单个社区过大。
  • 很多社区过小。
  • 社区之间关系混杂。
  • 社区命名或主题弱。
  • 社区数量异常。

出现这些情况时:

  • 不自动切换视图。
  • 不弹窗打断用户。
  • 在组织区域给轻提示:当前社区结构不够清晰,可用核心结构辅助查看。
  • 第一阶段只提供“核心结构 / 连接度”这一种轻量辅助查看,不新增完整备用状态。
  • 类型、来源、时间等组织方式依赖数据质量,进入后续探索,不进第一阶段。
  • 社区质量一般时,只给轻提示。
  • 社区质量很差时,弱化社区色块、边界和命名的视觉确定感,突出核心结构和连接关系。
  • 抽屉中说明社区划分可信度较低,避免把不可靠社区包装成确定结论。

动画与物理布局

  • 全局图谱不应持续运行高消耗动态布局。
  • 初始布局稳定后应停下来。
  • 拖动时只更新必要对象。
  • 社区聚焦可以允许更丰富的局部动画,但仍要受节点数量限制。
  • 拖动、缩放、平移时可以临时弱化普通标签、弱边和复杂效果。
  • 降级必须保持视觉连续性,使用淡出淡入,不突然跳变。
  • 交互中核心锚点、选中对象、搜索命中和 Pin 不消失。
  • 选中对象、搜索命中、Pin 和核心节点是视觉锚点;切换、聚合、展开和降级时必须尽量保持可追踪。
  • 聚合时,普通节点应表现为收进社区容器,而不是瞬间消失。
  • 从聚合进入社区时,社区容器应展开为内部地图。
  • 如果必须换布局,右侧抽屉仍保留当前对象和上下文,避免用户丢失正在看的内容。
  • 动画追求不迷路,不追求炫技。

技术方向

本设计不在这一阶段锁死具体库,但锁死技术主线:

一个图谱数据底座,一个全局大图渲染器,一套社区/筛选/搜索规则,细节阅读由抽屉和社区聚焦承接。

当前图谱仍是 DOM/SVG 渲染:节点是按钮,边是 SVG path。这个方向不适合继续承担万级全局大图,但仍适合承接社区阅读、小图、离线细节和界面化内容。

技术边界:

  • 全局大图:后续通过 Canvas / WebGL / 聚合渲染方案验证,目标是承接 5000+ / 10000+ 地图级浏览。
  • 社区阅读:继续保留现有 DOM/SVG 和界面组件路线,重点是卡片、标签、抽屉和阅读体验。
  • 产品语义:图谱数据、社区、搜索、筛选、Pin、抽屉状态和阅读路径保持同一套,不因为全局渲染方案变化而重做。
  • 坐标和选择:全局渲染器和社区阅读层必须共享同一套对象 id、社区 id、选中状态和搜索结果。

可评估的全局大图渲染方向:

  • Sigma + Graphology:已通过本轮试验,选为后续唯一全局大图主线。
  • vis-network:已完成对照试验,作为备选记录,但不进入下一步主线。
  • 聚合降级:保留为全局大图的结构总览和降级策略,不作为第二套长期产品。
  • 当前 DOM/SVG:继续用于小图、社区阅读或离线细节模式,不再要求硬撑万级全局图。

明确不做:

  • 不同时引入 Sigmavis-network 两套全局渲染器。
  • 不做三套坐标、三套点击、三套筛选。
  • 不把卡片和长文本塞进万级全局画布。
  • 不因为引入大图渲染器而丢掉现有阅读抽屉和社区体验。

后续探索记录:

  • Agent 提问入口不进入第一阶段,后续单独讨论。
  • 边单击关系检查不进入第一阶段,后续作为关系理解能力讨论;节点和社区抽屉中的强关系、桥接关系摘要保留。
  • 桌面版专项方案不进入第一阶段,后续单独讨论。
  • 桌面版方向应保持同一套图谱语义:图谱数据、社区检测、搜索和阅读抽屉不另起一套产品逻辑。
  • 当前设计必须避免绑定只能在浏览器网页里成立的交互和数据结构;未来桌面版复用同一套图谱语义,只替换外壳、存储和性能执行层。

与参考项目的关系

graphify

借鉴:

  • 大图全局降级。
  • 超大图社区聚合。
  • 只给关键节点显示标签。
  • 交互时隐藏部分边。
  • 稳定后停止高消耗布局。

不照搬:

  • 不把 llm-wiki 做成静态 HTML 图谱工具。
  • 不把完整阅读体验交给图谱画布。
  • 不让社区聚合替代社区阅读。

nashsu/llm_wiki

借鉴:

  • 桌面应用方向。
  • 成熟图谱库承接大图。
  • 布局计算后台化。
  • 节点数越大,标签和边越克制。
  • 图谱洞察面板的产品思路。

不照搬:

  • 不放弃 llm-wiki 现有的社区聚焦、Pin、离线图谱和阅读抽屉。
  • 不把图谱只做成结构浏览器。

当前 llm-wiki graph-engine

保留:

  • 社区色块和社区图例。
  • 社区聚焦。
  • 筛选和搜索。
  • Pin。
  • 右侧抽屉。
  • 离线 HTML 图谱能力。
  • 现有图谱数据语义。

调整:

  • 全局视角减少卡片化表达。
  • 点击节点的右抽屉改成轻量查看。
  • 社区聚焦作为细节阅读主入口。
  • 大规模场景引入更强的降级和聚合规则。

产品状态机

核心状态只有四类:

  1. global

    • 全局地图。
    • 支持筛选、搜索、全局概览、节点轻量查看、社区摘要。
  2. global + selected community

    • 全局地图保持不变。
    • 右侧轻量抽屉显示社区摘要。
    • 可以查看核心节点列表或进入社区聚焦。
  3. global + selected node

    • 全局地图保持不变。
    • 右侧轻量抽屉显示节点信息。
    • 可以进入所属社区。
    • “打开详情 / 阅读”进入所属社区,并自动选中该节点。
  4. community focus

    • 聚焦社区。
    • 完整社区节点都在场。
    • 核心、选中、搜索命中、Pin 节点升级为卡片。
    • 承接社区阅读抽屉。
    • 支持返回全局。

不新增“自动阅读模式”或“缩放触发模式”。

辅助查看不是核心状态:

  • “核心结构 / 连接度”只改变当前图的视觉强调和排序,不创建新的产品模式。
  • 辅助查看不拥有独立抽屉逻辑,不替代社区摘要或节点摘要。
  • 类型、来源、时间等备用组织如果后续进入设计,需要另补状态和抽屉规则。

高级选区不是核心状态:

  • Shift+点击、多选、邻居扩展可以继续存在,但它是高级分析选区。
  • 高级选区也使用右侧抽屉显示摘要和动作,不改变全局或社区主模式。
  • 如果它影响大图流畅度,优先降级它的视觉表达,而不是让普通单击变复杂。

当前实现对齐结论

当前图谱已有一些旧交互,其中一部分可以保留,一部分需要在后续实现时改语义。

保留:

  • 滚轮/触控板在图谱区域内缩放图谱。
  • 拖动空白处平移图谱。
  • 工具栏里的“回全图”作为返回全图主入口。
  • 双击空白回全图,作为辅助快捷方式。
  • 节点优先于社区命中。

需要调整:

  • 社区色块和社区图例的单击不应直接进入社区聚焦,应先显示社区摘要。
  • 单击空白不应退出社区聚焦,只应取消当前选中。
  • 节点单击在全局视角不应直接打开完整阅读,应先打开轻量节点摘要。
  • 节点双击取消固定位置不应继续作为主设计,应改成明确按钮或菜单动作。
  • 边的双击不应承担回全图,因为边未来可能需要轻量关系查看。
  • 旧交互直接切到新规则,不做旧主路径兼容。

需要区分命名:

  • “回全图”是视角导航:回到全局地图并 fit 全图。
  • “重置布局”是布局操作:清除用户拖动形成的固定位置。
  • 这两个动作不应共用同一文案或图标暗示。

旧交互调整方式

这一节用于把当前已有交互和新设计对齐。后续实现时,应按用户心智调整,不为了迁就旧行为保留隐蔽或多义的手势。

从“单击直接进入”改成“先检查,再深入”

社区色块和社区图例:

  • 旧行为:单击后直接进入社区聚焦。
  • 新行为:单击后只选中社区,右侧抽屉显示社区摘要,全局图谱保持原视角。
  • 深入动作:用户在抽屉里点“进入社区”后,才进入社区聚焦。
  • 辅助动作:“查看核心节点列表”只在抽屉内展开列表;悬停列表项时轻微高亮图上节点,不改变主图视角。

普通节点:

  • 旧行为:单击后偏完整阅读。
  • 新行为:单击后只显示节点轻量摘要,全局图谱保持原视角。
  • 深入动作:用户在抽屉里点“进入所属社区”或“打开详情 / 阅读”,都进入所属社区;“打开详情 / 阅读”会自动选中该节点。
  • 不建议把节点双击作为进入社区或打开详情的主入口。

关系边:

  • 旧行为:边双击可能承担回全图。
  • 新行为:边不承担导航动作。
  • 后续方向:边单击可以显示关系检查,例如关系强度、两端节点、所属社区和相关证据;这个方向不进入第一阶段。

从“空白处改变模式”改成“空白处只清选择”

空白单击:

  • 在全局视角,只清空当前选中的节点或社区。
  • 在社区聚焦里,只清空当前选中的节点或社区,仍留在当前社区;关系选择留到后续边单击关系检查再定义。
  • 不退出社区聚焦,不返回全图,不改变缩放。

空白双击:

  • 只在真正点到图谱空白背景时,作为回全图快捷方式。
  • 不在节点、社区色块、边、图例、搜索框、工具栏或右侧抽屉上触发。
  • 它是快捷方式,不是主路径;主路径仍然是可见的“回全图”按钮。

从“隐藏手势”改成“明确按钮或菜单”

固定 / 取消固定:

  • 旧行为:节点双击取消固定位置。
  • 新行为:在节点轻量抽屉或节点工具菜单里提供“固定位置 / 取消固定位置”。
  • 旧的双击取消固定不作为第一阶段主路径保留。

回全图:

  • 使用明确的“回全图”按钮。
  • 行为是回到全局地图并重新 fit 全图。
  • 不清除 Pin,不清除用户固定的位置。

重置布局:

  • 使用明确的“重置布局”按钮。
  • 行为是清除用户拖动形成的固定位置,让布局重新整理。
  • 不承担返回全图或退出社区聚焦。

抽屉内容随选中对象变化

全局视角共用一个右侧轻量抽屉,但内容和动作必须跟随选中对象变化:

  • 选中社区:显示社区摘要、核心节点、桥接关系、“进入社区”、“查看核心节点列表”。
  • 选中节点:显示节点摘要、所属社区、重要邻居、强关系、“进入所属社区”、“打开详情 / 阅读”。
  • 没有选中对象:显示全局概览、搜索结果或空状态。
  • 选中对象被筛选排除:显示该对象摘要、提示不在当前结果中,并提供“清除选择”“显示该对象”。

这能避免用户误以为“点社区”和“点节点”进入的是同一个详情逻辑。抽屉可以是同一个位置、同一个组件,但用户看到的内容层级和动作必须不同。

抽屉设计

右侧抽屉分两个使用场景,不必一定是两套组件,但用户感知要清楚:

  • 全局轻量抽屉:在全局地图里检查当前选中的节点、社区、搜索结果或全局概览。
  • 社区阅读抽屉:进入社区聚焦后承接更完整的阅读和理解。

全局轻量抽屉

目的:检查当前选中的对象,不打断地图。

选中节点时的推荐结构:

  1. 标题区:节点名、类型、所属社区、连接数。
  2. 关系区:最强关系 1-2 条。
  3. 邻居区:最重要相邻节点 3-5 个。
  4. 动作区:进入所属社区、打开详情。

选中社区时的推荐结构:

  1. 标题区:社区名、节点数量、核心节点数量。
  2. 摘要区:社区主题和主要内容范围。
  3. 结构区:核心节点、桥接到其他社区的关系。
  4. 动作区:进入社区、查看核心节点列表。

视觉要求:

  • 窄、轻、信息克制。
  • 不使用大段正文。
  • 不撑大图谱布局。
  • 同一个抽屉根据选中对象换内容,不额外弹第二层面板。

空状态要求:

  • 没有强关系时,直接显示“暂无强关系”,并给“进入所属社区”或“查看邻居”动作。
  • 没有邻居时,直接显示“暂无相邻节点”,不使用推荐内容伪装。
  • 搜索无结果时,显示“没有搜索结果”,并给“清空搜索”动作。
  • 社区摘要缺失时,显示“暂无社区摘要”,但仍显示节点数量、核心节点和进入社区动作。
  • 数据刷新后选中对象不存在时,显示“当前对象已不可用”,并给“清除选择”动作。

慢操作和失败状态:

状态 用户看到什么 仍可做什么 恢复动作
大图初次加载 先显示轻量骨架或加载中的地图区域,不显示空白页 可以看到加载进度 加载完成后进入全局地图
布局整理中 显示正在整理的轻提示,结构逐步稳定 可以缩放、查看已出现对象 整理完成后停止高消耗布局
搜索进行中 搜索框和图谱给轻反馈,旧结果先保留 可以继续输入或清空搜索 新结果完成后替换高亮和列表
抽屉内容加载中 抽屉先打开,再显示加载态 可以关闭抽屉或切换对象 内容完成后填入摘要
进入社区中 当前对象和社区容器保持可见,显示过渡提示 可以取消或等待 完成后进入社区聚焦
性能降级中 提示已切到轻量显示,不作为错误处理 可以继续浏览、搜索、点选 停止交互后恢复预算内细节
数据缺失 直接显示缺失原因和下一步动作 可以清除选择或返回全局 数据恢复后重新选择
硬错误 显示错误状态,不伪装成空结果 可以重试或返回全局 重试成功后恢复当前视角

社区阅读抽屉

目的:帮助理解一个社区。

推荐结构:

  1. 社区标题和摘要。
  2. 核心节点列表。
  3. 内部强关系。
  4. 桥接到其他社区的关系。
  5. 可进一步展开一跳邻居或打开节点详情。

视觉要求:

  • 信息可以比全局轻量抽屉更重。
  • 允许阅读型内容。
  • 仍避免一次塞满所有节点。

验收标准

设计层验收:

  1. 用户能清楚理解:全局是地图,社区是阅读。
  2. 普通节点点击不会让用户突然丢失全局上下文。
  3. 社区色块/图例点击作为社区检查入口合理保留,进入社区聚焦需要再点明确按钮。
  4. 右侧抽屉不再被定义为完整阅读入口,而是根据状态承担轻量查看或社区阅读。
  5. 5000+ / 10000+ 大图有明确降级规则。
  6. 方案没有同时引入多套全局图谱渲染主线。
  7. 选中优先级清楚:节点 > 社区 > 搜索列表 > 全局概览。
  8. 社区聚合被定义为全局渲染层级,而不是额外产品模式,但聚合节点在视觉上必须强区分。
  9. 返回全图有可见按钮,双击空白只是辅助快捷方式。
  10. 单击空白不承担返回全图或退出社区聚焦。
  11. 全局“打开详情 / 阅读”会进入所属社区并选中节点,不在全局承载完整阅读。
  12. 社区聚焦里完整社区都在场,只有重点节点升级为卡片。
  13. 社区质量不好时不打断用户,但要降低不可靠社区边界的视觉确定感。
  14. 核心键盘路径可用。
  15. 第一阶段范围和暂缓范围清楚,不把长期探索混进立即实现。

分阶段实现验收:

阶段一:测量和现有体验降级

  1. 1000 节点只作为回归基线,不作为目标上限。
  2. 固化性能测量,覆盖真实图谱、压力图谱、极限图谱。
  3. 每档测试图谱记录节点数、边数、社区数、最大社区规模、搜索命中数、Pin 数、是否存在超大社区。
  4. 1000 节点全局缩放、平移、悬停、节点点击保持流畅。
  5. 当前 DOM/SVG 全局图只要求完成可测量降级,不承诺直接达到 5000+ / 10000+ 正式目标。
  6. 全局节点点击只打开轻量抽屉,不自动进入社区。
  7. 全局节点的“打开详情 / 阅读”进入所属社区并选中该节点。
  8. 社区色块/图例点击先显示社区摘要,点击“进入社区”后进入社区聚焦。
  9. 社区摘要里的“查看核心节点列表”只展开抽屉列表,点击列表项不自动进入社区。
  10. 社区聚焦后完整社区节点都在场,但按点、标签、卡片和子主题分层表达。
  11. 交互过程中弱边、普通标签和复杂效果可以临时淡出,停止后淡入预算内细节。
  12. 交互中核心锚点、选中对象、搜索命中和 Pin 不消失。
  13. 全局图谱不能因为抽屉内容变化而重排大图。
  14. 全局中点击空白处能清空当前选中对象,抽屉回到全局概览或搜索结果列表。
  15. 搜索、筛选、Pin 不应自动覆盖用户当前选中的节点或社区。
  16. 已选对象被筛选排除时,抽屉保留对象并提供“清除选择”“显示该对象”。
  17. “显示该对象”采用临时例外显示,不清空搜索或筛选。
  18. 社区聚焦中单击空白不返回全图;点“回全图”或双击空白才返回全图。
  19. 回全图后视角 fit 全图,搜索、筛选、Pin 和当前选择保留。
  20. 节点双击不进入社区,不返回全图;固定/取消固定应有明确按钮或菜单入口。
  21. 边第一阶段不可点,但抽屉保留强关系和桥接关系摘要。
  22. “回全图”和“重置布局”在文案和行为上保持区分。
  23. 抽屉缺少信息时显示明确空状态和下一步动作。
  24. 搜索结果、抽屉按钮、“核心结构辅助查看”和“回全图”支持基本键盘操作。

阶段二:全局大图方案验证

  1. 用同一份数据验证候选全局大图方案。
  2. 验证对象包括全局打开、拖动、缩放、搜索高亮、节点点选、社区摘要、聚合容器提示。
  3. 只保留一个全局大图渲染主线。
  4. 全局大图方案必须能和现有社区阅读、抽屉、搜索、Pin 共享同一套对象语义。
  5. 通过验证后,才把 5000+ / 10000+ 作为正式实现验收目标。

阶段三:5000+ / 10000+ 正式验收

  1. 5000+ 节点全局视角能稳定浏览。
  2. 10000+ 节点至少能通过社区聚合或强降级视图流畅浏览。
  3. 真实图谱、压力图谱、极限图谱都必须有性能记录。
  4. 必测动作:打开图谱、拖动、平移、缩放、节点点击、抽屉打开、搜索高亮、进入社区、返回全图。
  5. 必测风险:内存是否持续上涨、画面是否大跳变、当前对象是否丢失、搜索结果是否迟迟不出现。
  6. 产品可感知失败包括:拖动不跟手、缩放卡住、抽屉慢开、搜索高亮迟迟不出现、画面大跳变。
  7. 当前 DOM/SVG 已测出 5000 节点存在平移或抽屉超时风险,10000 节点和超大社区缩放帧率明显不足;这些结果不作为失败遮掩,而是作为后续 Sigma/Graphology 集成的依据。
  8. 后续 Sigma/Graphology 集成计划必须继续记录打开、拖动、缩放、搜索、点选、抽屉、进入社区、返回全图等动作的时间和流畅度。

后续实现建议

下一步不应让当前 DOM/SVG 全局图直接硬撑万级,也不应再同时推进多套全局渲染方案。本轮测量和选型已经完成,后续应围绕 Sigma/Graphology 写单一路线集成计划。

已完成的前置工作:

  • 固化性能测量:覆盖真实代理图、1000、5000、10000、超大社区、很多小社区、很多搜索命中和很多 Pin 节点。
  • 定义降级策略:全局卡片为零、标签和边受预算约束,搜索命中、选中和 Pin 通过优先级保留。
  • 定义重要性排序:稳定结构评分和临时上下文加权分开。
  • 选型试验:Sigma/Graphology、vis-network 和聚合降级均已测量;下一步集成 Sigma/Graphology,聚合只作为降级策略。

下一步实现计划应只集成 Sigma/Graphology 这一条全局大图路线,并继续保留 DOM/SVG 作为小图、离线细节和社区阅读路线。

后续探索停车场

这些议题保留,但不进入第一阶段。

Agent 提问入口

  • 暂缓原因:需要先稳定图谱对象、社区摘要和关系摘要,否则 Agent 无法可靠理解当前上下文。
  • 后续讨论:Agent 如何基于当前选中节点、社区、搜索结果提出问题或生成探索建议。
  • 触发条件:全局轻量抽屉、社区阅读抽屉和对象选中语义稳定后再讨论。

边单击关系检查

  • 暂缓原因:第一阶段边只承担视觉结构,避免把关系详情、证据和选择优先级一次性做复杂。
  • 后续讨论:点击一条边后如何展示关系强度、两端节点、所属社区和相关证据。
  • 触发条件:节点/社区抽屉中的强关系和桥接关系摘要稳定后再讨论。

多套备用组织方式

  • 暂缓原因:类型、来源、时间依赖数据质量,过早加入会变成第二套图谱系统。
  • 后续讨论:类型、来源、时间等组织方式在什么数据覆盖率下可用,以及是否拥有独立摘要。
  • 触发条件:核心结构辅助查看验证有效,并且图谱数据字段覆盖率稳定后再讨论。

移动端和窄屏专项

  • 暂缓原因:第一阶段主体验是桌面宽屏大图探索,移动端交互、抽屉和手势需要单独设计。
  • 后续讨论:窄屏下抽屉位置、手势冲突、搜索和社区阅读如何重排。
  • 触发条件:桌面大图主路径稳定后再讨论。

桌面版专项方案

  • 暂缓原因:桌面版需要单独讨论外壳、存储、本地缓存、后台布局和导入导出。
  • 后续讨论:如何复用同一套图谱语义,同时替换性能执行层和本地能力。
  • 触发条件:全局大图渲染路线确定后再讨论。

完整键盘漫游

  • 暂缓原因:第一阶段只保证核心键盘路径,不让键盘承担遍历万级节点的主任务。
  • 后续讨论:如何在不低效遍历大量节点的前提下提供可访问的图谱探索方式。
  • 触发条件:核心路径稳定,并且需要面向更完整的无障碍验收时再讨论。

智能阅读路径排序

  • 暂缓原因:长期阅读历史、最近访问和 Agent 推荐容易让核心节点排序变得不稳定。
  • 后续讨论:如何把长期行为信号作为辅助,而不破坏稳定结构评分。
  • 触发条件:稳定结构评分和临时上下文加权验证清楚后再讨论。