惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
D
Docker
The Cloudflare Blog
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
月光博客
月光博客
B
Blog RSS Feed
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
B
Blog
IT之家
IT之家
美团技术团队
Engineering at Meta
Engineering at Meta
C
Check Point Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
S
SegmentFault 最新的问题
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
U
Unit 42
H
Help Net Security
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
PCI Perspectives
PCI Perspectives
J
Java Code Geeks
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
腾讯CDC
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes
量子位
C
CXSECURITY Database RSS Feed - CXSecurity.com
Latest news
Latest news
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
Schneier on Security
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 哥本哈士奇(aspnetx)

SQL Server 索引知识汇总 医疗器械行业 Salesforce Territory 完整落地实例 Raw Data Vault vs Business Data Vault Neo4j 多跳查询实战:从社交网络场景理解图遍历 Git 本地版本管理学习笔记 看完《低智商犯罪》,学习Cypher构建知识图谱 LangChain DeepAgents 学习笔记 LangChain Deepagent 版本0.6.1中间件一个bug Neo4j笔记(五):查询的处理流程 微软 SQL Server 版本演进史:从诞生到 SQL Server 2025 提升 Text2SQL 准确率 SQLServer Management Studio(SSMS) 22 Copilot 最佳实践学习笔记 SQLServer RAG笔记4:从服务层到前端交互 SQLServer RAG笔记5:为SQLServer 2025配置Ollama SQL Server RAG 笔记3:SQLServer2025 向量数据库 详解传统RAG、Text2SQL、Graph RAG:适用场景与问题示例汇总 SQL Server RAG 笔记2:图数据库服务层与前端可视化构建 SQL Server RAG 笔记1:图数据库构建 数据仓库笔记 第六篇:PSA 层 SCD2 处理方式 数据仓库笔记 第五篇:Data Mart 层(数据集市) 数据仓库笔记 第四篇:Star Schema 层(维度建模) 数据仓库笔记 第三篇:常用缓慢变化维处理方式介绍 数据仓库笔记 第二篇:PSA 层(持久化暂存区)详解 数据仓库笔记 第一篇:数据仓库的定义、历史与意义 Neo4j 笔记(三):数据建模与程序连接实战 Neo4j 基础教程(二):Cypher CRUD 完全指南 Neo4j 基础教程(一):安装与快速入门 Power BI学习笔记第20篇:面试题汇总 · 第三篇:高级应用与最佳实践篇 Power BI学习笔记第19篇:面试题汇总 · 第二篇:数据建模与 DAX 篇 Power BI学习笔记第18篇:面试题汇总 · 第一篇:基础概念篇 Power BI学习笔记第15篇:企业级报表开发与最佳实践 Power BI学习笔记第13篇:高级可视化与自定义图表 Power BI学习笔记第14篇:Power Query 高级数据处理 Power BI学习笔记第12篇:DAX 高级计算与性能优化 Power BI学习笔记第11篇:高级数据建模与关系设计 Power BI学习笔记第10篇:实战案例 — 销售数据分析仪表板 Power BI学习笔记第08篇:报表交互与筛选器 Power BI学习笔记第09篇:Power BI Service 发布与共享 Power BI学习笔记第07篇:可视化图表设计与最佳实践 Power BI学习笔记第06篇:DAX 进阶:时间智能与复杂计算 Power BI学习笔记第05篇:DAX 基础:计算列与度量值 Power BI学习笔记第04篇:数据建模与关系管理 Power BI学习笔记第03篇:Power Query 数据清洗与转换 Power BI学习笔记第02篇:数据获取与连接数据源 Power BI学习笔记第01篇:Power BI 简介与环境搭建 Power BI Dashboard 常用布局方案推荐 Power BI 示例一览 OpenClaw 核心八大 MD 文件 Microsoft Agent Framework 智能体调用工具 Microsoft Agent Framework 创建智能体 一个简单案例理解OpenClaw的做梦过程 SQLAlchemy 学习笔记 LangChain RAG索引与查询 - 学习笔记 LangChain使用deep agent并且加载SKILL 本地系统对接大模型智能体的若干尝试 财务分析报告 - 常用Power BI DAX公式详解 用SKILL实现请假流程信息收集 使用小龙虾来操作猿编程的遥控车 使用OpenClaw的Skills对接本地系统 OpenClaw必装Skill全指南 Dify Agentic RAG 笔记 # 简单的神经网络计算过程 - 正负判断 使用Gradio构建AI前端 - RAG的QA模块 使用Gradio构建AI前端 - RAG召回测试 Streamlit + LangChain 1.0 简单实现智能问答前后端 利用AI Agent,辅助销售团队制定培训和考试内容 实现AI和BI整合的初步思路和探索-Part3 实现AI和BI整合的初步思路和探索-Part2 实现AI和BI整合的初步思路和探索 以《出师表》作为例子,对比通用分块和父子分块的区别 LangChain RAG 学习笔记:从文档加载到问答服务 记录无法修改OneDrive文件的解决方法 Power BI制作指标达成跟踪器 Power BI学习笔记-周报销售数据分析
Neo4j 笔记(四):一篇文章如何入库的
哥本哈士奇(aspnetx) · 2026-04-29 · via 博客园 - 哥本哈士奇(aspnetx)

摘要

一直很好奇,一篇文章是如何进入到图数据库的,毕竟一篇文章啥格式都有,而写入到图数据库还必须遵从规则和语法,所以这注定不是一个普通RAG或者SQL的过程。此篇讲带大家一起看一下这里都需要经历哪些过程。

