AI 纪元 追踪人工智能最新进展,深度解读前沿技术

把图检索接到向量RAG后,企业知识库怎么搭

向量检索适合找相似文本,遇到合同引用、组织层级和设备维修链路时却容易串错实体。混合架构保留向量召回,再用知识图谱处理关系查询。落地重点不在多装一套数据库,而在实体建模、查询路由、权限过滤和增量更新。

0 次阅读 约 3397 字 7 分钟 AI 生成
Editorial still life of two intersecting search paths: a grid of scattered document cards and a clean network of connected nodes on a desk.
Editorial still life of two intersecting search paths: a grid of scattered document cards and a clean network of connected nodes on a desk.

企业知识库里有两类问题,看起来只差几个字,底层检索方式却完全不同。

“公司差旅报销标准是什么”,通常找到对应制度段落就能回答。“A公司与B公司签署的合同中,违约金条款是否引用了另一份协议”,则要先确认公司、合同、条款和协议之间的关系。只按文本相似度召回,很可能找到措辞接近的条款,却把两份合同拼到一起。

这正是向量RAG容易暴露短板的地方:文本相似,不代表实体相同;段落相关,也不代表关系成立。

向量检索卡住的,往往是关系链

台湾经济部产业技术司的技术解析提到,大型语言模型通过语义匹配预测后续词语,同时受到训练数据时间范围和领域边界的限制。向量RAG在外部知识库中补充了检索能力,但主要依据仍是语义相似度。

这套方法很适合回答政策说明、产品介绍和操作手册类问题。用户输入一段自然语言,系统从文档中找出意思相近的文本块,再交给模型组织答案。

关系型问题则多了一步。比如:

  • 编号EQ-203的设备由哪些工程师维修过?
  • 每次维修更换了什么零件?
  • 某位员工的直属上级是谁,其审批权限覆盖哪些采购类别?
  • 一份合同中的条款引用了哪些附件或历史协议?

这些问题需要沿着“设备—维修记录—工程师—零件”或“合同—条款—附件”的路径查询。向量库可以找回相关段落,却不会天然验证路径是否真实存在。

IBM对GraphRAG的介绍指出,微软研究院在2024年推出GraphRAG,重点解决私有数据和结构化数据中的关系建模问题。它把实体及其连接写入图结构,让检索从“哪些文字相似”扩展到“哪些对象确实有关联”。

两条检索链路,各自处理擅长的问题

企业知识库没必要把全部查询都送进图数据库。更稳妥的做法,是保留向量检索,再增加图检索和路由层。

向量链路继续处理语义搜索,例如查找制度条款、相似案例和相关说明。图链路负责实体关系、多跳路径、组织层级、供应链连接以及带时间条件的关联查询。遇到既要找文本、又要核对关系的问题,两条链路可以先后执行,再合并结果。

一套常见流程是:

  1. 先判断问题属于语义型、关系型还是混合型。
  2. 语义型问题直接进入向量数据库。
  3. 关系型问题先识别实体,再生成Cypher等图查询语句。
  4. 混合型问题先召回文本,从文本中识别实体,再向图中扩展关系。
  5. 合并两路结果,保留原文位置和关系路径,交给模型生成答案。

微软的GraphRAG开源项目已经把索引构建、查询和提示词调优拆成独立模块。图存储可以选择Neo4j;已有PostgreSQL体系的团队,也可以评估Apache AGE。向量层可使用Qdrant、Milvus或Weaviate。

另一种路线是采用LightRAG等同时包含图检索和向量检索的框架。AI-Compass整理的GraphRAG生态资料还列出了微软GraphRAG、蚂蚁KAG、LightRAG和Fast-GraphRAG等项目。选型时应先看数据结构和查询类型,框架数量本身没有参考价值。

图谱能不能用,取决于索引怎么建

混合架构最费工的部分通常在查询之前。原始文档需要分块、生成向量,还要抽取实体、关系和时间属性。后者经常需要调用大模型,成本和错误也集中在这里。

第一步是先定实体模型。合同知识库至少要区分公司、合同、条款、附件和签署时间;设备知识库则可能包含设备、工程师、维修记录和零件。如果一开始只让模型自由抽取,图中很快会出现大量含义接近、名称不同的节点。

