跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava算法

KAG 落地实战:LLM 抽取知识图谱至 Neo4j 的问答闭环

KAG 技术通过结合大模型与知识图谱解决传统 RAG 在实体关系定位上的不足。本文分享一套基于 Java 与 LangChain4J 的落地方案,利用 LLM 从文本抽取结构化图谱存入 Neo4j,并通过 Cypher 生成与预检机制实现精准问答。包含数据抽取、入库、Schema 探测、召回评测及问答闭环的全流程实践,重点解决 Cypher 生成错误与图谱建模问题,提供可直接复用的测试类与 Prompt 策略。

GRACE Grace发布于 2026/4/5更新于 2026/7/2345 浏览

本文不是概念科普,而是一套可以直接跑起来的 KAG(Knowledge-Augmented Generation)工程闭环:用大模型从小说文本中抽取知识图谱 JSON 一键导入 Neo4j,用评测集做 Recall@5 召回评测,最后把同一套链路用于图谱问答。

你可以把它当成做 KAG、GraphRAG 或 KGQA 的最小可落地 MVP。

为什么要做 KAG?我遇到的痛点

做 RAG 时,我踩过一个典型坑:向量召回对'典故/情节类问题'并不稳定。比如你搜'温酒斩华雄',但原文可能写成'其酒尚温',人物可能是'云长/关公',词面变化导致召回波动。

如果分块策略偏大,章节内细粒度信息容易被稀释;如果分块过小,语义又不完整。而知识图谱擅长的恰好是实体、事件、关系的结构化表示。通过 Event/Character -> APPEARS_IN -> Chapter 可以精准落到具体章回。

所以我最终选择:RAG 负责'文本证据'与'长上下文生成',KG 负责'结构化召回、强约束定位',二者组合形成 KAG。

工程结构:5 个测试类 + 1 个评测集

这套闭环全部以 JUnit 测试类的形式提供,方便你在工程里反复迭代。

评测集

数据位于 doc/eval/sanguo-kg-eval.json。数据结构包含 query 问题,以及 answers[] 标准答案集合,其中记录了期望命中的章回标题和可接受关键词。

抽取:LlmKgExtractTest

输入是 doc/aigc_chunk_store_to_graph.csv,输出为 doc/kg_extract_result.json。逐行读取 CSV(每行是一段章回文本),调用 LLM 抽取 Character、Location、Event、Item 等实体,以及关系 relations[{type, head, tail}]。同时附带写入章回元信息如 documentName/chapterTitle。

入库:KgNeo4jImportTest

核心写入逻辑是创建 (:Chapter {chapterKey}) 作为'章回锚点',再创建实体节点。关键是把实体与章回相连:

(n)-[:APPEARS_IN]->(c:Chapter)

这个 APPEARS_IN 的含义是实体/事件出现在某章回。它非常关键,把'结构化实体世界'挂回到'可以回答问题的章回证据'。

Schema 获取:Neo4jSchemaIntrospectTest

LLM 要生成靠谱的 Cypher,必须知道你图谱里有哪些 label、关系类型以及每个 label 的关键属性。我用 CALL db.labels() / CALL db.relationshipTypes() 做了 schema 探测。

召回评测:SanguoKgRecallEvalTest

核心是把'问题→图谱查询→命中判定'做成评测流程。链路如下:

  1. 读取评测集。
  2. 探测 Neo4j schema。
  3. 对每个 query:LLM 抽取意图/关键词,生成 Cypher(返回 {cypher, params})。对 Cypher 做预检 EXPLAIN <cypher>,若失败把错误信息回灌给 LLM 做修复,再预检。
  4. 执行查询拿 TopK,再让 LLM 判定是否命中标准答案。
  5. 汇总 Recall@5。
KAG 问答:KagGraphLLMQATest

这是'评测链路'的应用版。同样先拿 schema,LLM → Cypher → 查询 → LLM 组织最终答案。这一步的意义在于评测不是终点,你最终要的是线上问答可用,所以必须把评测链路的关键能力迁移到问答链路里。

环境准备

默认连接配置如下:

  • Neo4j: , 用户名 , 密码建议按你的环境调整。