Graph RAG 把文章变成 Neo4j 数据,一共 4 步:

  1. 从文章里抽实体(人、公司、地点、产品、时间…)
  2. 抽实体之间的关系(A 工作于 B、C 位于 D、E 认识 F…)
  3. 生成节点 + 关系(Node + Relationship)
  4. 批量写入 Neo4j(CREATE / MERGE)

最终在 Neo4j 里形成一张知识图谱,RAG 检索时就可以沿着关系查上下文。

我们用一段超短新闻做演示:

张三在2023年加入了字节跳动,担任算法工程师。
李四是张三的同事,他们都在北京工作。

以上的超短新闻,要想配合入图数据库,首先是需要抽象出以下信息。

实体(Nodes)

  • 张三 (Person)
  • 李四 (Person)
  • 字节跳动 (Company)
  • 北京 (Location)

关系(Relationships)

  • 张三 ——WORKS_AT——> 字节跳动
  • 张三 ——COLLEAGUE_OF——> 李四
  • 张三 ——WORKS_IN——> 北京
  • 李四 ——WORKS_IN——> 北京

属性

  • 张三:age=None, job=算法工程师, join_year=2023

实体,关系,属性信息都确认了之后,就可以通过以下语句入库了。

// 创建节点
MERGE (p1:Person {name:"张三"}) SET p1.job="算法工程师", p1.join_year=2023
MERGE (p2:Person {name:"李四"})
MERGE (c:Company {name:"字节跳动"})
MERGE (l:Location {name:"北京"})

// 创建关系
MERGE (p1)-[:WORKS_AT]->(c)
MERGE (p1)-[:COLLEAGUE_OF]->(p2)
MERGE (p1)-[:WORKS_IN]->(l)
MERGE (p2)-[:WORKS_IN]->(l)

为什么用 MERGE 不用 CREATE?

  • CREATE:重复执行会重复创建节点
  • MERGE:不存在则创建,存在则更新 → Graph RAG 标准写法

那么如何把文章里的信息是如何抽象出的实体和关系呢,直接说过程:文章不是人工转的,是 LLM 自动转的!

下面是真实工程化流程

首先,给大模型的提示词

你是知识图谱抽取专家。请从文本中抽取:
1. 实体(类型:Person, Company, Location, Organization)
2. 关系(只能用:WORKS_AT, COLLEAGUE_OF, WORKS_IN, FOUNDER_OF)

输出格式严格JSON:
{
  "nodes": [{"label":"Person", "name":"张三", "attributes":{"job":"算法工程师"}}],
  "relations": [{"from":"张三", "to":"字节跳动", "type":"WORKS_AT"}]
}

文本:
张三在2023年加入了字节跳动,担任算法工程师。李四是张三的同事,他们都在北京工作。

以上提示词可以放在任何工具里测试,包括龙虾,豆包等。

实体和关系总结出来了,可以看到结果如下:

{
  "nodes": [
    {"label":"Person","name":"张三","attributes":{"job":"算法工程师","join_year":2023}},
    {"label":"Person","name":"李四","attributes":{}},
    {"label":"Company","name":"字节跳动","attributes":{}},
    {"label":"Location","name":"北京","attributes":{}}
  ],
  "relations": [
    {"from":"张三","to":"字节跳动","type":"WORKS_AT"},
    {"from":"张三","to":"李四","type":"COLLEAGUE_OF"},
    {"from":"张三","to":"北京","type":"WORKS_IN"},
    {"from":"李四","to":"北京","type":"WORKS_IN"}
  ]
}

注:如果模型是在线API,那么基本上都能按照要求做出指定的输出,如果是本地部署的模型,参数量比较低的话,输出可能会走样。

最后,通过python代码自动把 JSON 转成 Cypher 写入 Neo4j

from neo4j import GraphDatabase

# 连接 Neo4j
uri = "bolt://localhost:7687"
user = "neo4j"
password = "your-password"
driver = GraphDatabase.driver(uri, auth=(user, password))

# 从LLM拿到的知识图谱数据
data = { ...上面的JSON... }

# 写入节点
for node in data["nodes"]:
    if node["attributes"]:
        attrs = ", ".join([f"{k}: '{v}'" for k, v in node["attributes"].items()])
        cypher = f"MERGE (n:{node['label']} {{name:'{node['name']}', {attrs}}})"
    else:
        cypher = f"MERGE (n:{node['label']} {{name:'{node['name']}'}})"
    driver.session().run(cypher)

# 写入关系
for rel in data["relations"]:
    cypher = f"""
    MATCH (a {{name:'{rel['from']}'}}), (b {{name:'{rel['to']}'}})
    MERGE (a)-[:{rel['type']}]->(b)
    """
    driver.session().run(cypher)

运行完,一篇文章就变成知识图谱了!

img


最终效果(Neo4j 里看到的图)
你会看到:

  • 张三、李四、字节跳动、北京
  • 它们之间用箭头连起来
  • Graph RAG 检索时就能沿着关系推理

最后再说一种更简单粗暴的方法,跳过大模型生成JSON和python的JSON遍历,直接让大模型生成语句。

你是知识图谱抽取专家。请从文本中抽取实体和关系信息,直接帮我生成neo4j的cypher语句。

文本:
张三在2023年加入了字节跳动,担任算法工程师。李四是张三的同事,他们都在北京工作。

然后在python里直接run生成的查询就可以了。

总结

大模型技术的成熟让图数据库落地应用变得更容易。此篇简单的汇总了一篇文章是如何进入到图数据库的。下一篇会总结一个比较完整的实现。