切换深色模式
SPINACH:通过探索修正知识图谱查询
对应 CS224V · 2026-10-26 · Reactive Agents for Parsing Knowledge Graph Queries。日期为校方课表日期,可能调整。核对官方课表。
资料状态
核对日期:2026-09-19。对应课程尚未开课;本文是基于公开课纲与文中原始资料的原创预习技术解读,不是课堂实录、讲义翻译或官方作业答案。本文于 2026-09-20 深度修订。示例为原创教学设计;离线实验与真实模型实验的边界分别说明,不以推演冒充模型实测。
课程助手接到新问题:“哪些讲师曾在同一机构任职,而且时间有重叠?”资料来自知识图谱,任职信息可能放在关系节点上,而不是讲师直接连向机构。模型即使认识人名,也未必知道图谱的实际结构。
本讲关注查询构建中的主动探索:用小查询验证路径,再逐步组合完整问题。目标是避免一次生成长查询后,用“有结果”掩盖语义错误。
先确定实体,再探索关系
SPINACH 论文研究结合知识图谱探索构建查询。下面使用虚构图谱,不使用真实 Wikidata 属性 ID。
text
任职记录 E1:person=R1,organization=O1,start=2020,end=2022
任职记录 E2:person=R2,organization=O1,start=2023,end=2025
任职记录 E3:person=R3,organization=O1,start=2021,end=2024这里明确把年份区间解释为半开区间。查询“与 R1 同期在 O1 任职”应返回 R3,不返回 R2。若模型只连接机构节点,会错误返回两者。
同名机构也不能只按标签合并。实体查找应返回候选 ID、类型和用于消歧的属性;必要时先澄清用户所指对象。
查询路径是一项需要验证的假设
模型最初可能猜测 person → organization,实际图谱却使用 person ← employment → organization。先查 R1 的局部关系,就能发现任职节点和时间限定字段。
接下来逐步验证:能否找到 R1 的任职记录,能否找到同机构其他记录,能否读取两端时间,最后加入重叠条件。每一步保留一个小的结果样本,检查实体类型和字段含义。
这不是为了增加调用次数,而是降低长查询中多个错误相互遮蔽的概率。若模式已稳定且缓存可靠,可以跳过重复探索。
三类执行反馈需要不同修复
语法错误通常需要修改查询结构;超时可能需要更早限制候选或缩小探索;空结果可能是真没有,也可能是路径或实体错误。
不能见到空结果就删除约束直到非空。这样“同期任职”最终可能退化为“在该机构出现过”。修改查询时保留用户原始谓词,并记录放宽条件是否只是诊断动作,不能把诊断结果当成正式答案。
对一段路径的测试可以暂时去掉时间条件以查看数据,但最终交付必须重新应用它。
时间缺失引入知识边界
若 E3 的结束时间未知,不应自动填成今天。图谱可能采用开放世界语义:没有记载不代表不成立,也不代表持续至今。
可以将候选分为已证实重叠、已证实不重叠和需要补充时间。对“所有符合者”这样的请求,还要说明图谱覆盖范围,因为未录入的人物不可能被查询返回。
这种边界与前面的 SUQL 未知状态是一致的:结果空缺与现实否定不是同一件事。
一条完整查询应保留哪些语义
对上面的虚构模式,可以写出如下教学 SPARQL。ex: 是示例命名空间,不代表真实知识图谱属性;年份已按前述半开区间编码为整数。
sparql
PREFIX ex: <https://example.org/>
SELECT DISTINCT ?person WHERE {
?base ex:person ex:R1; ex:organization ?org;
ex:start ?s1; ex:end ?e1 .
?job ex:person ?person; ex:organization ?org;
ex:start ?s2; ex:end ?e2 .
FILTER(?person != ex:R1 && ?s1 < ?e2 && ?s2 < ?e1)
}同一个 ?org 负责同机构约束,两组时间比较负责重叠,人物不等式排除本人,DISTINCT 避免同一个人存在多段重叠任职时重复返回。每一部分都能对应原问题中的一个要求,便于检查删掉它会产生什么反例。
这个查询要求起止年份都存在,因此缺失结束时间的候选根本不会出现在结果中。若产品需要展示待核实人物,应另做包含缺失时间的候选查询,并标记缺失字段。不能仅看上述查询结果,就断言其余人物都不符合。
探索查询与正式查询的区别现在很清楚:探索可以读取不完整节点以发现模式;正式结论必须满足明确谓词,同时报告模式之外的信息缺口。
如何验证 Agent 真的在修正语义
用上述三条记录作为基线。新增同名机构 O2,确认不会混入;删除 E3 的时间,确认从确定结果变为待核实;把 E2 改为 [2021,2025),确认 R2 加入结果。
还可以故意向 Agent 提供一条语法合法但漏时间条件的查询,看它能否根据用户约束发现问题,而不是因为查询成功就停止。
评测应同时检查结果集合和查询语义。一个偶然没有反例的数据集可能让错误查询返回正确集合,因此需要这些变形数据来暴露遗漏。
探索能力的成本边界
节点邻接可能非常大,盲目枚举会耗尽上下文。工具应支持类型过滤、结果限制和回读引用。模式缓存可以降低成本,但图谱版本改变时需要失效。
本讲得到的不是一个万能查询生成器,而是“提出路径假设—局部执行—检查—组合”的方法。下一讲将它用于从长文档中建立可查询的数据表示。继续阅读SLIDERS。