实体别名尤其容易出问题。同一家公司在文档里可能被写成“甲方”“委托方”或简称。没有归一规则,这些名称会变成互不连接的实体。查询时即使找对了合同,也可能沿着错误节点继续扩展。

时间字段也要进入关系模型。合同的签订、变更和终止,设备的维修和零件更换,都有明确时间范围。如果图查询没有过滤时间,历史关系会和当前关系一起返回。

因此,索引阶段至少要保存三类信息:

  • 文本块及其原始文档位置;
  • 标准化后的实体ID和别名;
  • 关系类型、来源以及适用时间。

文档更新后,还要同步处理旧节点和旧关系。只新增、不清理,图谱会逐渐积累已经失效的连接。删除文档时,也不能只删向量库中的文本块,还要检查由该文档建立的实体和关系是否仍有其他来源。

查询路由不要交给一个大提示词

不少实现把意图判断、实体识别、图查询生成和答案生成塞进同一个提示词。链路虽然短,出了问题却很难定位:究竟是实体识别错了、Cypher写错了,还是召回内容不够?

更容易维护的方式是把步骤拆开:

def route_query(question):
    intent = classify(question)

    if intent == "semantic":
        return vector_search(question, top_k=8)

    if intent == "relational":
        entities = extract_entities(question)
        cypher = generate_cypher(entities, graph_schema)
        graph_result = run_graph_query(cypher)
        return fetch_source_chunks(graph_result)

    vector_chunks = vector_search(question, top_k=5)
    entities = extract_entities(question, vector_chunks)
    graph_result = graph_expand(entities, depth=2)
    return rerank(vector_chunks + graph_result)

意图分类可以先用规则或小型分类模型完成。真正需要重点监控的是实体识别和图查询生成,因为这两步直接决定系统会不会连错对象。

图查询结果还应回到原始文本。知识图谱负责确认关系,文档片段负责提供可引用的依据。最终答案最好同时保留文档来源和关系路径,方便用户复核。

先按问题类型评测,别只看平均分

判断是否需要GraphRAG,可以先整理现有系统的错误案例。如果答案错误主要来自分块不合理、召回数量不足或排序不准,应先修正向量检索。如果错误集中在同名实体、跨文档引用、组织层级和多跳关系,才有必要增加图检索。

评测集也应分开设计:

  • 语义查找:能否找到正确制度或说明段落;
  • 单实体查询:能否准确识别人名、公司、设备和产品;
  • 关系查询:能否确认两个实体之间的直接连接;
  • 多跳查询:能否沿两层以上关系找到目标;
  • 时间查询:能否排除已经失效的历史关系;
  • 同名实体:能否避免把不同对象合并。

这种分组比单一准确率更有用。它能直接说明图检索补上了哪类能力,也能发现哪些普通问题被错误地送入图链路,徒增延迟和成本。

田攀在2026年4月发布的架构评论中提到,截至2025年,生产环境采用图检索的企业不到15%。这组数据来自该作者的观察,适合用来理解部署现状,不宜当作所有行业的统一结论。文章指出的另一个现象更值得注意:纯向量RAG的错误往往不明显,系统能够正常返回内容,问题藏在实体和关系被错误拼接的过程中。

权限和更新,比检索算法更早进入生产问题

图谱把跨文档关系连接起来后,权限边界也会变得复杂。某个用户可能有权读取合同正文,却无权查看合同关联的客户、人员或其他部门数据。因此,访问控制应在图查询和向量召回阶段同时生效,不能等内容进入模型后再处理。

每个节点、关系和文本块都需要保留来源与权限标记。查询图谱时先过滤可见范围,再做关系扩展;查询向量库时也使用相同的租户、部门或角色条件。

混合架构真正增加的工作量,主要落在数据治理上:实体如何命名,关系如何定义,历史版本怎样清理,权限如何继承。工具可以完成索引和查询,却无法替团队决定“合同变更”与“合同续签”是不是同一种关系。

如果知识库主要用于找制度、搜文档,向量检索配合合理分块和重排序通常已经够用。只有当业务问题开始稳定地涉及实体核对、跨文档引用和多跳关系时,GraphRAG才会带来清晰收益。此时接入图检索,解决的是已经出现的关系错误,而不是为架构再添一个新名词。

相关阅读