何时需要图结构
普通片段检索适合回答局部事实问题;跨文档关系或全局主题总结可能需要实体、关系与社区摘要。图结构增加了索引成本,也引入实体识别错误和错误关系传播,因此不应默认所有知识库都采用 GraphRAG。
每条关系应记录来源文档、段落、版本及抽取方法。模型抽取到的关系是一条待核验主张,不是自动成立的事实。两个同名实体只有在上下文、类型或稳定标识一致时才能合并。
可运行的带来源关系合并
import assert from "node:assert/strict";
function mergeEdges(edges) {
const map = new Map();
for (const edge of edges) {
const key = JSON.stringify([edge.from,edge.type,edge.to]);
const row = map.get(key) || {...edge,sources:new Set()};
row.sources.add(edge.source);
map.set(key,row);
}
return [...map.values()].map(e=>({...e,sources:[...e.sources]}));
}
const edges=mergeEdges([
{from:"A",type:"depends_on",to:"B",source:"doc-1#p-3"},
{from:"A",type:"depends_on",to:"B",source:"doc-2#p-8"}
]);
assert.equal(edges.length,1);
assert.equal(edges[0].sources.length,2);社区摘要不能替代原文
社区摘要是派生数据,应保存依赖的边和原文版本。原文撤回或修订后,受影响的实体关系和摘要都需要重新计算。只更新向量索引而保留旧社区摘要,会让已经撤回的观点再次出现在答案里。
评测至少包含局部事实、跨文档关联、全局总结和实体歧义四类问题。比较答案证据覆盖率与索引成本,避免只展示一张复杂关系图就认定检索质量更高。
原始资料
- From Local to Global: A Graph RAG Approach to Query-Focused Summarization:图与社区摘要用于全局问题的研究。示例只合并带来源的关系,不实现社区发现。
感谢阅读本文
如果你觉得内容有帮助,欢迎点赞支持或分享给同行开发者。
1858 次阅读295 人赞过