bolt://localhost:7687
neo4j
  • LLM: 当前测试类默认使用 OpenAI 兼容接口,模型 qwen-plus。注意把 Key 放到环境变量里,不要提交到仓库。
  • 推荐执行顺序

    按这个顺序跑最稳:

    1. LlmKgExtractTest:从 CSV 抽取出 doc/kg_extract_result.json。
    2. KgNeo4jImportTest:清空 Neo4j → 写入 Chapter/Entity/Relations。
    3. Neo4jSchemaIntrospectTest:确认图谱结构是否如预期。
    4. SanguoKgRecallEvalTest:跑 Recall@5。
    5. KagGraphLLMQATest:用任意问题做 KAG 问答。

    两个最关键的工程经验

    1. 让 LLM 生成 Cypher,必须先喂'真实 schema'

    很多人 Cypher 生成失败,根本原因是你让 LLM 写 (:Chunk) / HAS_CHUNK,但你的图谱里可能压根没有。或者属性叫 chapterTitle 还是 title,LLM 猜错就全挂。所以 schema introspection 是必做项。

    2. LLM 生成的 Cypher 必须预检 + 自动修复

    LLM 写 Cypher 很容易出现聚合/ORDER BY 语法错误,或用错 APOC、参数类型不匹配。解决方法是预检 EXPLAIN cypher,若失败把错误信息 + 原 cypher 回灌给 LLM 让它修复,最多重试 1~2 次。这就是为什么 SanguoKgRecallEvalTest 的链路可复用到 KagGraphLLMQATest。

    召回评测怎么看?为什么能指导 KAG?

    评测集中的问题基本都是'章回定位'类,比如'桃园结义是哪一回?'、'草船借箭是哪一回?'。这种任务对 KAG 很友好,你只要能把问题映射成图谱查询,找到对应 Chapter 的 title / index / text,LLM 再基于 text 给出最终回答。

    评测指标是 Recall@5:标准答案是否出现在 Top5 返回结果里。它能直接反映你的图谱建模是否有效,Cypher 生成策略是否靠谱,以及命中判定是否稳定。

    下一步:从'章回定位'升级到真正 KAG

    本文的闭环是 KAG MVP,但已经为复杂问答铺好路。先做'证据召回'(KG → Chapter/Text),再做'证据生成'(LLM summarization / reasoning)。你后面可以继续扩展多跳查询、关系约束,或者图谱 + 向量混合检索:KG 决定范围,RAG 提供长证据。

    常见坑位排雷

    • LLM 响应解析:一定要从 OpenAI 兼容结构里取 choices[0].message.content,否则你会把 error 当 content 用。
    • 关系 type 中文化:如果 relation type 输出英文,Neo4j relationshipTypes 会爆炸增长,后续召回更难。
    • Chapter 元数据必须写进 KG JSON:否则你只有实体,没有'章回锚点',无法做章回召回评测。

    结语

    很多 KAG 文章停留在概念图,但真正工程上,最难的是图谱 schema 不统一、查询不可控、LLM 生成 Cypher 经常报错、没评测就没迭代方向。这套 JUnit 流程解决的恰恰是这些落地问题。如果你也在做 GraphRAG、KGQA 或 Neo4j + 大模型,这套闭环可以直接作为你的工程起点。

    目录

    1. 为什么要做 KAG?我遇到的痛点
    2. 工程结构:5 个测试类 + 1 个评测集
    3. 评测集
    4. 抽取:LlmKgExtractTest
    5. 入库:KgNeo4jImportTest
    6. Schema 获取:Neo4jSchemaIntrospectTest
    7. 召回评测:SanguoKgRecallEvalTest
    8. KAG 问答:KagGraphLLMQATest
    9. 环境准备
    10. 推荐执行顺序
    11. 两个最关键的工程经验
    12. 1. 让 LLM 生成 Cypher,必须先喂“真实 schema”
    13. 2. LLM 生成的 Cypher 必须预检 + 自动修复
    14. 召回评测怎么看?为什么能指导 KAG?
    15. 下一步:从“章回定位”升级到真正 KAG
    16. 常见坑位排雷
    17. 结语
    • 免费图片AI生成工具免费生成了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
    • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
    • 100+免费在线小游戏爽一把
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • 机器学习:聚类分析算法原理与分类
    • C++ 容器适配器详解:Stack、Queue、Priority Queue 与 Deque
    • Python YAML 模块实战:接口测试参数存储与配置管理
    • MySQL 主从复制架构详解
    • 主流开源数字人技术对比与选型指南
    • Linux 系统下安装配置 Nginx
    • OpenClaw 与 Claude Code、Cursor、Copilot 的区别
    • 如何为前端项目编写优秀的 AI Agent Skills
    • 使用 Jenkins Pipeline 自动化构建与部署 Java 项目
    • 使用 Higress 将现有 REST API 转换为 MCP Server 工具
    • baoyu-skills:使用 AI 辅助技术文章配图与排版
    • Trae 配置 C++ 编译环境实战指南
    • 如何构建高质量的大模型 RAG 系统
    • Linux 管道机制与 Java finally 执行逻辑解析
    • 流处理与 RAG 驱动的 Python ETL 框架设计
    • icomet-server:基于 C++ 的高并发推送服务
    • 无人机视角高速路面损害检测数据集与 YOLOv8 训练实战
    • 2025 年 12 月 GESP C++ 一级真题解析
    • OpenClaw+Polymarket AI 套利系统全栈实战指南
    • AI Agent 架构:基础组成模块深度解析

    相关免费在线工具

    • Keycode 信息

      查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

    • Escape 与 Native 编解码

      JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

    • JavaScript / HTML 格式化

      使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

    • JavaScript 压缩与混淆

      Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online