5.11.md 3.4 KB

5.11 图谱更新、知识域过滤与异常降级

如果明天招牌蛋糕换了制作负责人,今天保存的分工就不能一直当成新答案。另一个情况是,关系数据库暂时连不上:系统还能查哪些资料,要怎样告诉店长?本节把这两种真实变化落到更新与降级代码中。

一、更新一份文档,会改变哪两边

{{figure:11-update|图 5-15 更新以文档标识为单位,图事实和向量文本都需要同步处理。}}

本次实际更新练习使用 cake_owner_update.json:owner-cake 的新版分工将招牌蛋糕负责人从小林改为小梅。旧版事实必须清理,但不能顺手删除小林,因为草莓酱与巧克力饼干仍由小林负责。

doc_id 标识逻辑文档;version 标识本次版本;chunk_id 标识具体文本块。删除文档对应的事实与原文,保留可能被其他文档引用的共享实体,是本实现的基本边界。

二、先读图中的文档删除片段

{{snippet:remove-document}}

关系按 知识域 和 文档编号 删除,文本块与文档节点也在相同范围内处理。这个动作不是删掉数据库里所有叫“套餐”的节点;两个知识域的同名对象应该互不影响。

更新采用替换该文档的方式,在 Neo4j 内通过事务保持这份文档的事实与文本一致。导入整批数据时,不同文档仍分别处理,不能说整批数据和两种数据库都处于同一原子事务。

三、跨库更新必须留下可恢复状态

{{snippet:ingest-journal}}

编排层记录 Milvus 与 Neo4j 各自是否完成。如果一边成功、一边失败,日志保留未完成状态;修复连接后重新执行幂等导入,恢复一致性。这个日志是教学实现的补偿起点,并不自动等价于成熟的变更队列、事务发件箱或自动恢复服务。

课堂练习应在增强版数据副本中运行:使用配套蛋糕负责人更新记录,更新版本、事实与引用;查询是否返回小梅;随后恢复原课程数据。不要在原始项目数据或真实业务库上进行破坏性练习。

四、图通道异常时,保留仍然可用的证据

{{figure:11-degrade|图 5-16 降级响应带上通道警告,不能把图服务不可用说成“查证没有影响”。}}

{{snippet:channel-errors}}

编排层区分空候选与异常:没找到实体时图通道正常返回空列表;连接失败或超时时带上 warnings。可用的向量候选继续参与融合,但回答只能基于这次真正拿到的证据。

数据库层限制每次查询时间;编排层限制通道等待时间。取消一个任务不保证底层操作立即停止,所以还要通过查询本身的边界、连接超时与服务监控控制负载。

五、三类必须验证的情况

演练 正确观察点
删除 menu-tea 套餐组成资料 双人下午茶包含蛋糕的关系消失;owner-tea 与 sales-tea 的分工和销售资料保留
当前店与实验分店分别问双人下午茶负责人 各自返回对应店员,引用不跨域
模拟图连接错误 向量结果可用时继续回答,同时返回图通道警告

自动验证脚本会完成隔离演练并恢复基线。学生手动练习时,应先确认当前连接的是增强版独立环境。下一节用统一问题集比较三种检索方式,让图检索的收益与代价都能被观察到。