知识图谱(八):更新与维护
图谱的增量更新、派生数据失效、发布恢复、访问控制和运行成本。
系统分层与最小实现
一个可维护的图谱系统可以分为源记录、候选断言、已发布图视图和应用服务几个层次。源记录保存重建依据,候选层保留抽取与链接结果及审核状态,图视图提供稳定查询,应用服务组合结构化结果与原文。这些层次可以放在同一个数据库中。
依赖分析的最小应用是:在指定快照中,从受影响版本查出相关服务与团队,并显示依赖路径和证据。先限定到静态 runtime 依赖,公告条件由人工核查。Python 示例实现了依赖遍历与证据查询。
每次构建记录输入版本、模式版本、抽取器或映射规则版本、实体词典版本及输出批次。新模型可以先基于同一源快照重建候选,评估后再发布。保留中间结果使系统能够解释一条边在哪个阶段、依据什么材料生成。
增量更新与历史数据
增量更新需要表达新增、变更和失效,而不只是不断追加边。假设订单服务升级为 checkout-sdk 2.2,并且新版本不再依赖 parser 1.4。如果保留新旧依赖且不区分当前部署,查询仍会把订单服务作为当前候选;如果直接删除旧边,又无法复盘历史状态。
可以为断言保存有效区间,也可以把每次构建和部署建成独立实体,再记录服务当前使用哪次部署。前者依赖时间筛选,后者依赖快照或部署选择。查询时选择当前部署或指定历史时点。
完整快照可用于比较相邻版本中哪些关系消失;增量事件则需要显式的删除或结束语义。采集暂时失败并不等于依赖被删除。接入任务应区分成功的空快照、部分响应和失败,避免把数据源故障传播为大规模事实撤销。
迟到事件还会修正历史。例如十月三日才收到十月一日生效的团队变更,系统需要同时保留业务生效时间和记录时间。这样既能查询实际历史,也能回放当时系统的认知,确定错误通知是源数据迟到还是查询处理问题。
派生数据的依赖与失效
图中的事实会进一步产生可达关系、风险候选、检索索引、摘要和答案缓存。这些产物应记录依赖哪些输入。一份公告被修订或撤回时,系统才能定位需要重算的范围。
| 变化 | 直接影响 | 需要检查的派生产物 |
|---|---|---|
| 构建快照替换 | 当前依赖关系 | 可达关系、服务候选、路径缓存 |
| 公告修订 | 影响版本与条件 | 风险候选、摘要、问答缓存 |
| 实体合并纠正 | 关联到该身份的断言 | 向量索引、邻域、所有相关路径 |
| 权限撤销 | 源记录和断言的可见范围 | 跨文档摘要、缓存和搜索结果 |
| 模式升级 | 字段、关系与校验规则 | 映射器、查询模板、历史数据迁移 |
失效处理还需要考虑多份支持证据。一条断言由两个独立来源支持,其中一个撤回后,应重新判断剩余证据是否足以维持发布状态。反过来,重复抓取同一材料不应被当成多个独立来源,从而阻止本应发生的撤回。
实体纠错影响范围往往更大。误合并两个组件后,依赖、公告和摘要都可能跨对象传播。保存原始提及、规范实体链接和合并历史,才能撤销错误连接并重建受影响视图。仅保留合并后的最终节点,恢复将十分困难。
发布一致性与故障恢复
接入任务可能重复投递、超时或在中途失败。幂等键可以结合源记录版本与处理版本,使同一次输入的重试复用产物;实体、断言和证据关联应在一致的提交范围内发布。否则查询可能读到一条没有证据的边,或只看到一批更新的一部分。
单存储可以利用事务完成发布,跨存储则需要显式批次状态和发布协调。一个简洁方案是构建新快照,完成校验后切换当前快照指针,并在保留期内保存旧版本。大规模系统可以采用更细粒度的增量,但仍要明确更新期间查询的一致性保证。
图、全文索引、向量和摘要应携带可比对的版本。图已经切换到新构建而摘要还描述旧依赖时,应用需要等待、降级到原文或明确使用同一旧快照,不能无提示地混用。回滚时,一起恢复这些产物的对应版本。
恢复演练需要覆盖部分写入、重复事件、索引构建失败和实体合并撤销。检查重点是重试是否重复、旧版本是否可读、最终状态能否判断以及哪些请求会受到影响。
访问控制与权限传播
知识图谱中的节点、边和证据都可能具有访问范围。公开的组件名称不意味着它连接到哪些内部服务也可以公开,因此权限不能只控制节点展示。查询应在用户可访问的图视图中执行,身份与租户信息由可信会话提供。
假设用户只允许访问订单服务,不允许访问报表服务。从 parser 反向遍历时,就不应返回报表服务,也不应通过隐藏路径后的总数量泄露它。遍历时就按权限过滤节点和边。
派生摘要会继承来源限制。若一份社区报告混合了多个权限域的事实,不能随意赋予其中某个较宽松的权限。可以按权限域分别生成,或采用足以覆盖全部输入限制的访问策略;权限撤销后,对应的缓存、摘要和索引也要失效。
权限测试应包含同一问题在不同身份下的结果,以及源文档被撤权后的变化。对需要全局统计的业务,先定义可统计的范围与授权,再讨论结果展示,否则数量、错误提示和缓存命中都可能泄露不可见部分。
运行成本与实施验收
总成本包括初始构建、持续更新、在线查询、人工审核和存储,可用 C_total = C_initial + C_updates + N_query × C_query + C_review + C_storage 分项记录。按实际运行数据估算每项费用。
资料变化频繁而查询较少时,预先生成大量摘要可能不划算;稳定资料被频繁查询时,更多离线处理可能摊薄在线成本。人工审核同样重要:增加少量召回却产生大量错误候选,可能降低整体效率,应记录每批接受事实所需的审核时间。
| 阶段 | 交付物 | 进入下一阶段的依据 |
|---|---|---|
| 问题与样本 | 能力问题、输入快照、参考答案 | 范围和无答案情形已明确 |
| 最小构图 | 身份规则、候选断言、证据关联 | 重试不重复,错误可以定位 |
| 结构化查询 | 结果集合、路径、历史口径 | 已知与边界案例符合预期 |
| 检索问答 | 混合检索与逐项引用 | 相对基线有可解释收益 |
| 持续运行 | 增量、失效、权限与回滚 | 更新和故障演练可恢复 |
每个阶段都需要对应失败案例。最小构图加入同名对象、缺失版本和重复记录;查询加入环、多个路径和未知团队;问答加入证据不足和否定条件;运行阶段加入公告撤回、延迟更新与权限变更。
验收时,使用约定的数据快照和权限范围检查结果,并沿返回的关系找到原始记录。后续根据遗漏、错误、延迟和维护成本决定需要改进的环节。