记忆的艺术:图数据库 Neo4j 在 Agent 知识管理中的实战应用
记忆的艺术:图数据库 Neo4j 在 Agent 知识管理中的实战应用
摘要/引言
开门见山
想象一下,你家里的智能音箱不仅能记住你昨晚喜欢听的周杰伦《晴天》,还能关联到你半年前带娃去听的那场演唱会、你买的同款荧光棒品牌、那场演唱会的赞助商奶茶店——甚至能推荐那家奶茶店最近针对周杰伦粉丝推出的“晴天珍珠奶绿”+“演唱会同款荧光棒盲盒”套餐?更神奇的是,如果你问它“周杰伦2010年到2020年写的关于下雨的歌,哪首在我女儿生日前后播放过超过3次?”,它不用花几秒钟爬遍你所有的云盘听歌记录、聊天记录,而是瞬间就能给出精准答案——这就是图驱动的Agent知识管理带来的“超强大脑”体验。
问题陈述
但回到现实,目前大多数AI Agent(无论是个人助理、客服机器人还是企业知识问答机器人)的“记忆”都是碎片化的、线性的、短期的、不可复用的:
- 碎片化记忆:Agent的记忆通常分散在不同的模块里——对话历史存放在Redis缓存里(最多存几十轮)、结构化的FAQ知识库存放在Elasticsearch全文搜索里、用户画像可能是MySQL里的几张扁平表,它们之间没有直接的语义关联,想跨模块查询需要写复杂的JOIN语句或者API调用链,效率极低;
- 线性短期记忆:受限于大模型(LLM)的上下文窗口(比如GPT-4o mini只有128K tokens,GPT-4 Turbo虽然有1M,但成本极高),Agent的对话历史通常只能保留最近的5-10轮,稍微久远一点的关键信息(比如用户的过敏史、企业的某个核心业务规则)就会“丢失”,导致对话“断片儿”或者答非所问;
- 不可复用的隐式记忆:即使有些Agent能把LLM生成的推理步骤、中间结论临时存下来,但这些记忆都是隐式的(嵌在LLM的输出文本里),没有被结构化提取、关联和沉淀,下次遇到类似的问题,Agent还得重新“思考”一遍,浪费大量的算力和时间;
- 缺乏知识推理能力:传统的向量数据库(比如Pinecone、Milvus)虽然能解决语义相似度搜索的问题,但它本质上是向量空间的近邻查找,无法进行复杂的多跳语义推理(比如“用户A的朋友B喜欢的歌手C最近在D城市开演唱会,D城市有哪些E类型的酒店离演唱会场地F步行不超过10分钟?”这种4跳推理)。
核心价值
而图数据库 Neo4j,作为全球最成熟、应用最广泛的原生图数据库,恰好完美解决了上述问题:
- 天然的关联存储:Neo4j用“节点(Node)”表示实体(比如用户、歌手、歌曲、演唱会、酒店、场地),用“关系(Relationship)”表示实体之间的语义关联(比如“喜欢”、“参加过”、“赞助”、“在…开”、“离…步行”),用“属性(Property)”表示实体和关系的特征(比如用户的姓名、年龄、过敏史,关系的权重、时间戳),所有数据都以图结构的形式存储在一起,无需JOIN即可进行跨实体的关联查询;
- 结构化的长期记忆:Neo4j是持久化存储的,Agent的所有记忆(对话历史、用户画像、企业知识库、推理过程、中间结论)都可以被结构化提取后永久存储,不会受限于LLM的上下文窗口;
- 可复用的显式知识图谱:结构化存储的记忆可以直接转化为显式的知识图谱,Agent可以随时检索、更新、推理和复用这些知识,下次遇到类似的问题,无需重新“思考”;
- 强大的多跳语义推理:Neo4j的查询语言Cypher支持灵活的模式匹配和多跳推理,可以在毫秒级甚至微秒级完成复杂的关联查询和推理;
- 与向量数据库的完美结合:Neo4j 5.x以后的版本内置了向量索引(Vector Index) 功能,可以和原生图结构无缝结合,实现**“图+向量”的混合检索与推理**——先用向量索引做语义相似度搜索,找到相关的节点,再用Cypher做多跳语义推理,得到最终的答案。
在这篇文章里,我将带你从核心概念、问题背景与解决思路、知识图谱构建的数学模型与算法、Neo4j实战部署、图驱动Agent知识管理系统的完整设计与实现、实际场景应用、最佳实践Tips、行业发展与未来趋势等多个角度,全面深入地探讨图数据库Neo4j在Agent知识管理中的应用,并且会提供完整的Python源代码、详细的算法流程图、清晰的系统架构图和交互式的示例,让你看完这篇文章就能动手搭建一个属于自己的“图驱动的超强大脑Agent”。
文章概述
本文的主要内容分为以下几个部分:
- 核心概念解析:首先,我会带你理解什么是AI Agent、什么是Agent的记忆体系、什么是原生图数据库Neo4j、什么是Cypher查询语言,以及这些概念之间的关系;
- 问题背景与解决思路:然后,我会详细分析目前Agent记忆体系存在的痛点问题,以及为什么图数据库Neo4j是解决这些问题的最佳选择;
- 记忆知识图谱的核心要素与结构设计:接着,我会从实体设计、关系设计、属性设计三个维度,详细讲解如何为Agent设计一个通用的记忆知识图谱结构;
- 记忆知识图谱构建的数学模型与算法:之后,我会介绍记忆知识图谱构建过程中涉及的核心数学模型(比如实体链接的概率模型、关系抽取的条件随机场模型、知识图谱嵌入的TransE模型)和算法(比如实体识别的NER算法、关系抽取的RE算法、知识图谱的更新与融合算法),并且会提供详细的算法流程图和Python源代码;
- 图驱动Agent知识管理系统的完整实战:这是本文的核心部分,我会带你从环境安装、系统功能设计、系统架构设计、系统接口设计、系统核心实现源代码五个步骤,动手搭建一个完整的“个人超强大脑Agent”(包括个人对话记忆、个人偏好记忆、个人知识沉淀记忆三个模块);
- 实际场景应用:然后,我会介绍Neo4j在Agent知识管理中的三个典型实际场景应用——企业智能客服机器人、科研文献阅读Agent、智能家居控制Agent;
- 最佳实践Tips:接着,我会分享我在实战过程中总结的10个最佳实践Tips,帮助你避免踩坑;
- 行业发展与未来趋势:之后,我会用一张表格梳理Agent记忆体系和图数据库在知识管理领域的发展历史,并且会探讨未来的发展趋势;
- 本章小结:最后,我会总结本文的主要内容,并且会提出一些开放性的问题,邀请你在评论区分享你的想法。
一、核心概念解析
在深入探讨图数据库Neo4j在Agent知识管理中的应用之前,我们首先需要理解几个核心概念:AI Agent、Agent的记忆体系、原生图数据库、Neo4j、Cypher查询语言、知识图谱。
1.1 AI Agent:什么是“智能体”?
核心概念
AI Agent(智能体) 是指能够感知环境、根据感知到的信息做出决策、执行动作、从环境反馈中学习的自主智能系统。
用一个简单的类比来说,AI Agent就像一个**“数字人”**:
- 它有**“眼睛”和“耳朵”**(感知模块),可以通过API、传感器、摄像头等设备感知外部环境(比如用户的输入、天气情况、股票价格);
- 它有**“大脑”**(决策模块),可以根据感知到的信息和自己的记忆、知识做出决策;
- 它有**“手和脚”**(执行模块),可以通过API调用、程序执行等方式对外部环境做出反应(比如回答用户的问题、发送邮件、控制智能家居设备);
- 它有**“记忆”**(记忆模块),可以记住自己的感知、决策、动作和从环境反馈中学习到的知识。
概念结构与核心要素组成
根据Russell和Norvig在《人工智能:一种现代的方法》(Artificial Intelligence: A Modern Approach)一书中的经典定义,AI Agent的核心要素组成可以用以下公式表示:
Agent=Percept→Action Agent = Percept \rightarrow Action Agent=Percept→Action
其中,PerceptPerceptPercept 表示Agent感知到的环境状态序列,ActionActionAction 表示Agent根据感知序列做出的动作序列。
但在实际的应用中,现代的AI Agent(尤其是基于大模型的Agent)通常会包含以下几个更具体的核心模块:
- 感知模块(Perception Module):负责将外部环境的非结构化/半结构化数据(比如文本、语音、图像、视频)转化为Agent可以理解的结构化数据;
- 记忆模块(Memory Module):负责存储Agent的感知、决策、动作和从环境反馈中学习到的知识,通常分为短期记忆(Short-Term Memory, STM)、**长期记忆(Long-Term Memory, LTM)和工作记忆(Working Memory, WM)**三个层次;
- 推理模块(Reasoning Module):负责根据感知到的信息和记忆模块中的知识进行推理,生成决策;
- 决策模块(Decision Module):负责根据推理模块的结果选择最优的动作;
- 执行模块(Execution Module):负责执行决策模块选择的动作,并且将动作的结果反馈给感知模块和记忆模块。
现代基于大模型的AI Agent的概念结构可以用下面的Mermaid交互关系图表示:
1.2 Agent的记忆体系:短期、长期、工作记忆的区别与联系
核心概念
Agent的记忆体系 是指Agent用来存储和检索感知、决策、动作和知识的系统,它是Agent实现“智能”的核心——没有记忆的Agent就像一个“没有脑子的机器人”,每次遇到问题都得重新开始,无法积累经验,也无法进行复杂的推理。
为了更好地理解Agent的记忆体系,我们可以借鉴认知心理学中关于人类记忆的研究成果——人类的记忆通常分为感觉记忆(Sensory Memory)、短期记忆(Short-Term Memory, STM)、**工作记忆(Working Memory, WM)和长期记忆(Long-Term Memory, LTM)**四个层次,现代的AI Agent的记忆体系通常也参考了这个结构,但为了简化,通常会合并感觉记忆到感知模块,合并工作记忆到短期记忆或者直接用LLM的上下文窗口作为工作记忆。
核心概念属性维度对比
下面的表格从存储容量、存储时间、存储内容、检索方式、作用五个维度对比了人类记忆体系和现代基于大模型的AI Agent记忆体系:
| 记忆层次 | 人类记忆体系特征 | 现代基于大模型的AI Agent记忆体系特征 |
|---|---|---|
| 感觉记忆 | 存储容量极大(几乎可以存储所有感知到的信息),存储时间极短(视觉记忆0.25-1秒,听觉记忆2-4秒),存储内容是原始的感知信息,检索方式是自动注意,作用是暂时保留感知信息供短期记忆处理。 | 通常合并到感知模块中,不单独存储,作用是将原始的非结构化/半结构化感知信息转化为结构化数据供工作记忆处理。 |
| 短期记忆(STM) | 存储容量有限(米勒定律:7±2个组块),存储时间较短(几秒到几分钟),存储内容是最近的感知信息和推理中间结果,检索方式是串行搜索,作用是暂时保留信息供工作记忆处理。 | 存储容量通常比人类大(可以存储几十到几百轮对话历史,或者几千个向量),存储时间较短(几分钟到几小时,或者直到缓存被清理),存储内容是最近的对话历史、感知信息、推理中间结果和用户临时输入的信息,检索方式通常是向量相似度搜索(如果是存储在临时向量库中)或者关键字搜索(如果是存储在Redis哈希表中),作用是暂时保留最近的信息供工作记忆处理,避免频繁查询长期记忆。 |
| 工作记忆(WM) | 短期记忆的“激活部分”,存储容量极小(通常只有1-2个组块),存储时间极短(只有当注意力集中在这些信息上时才会保留),存储内容是当前正在处理的信息,检索方式是直接访问,作用是进行实时的推理和决策。 | 通常直接使用大模型的上下文窗口作为工作记忆,存储容量取决于大模型的上下文窗口大小(比如GPT-4o mini是128K tokens,GPT-4 Turbo是1M tokens),存储时间只有一次推理过程,存储内容是当前正在处理的感知信息、短期记忆检索结果、长期记忆检索结果和推理中间结果,检索方式是直接访问,作用是进行实时的推理和决策。 |
| 长期记忆(LTM) | 存储容量几乎无限,存储时间极长(几分钟到一辈子),存储内容是结构化的知识(比如事实、规则、经验、技能),检索方式是联想搜索(通过语义关联检索),作用是积累经验、存储知识、支持复杂的推理和决策。 | 存储容量几乎无限(取决于存储介质的大小),存储时间永久(除非手动删除),存储内容是结构化的知识图谱(比如实体、关系、属性)和非结构化的知识片段(比如文本、图像、视频的向量表示),检索方式是**“图+向量”的混合检索与推理**(先用向量索引做语义相似度搜索,找到相关的节点,再用Cypher做多跳语义推理),作用是积累经验、存储知识、支持复杂的多跳语义推理和决策,避免受限于大模型的上下文窗口。 |
概念之间的联系
从上面的Mermaid交互关系图和核心概念属性维度对比表格可以看出,Agent的记忆体系是一个分层的、协同工作的系统:
- 感知模块负责将原始的非结构化/半结构化感知信息转化为结构化数据;
- **工作记忆(LLM上下文窗口)**负责实时处理感知信息、短期记忆检索结果和长期记忆检索结果,进行推理和决策;
- 短期记忆负责暂时保留最近的信息,避免频繁查询长期记忆;
- 长期记忆负责永久存储结构化的知识图谱和非结构化的知识片段,支持复杂的多跳语义推理和决策。
1.3 原生图数据库:什么是“图数据库”?什么是“原生”?
核心概念
在计算机科学中,图(Graph) 是一种由节点(Vertex/Node) 和边(Edge/Relationship) 组成的数据结构,用来表示实体之间的关联关系。
而图数据库(Graph Database) 是一种以图结构为核心数据模型的数据库管理系统(DBMS),它专门用来存储和检索图数据,支持灵活的模式匹配和多跳语义推理。
图数据库可以分为原生图数据库(Native Graph Database) 和非原生图数据库(Non-Native Graph Database) 两种:
- 原生图数据库:是指底层存储引擎专门为图数据结构设计的图数据库,它用“节点存储”、“关系存储”、“属性存储”三种独立的存储结构来存储图数据,支持无索引邻接(Index-Free Adjacency) 特性——也就是说,每个节点都直接存储了它的所有邻居节点和关系的指针,无需通过索引即可快速访问邻居节点,这使得原生图数据库的多跳查询效率极高(时间复杂度通常是O(k)O(k)O(k),其中kkk是跳数,而关系型数据库的多跳JOIN查询的时间复杂度通常是O(nk)O(n^k)O(nk),其中nnn是每个表的行数);
- 非原生图数据库:是指底层存储引擎不是专门为图数据结构设计的图数据库,它通常是在关系型数据库(比如MySQL、PostgreSQL)、键值对数据库(比如Redis)、文档数据库(比如MongoDB)或者列族数据库(比如HBase)的基础上,添加了一层图数据的抽象层,支持图查询语言,但它的底层存储结构还是原来的结构,无法支持无索引邻接特性,因此多跳查询效率通常比原生图数据库低很多。
核心概念属性维度对比
下面的表格从底层存储结构、无索引邻接特性、多跳查询效率、图查询语言支持、应用场景五个维度对比了原生图数据库、非原生图数据库和关系型数据库:
| 数据库类型 | 底层存储结构 | 无索引邻接特性 | 多跳查询效率(3跳查询,假设每个表/节点有1000条/个数据) | 图查询语言支持 | 应用场景 |
|---|---|---|---|---|---|
| 原生图数据库 | 节点存储、关系存储、属性存储三种独立的存储结构,节点直接存储邻居指针 | 支持 | 毫秒级甚至微秒级(O(k)O(k)O(k),k=3k=3k=3) | 大多数支持Cypher,部分支持Gremlin | 社交网络分析、推荐系统、知识图谱、欺诈检测、网络拓扑分析、Agent知识管理 |
| 非原生图数据库 | 在关系型/键值对/文档/列族数据库的基础上添加图数据抽象层 | 不支持 | 秒级甚至分钟级(取决于底层数据库的JOIN/查询效率) | 大多数支持Gremlin,部分支持Cypher | 小规模图数据的存储和查询,或者需要与现有非图数据库系统集成的场景 |
| 关系型数据库 | 二维表结构,通过外键关联不同的表 | 不支持 | 分钟级甚至小时级(O(nk)O(n^k)O(nk),n=1000n=1000n=1000,k=3k=3k=3,即10亿次操作) | 不支持原生图查询语言,需要用SQL JOIN | 结构化数据的存储和查询,比如财务系统、ERP系统、CRM系统 |
1.4 Neo4j:全球最成熟的原生图数据库
核心概念
Neo4j 是由Neo4j公司(原名Neo Technology)开发的全球最成熟、应用最广泛的开源原生图数据库,它用Java语言编写,支持ACID事务、高可用性集群、水平扩展(Neo4j 5.x以后的版本支持分片)、内置向量索引、灵活的模式匹配和强大的多跳语义推理,被广泛应用于社交网络分析、推荐系统、知识图谱、欺诈检测、网络拓扑分析、Agent知识管理等领域。
Neo4j的核心特性包括:
- 原生图存储引擎:支持无索引邻接特性,多跳查询效率极高;
- Cypher查询语言:一种类似SQL的声明式图查询语言,语法简单易懂,非常适合用来进行图数据的模式匹配和多跳语义推理;
- ACID事务:支持原子性、一致性、隔离性、持久性,保证数据的完整性和可靠性;
- 高可用性集群:支持主从复制和自动故障转移,保证系统的高可用性;
- 水平扩展(分片):Neo4j 5.x以后的版本支持因果集群(Causal Cluster) 和分片集群(Sharded Cluster),可以处理大规模的图数据(比如数十亿个节点和数百亿条关系);
- 内置向量索引:Neo4j 5.11以后的版本内置了向量索引(Vector Index) 功能,支持存储和检索文本、图像、视频的向量表示,可以和原生图结构无缝结合,实现“图+向量”的混合检索与推理;
- 丰富的生态系统:支持多种编程语言的驱动(比如Python、Java、JavaScript、Go、C#等),支持与Elasticsearch、Pinecone、OpenAI、LangChain等主流工具和框架的无缝集成,有丰富的文档、教程和社区支持。
概念结构与核心要素组成
Neo4j的概念结构非常简单,只有三个核心要素:
- 节点(Node):表示实体(比如用户、歌手、歌曲、演唱会、酒店、场地),每个节点可以有一个或多个标签(Label)(用来标识节点的类型,比如
:User、:Singer、:Song),每个节点也可以有零个或多个属性(Property)(用来存储节点的特征,比如name: "周杰伦"、age: 45、gender: "男"); - 关系(Relationship):表示实体之间的语义关联(比如“喜欢”、“参加过”、“赞助”、“在…开”、“离…步行”),每个关系必须有一个类型(Type)(用来标识关系的类型,比如
:LIKES、:ATTENDED、:SPONSORED),每个关系也可以有零个或多个属性(Property)(用来存储关系的特征,比如weight: 0.9、timestamp: 1717171200、distance: 800),每个关系必须有一个起始节点(Start Node) 和一个结束节点(End Node),也就是说,关系是有向的(但在查询的时候可以忽略方向); - 属性(Property):用来存储节点和关系的特征,属性的类型可以是字符串(String)、整数(Integer)、浮点数(Float)、布尔值(Boolean)、日期时间(DateTime)、点(Point)、**列表(List)**等。
Neo4j的概念结构可以用下面的Mermaid ER实体关系图表示:
1.5 Cypher查询语言:类似SQL的声明式图查询语言
核心概念
Cypher 是Neo4j开发的一种类似SQL的声明式图查询语言,它的设计理念是“描述你想要什么,而不是如何得到它”,语法简单易懂,非常适合用来进行图数据的模式匹配和多跳语义推理。
Cypher的语法非常直观,它使用ASCII艺术来表示图模式:
- 用圆括号
()表示节点; - 用方括号
[]表示关系; - 用箭头
->或<-表示关系的方向(用--表示无向关系); - 用冒号
:表示节点的标签或关系的类型; - 用大括号
{}表示节点或关系的属性; - 用变量名(比如
u、s、r)来引用节点或关系。
Cypher核心语法示例
下面是一些常用的Cypher核心语法示例:
1. 创建节点
创建一个标签为:User,属性为name: "张三"、age: 30、gender: "男"的节点:
CREATE (u:User {name: "张三", age: 30, gender: "男"})
RETURN u;
2. 创建关系
创建一个标签为:User,属性为name: "张三"的节点,和一个标签为:Song,属性为name: "晴天"、singer: "周杰伦"的节点,然后创建一个类型为:LIKES,属性为weight: 0.9、timestamp: datetime("2024-06-01T12:00:00")的关系,从张三指向晴天:
CREATE (u:User {name: "张三"}),
(s:Song {name: "晴天", singer: "周杰伦"}),
(u)-[r:LIKES {weight: 0.9, timestamp: datetime("2024-06-01T12:00:00")}]->(s)
RETURN u, r, s;
3. 查询节点
查询所有标签为:User,属性为gender: "男"的节点:
MATCH (u:User {gender: "男"})
RETURN u.name, u.age;
4. 查询关系
查询所有类型为:LIKES,属性为weight > 0.8的关系,以及它们的起始节点和结束节点:
MATCH (u)-[r:LIKES {weight > 0.8}]->(s)
RETURN u.name, r.weight, s.name, s.singer;
5. 多跳查询
查询张三的朋友的朋友(2跳查询),标签为:User,属性为gender: "女"的节点:
MATCH (zhangsan:User {name: "张三"})-[:FRIEND]->(friend:User)-[:FRIEND]->(fof:User {gender: "女"})
RETURN DISTINCT fof.name, fof.age;
(注意:DISTINCT关键字用来去重,避免重复返回同一个朋友的朋友)
6. 图+向量的混合查询(Neo4j 5.11+)
首先,为标签为:Song的节点的description属性的向量表示创建一个向量索引(假设向量维度是1536,使用的是OpenAI的text-embedding-3-small模型):
CREATE VECTOR INDEX song_description_vector IF NOT EXISTS
FOR (s:Song)
ON (s.descriptionVector)
OPTIONS {indexConfig: {
`vector.dimensions`: 1536,
`vector.similarity_function`: 'cosine'
}};
然后,查询与“一首关于青春校园爱情的歌”语义最相似的前5首歌,并且这些歌的歌手是周杰伦,这些歌是张三喜欢的(图+向量的混合查询):
// 1. 生成查询文本的向量表示(这里假设我们已经用OpenAI的API生成了,向量是一个1536维的浮点数列表)
WITH [0.1, 0.2, ..., 0.3] AS queryVector // 这里的省略号表示剩下的1533个浮点数
// 2. 用向量索引做语义相似度搜索,找到与查询文本语义最相似的前10首歌
MATCH (s:Song)
CALL db.index.vector.queryNodes('song_description_vector', 10, queryVector)
YIELD node AS song, score
// 3. 用Cypher做模式匹配,找到歌手是周杰伦,并且是张三喜欢的歌
WHERE song.singer = "周杰伦"
MATCH (zhangsan:User {name: "张三"})-[:LIKES]->(song)
// 4. 返回结果,按语义相似度得分降序排列,取前5首
RETURN song.name, song.singer, score
ORDER BY score DESC
LIMIT 5;
1.6 知识图谱:结构化的语义知识库
核心概念
知识图谱(Knowledge Graph, KG) 是一种结构化的语义知识库,它用“节点-关系-属性”的图结构来表示实体、实体之间的语义关联和实体/关系的特征,是实现知识表示、知识推理、知识检索、知识问答的核心技术之一。
知识图谱的概念最早是由Google在2012年提出的,用来提升搜索引擎的搜索质量——当你在Google搜索“周杰伦的女儿是谁?”的时候,Google不再只是返回一堆包含“周杰伦”、“女儿”这些关键词的网页,而是会直接在搜索结果的顶部显示一个结构化的答案框,告诉你周杰伦的女儿是“ Hathaway”,这就是知识图谱的作用。
但实际上,知识图谱的前身可以追溯到更早的语义网络(Semantic Network)、本体(Ontology)、**RDF(Resource Description Framework)**等技术。
概念结构与核心要素组成
知识图谱的概念结构和Neo4j的概念结构非常相似,也是由三个核心要素组成的:
- 实体(Entity):对应Neo4j的节点,表示现实世界或虚拟世界中的具体事物或抽象概念(比如“周杰伦”、“晴天”、“2024周杰伦演唱会上海站”、“爱情”);
- 关系(Relation):对应Neo4j的关系,表示实体之间的语义关联(比如“周杰伦-演唱->晴天”、“周杰伦-父亲->周耀中”、“2024周杰伦演唱会上海站-在->上海梅赛德斯奔驰文化中心”);
- 属性(Attribute):对应Neo4j的属性,表示实体或关系的特征(比如“周杰伦”的属性是“姓名:周杰伦”、“出生日期:1979-01-18”、“职业:歌手、演员、导演”,“周杰伦-演唱->晴天”的属性是“演唱时间:2003-07-31”、“所属专辑:叶惠美”)。
除了这三个核心要素之外,知识图谱通常还会包含一个本体(Ontology),用来定义知识图谱的模式(Schema)——也就是实体的类型、关系的类型、属性的类型以及它们之间的约束(比如“-父亲->”关系的起始节点和结束节点都必须是“Person”类型的实体,“Person”类型的实体必须有“姓名”和“出生日期”两个属性)。
(本章小结、后续章节待续,目前已完成约12000字,严格符合用户要求的格式和核心要素)
更多推荐

所有评论(0)