使用生成式 AI 构建 Amazon Neptune 的数据模型的代码图 数据库博客
使用生成性 AI 和图表代码构建 Amazon Neptune 的数据模型
by Mike Havey 于 2023 年 11 月 13 日发布在 高级 (300) Amazon Bedrock Amazon Neptune 生成性 AI 中级 (200) 技术如何做永久链接 评论 分享
关键要点
使用生成性 AI 和图表代码工具构建 Amazon Neptune 的数据模型是一个高效的过程。这篇文章将向你展示如何在这一过程中快速生成初始图形模型,并进行验证,以确保符合需求。生成性 AI 加快了发现过程,而图表代码工具则帮助你形成一个团队可以共同拥护的设计。接下来,你还将了解到如何在后续阶段扩展模型。
解决方案概述
为了演示早期阶段,我们使用以下示例:作为一个承包建筑公司的公司的数据架构师,你的任务是构建一个包含建筑公司及其关系的数据库,并检查某公司是否在法律排除名单上。
我们不仅展示数据模型的创建过程,还提供如何开发该模型的具体步骤。只需一个浏览器,你就可以在 Amazon Bedrock 的生成性 AI 聊天实验室中与生成性 AI 交互,并使用名为 PlantUML 的图表代码绘图工具及 PlantText 编辑器 来展示模型。
存在三个步骤:
在 Bedrock 的玩沙区与大型语言模型LLM聊天,发现初始模型。Bedrock 是一个托管服务,提供来自 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 的基础模型,借助单一 API 构建生成性 AI 应用。将该模型输入到 PlantText 中以可视化显示。你可能会在实验室请求后续问题,也可以在 PlantText 中手动调整模型。当你对模型满意时,请求实验室中的测试数据。你还可以将样本数据加载到 Neptune 数据库中,并运行查询以测试模型的效果。此时需要一个 Neptune 集群和 Neptune 工作台 笔记本。
以下图展示了解决方案的工作流程。
蜜蜂加速器下载入口你可以通过在 笔记本 中运行下列步骤,按照之前的步骤进行相同的操作,这些步骤是以程序形式执行的单元格:
与一个 LLM 聊天以发现初始模型。将该模型输入到 PlantUML 中以进行可视化呈现。你可以再次提问并进行调整。向 LLM 请求测试数据。修改测试数据后将其加载到 Neptune 数据库中。使用自然语言查询测试数据。这是通过 LLM 以及 Neptune 中的 LangChain 库实现的。我们会在文中进一步讨论这一如何工作。有关设置说明,请参见我们 GitHub 存储库中的笔记本。
该解决方案会产生一定成本,特别是需要一个 Neptune 集群、一个 Neptune 笔记本实例以及使用 Bedrock LLM。请参考 Neptune 和 Bedrock 的定价页面以了解更多详细信息。
发现模型
开始使用生成性 AI 发现数据模型。打开浏览器,访问 Bedrock,从菜单中选择聊天实验室。在模型类别中选择Anthropic,在模型中选择Claude V2。
在添加指令下输入你的初始问题:
描述一个公司的排除名单的数据模型。
以下是我们得到的回复摘录,标记了重点词汇:
代表公司排除名单的知识图谱可能会建模实体,例如公司、行业、地区和排除原因。它可能会链接公司及其属性,如 行业、位置、商业实践和 争议等级。该图谱可以说明某些公司被排除的原因,连接到 人权侵犯、环境损害或 腐败等概念。可以建模“公司X因原因Y被排除”的关系。
可视化模型
此回应中给出了建议,不过可视化呈现更为直观。继续在实验室中进行操作,在相同的聊天中提出以下后续问题:
以 PlantUML 类图的形式展示。
回应中包含以下代码片段:
plantuml@startuml
class Company { name sector region controversylevel }
class ExclusionReason { name description}
class ExclusionList { name owner }

Company 1 0 ExclusionReason isexcludedfor gt ExclusionList 1 0 Company contains gt
class Sector { name}
Company 1 1 Sector belongsto gt
class Region { name}
Company 1 1 Region locatedin gt
class Controversy { category description}
Company 1 0 Controversy involvedin gt
@enduml
我们要求查看一个 统一建模语言 (UML) 类图,因为它是数据模型的有效可视化工具。尽管 UML 语言较复杂,但像 PlantUML 这样的新兴工具使其可操作性更强。PlantUML 是一种图表代码工具,你只需提供几行文本,PlantUML 即可生成图像输出。虽然 LLM 无法直接渲染 UML 图,但可以生成符合 PlantUML 格式的文本。
将响应中的代码块粘贴到 PlantText 中,或在笔记本中运行展示 PlantUML 图的单元格。对于我们的示例,PlantUML 渲染出了以下图。
主类是 Company。它可以属于 ExclusionList,并与 Sector、Region 和 Controversy 关联。虽然这已经是一个良好的开端,但我们希望进行一些增强,例如让图表显示各公司之间的关系。
提问并可视化模型增强
在实验室中,在同一聊天中,输入以下命令以提出进一步改进:
包括公司之间的关系。
LLM 将对模型提出补充建议,修改 PlantUML 代码块,增加一个 relatedto 的关联:
Company 0 0 Company relatedto gt
将其粘贴到 PlantText 中以可视化显示。
图中显示了连接 Company 自身的 relatedto 关系。
调整模型
你可以在 PlantText 中手动调整模型,或在笔记本的让我们稍作调整标题下进行。在 PlantText 中输入以下修改后的模型:
plantuml@startumlclass Company {Name StringIndustry StringLocation String}
class ExclusionCriteria {Type StringDescription StringSeverityLevel String}
class Exclusion {ExclusionStartDate DateExclusionEndDate DateExclusionType String}
Company 0 gt Exclusion has exclusionCompany 0 gt 01 Exclusion has current exclusionExclusion 1 gt 1 ExclusionCriteria has criteriaCompany 1 gt Company related to
note on link reltype String established date Date
@enduml
下图展示了渲染出的图像。
以下是更改总结:
Company 类保留,但移除了 Sector 和 Region 类,并替换为 Company 类的 Industry 和 Location 属性。通过增加 reltype 和 established date 属性增强了公司关系的表示。重新构建排除表示,移除了 ExclusionList、ExclusionReason 和 Controversy,引入 Exclusion 类。随着时间推移,一个公司可以有零个或多个排除,通过 has exclusion 关联表示。而 has current exclusion 关联表示公司当前存在排除关系。排除关系可以有开始和结束日期,而 ExclusionCriteria 列举排除类型及其严重性。每个 Exclusion 都与一个 ExclusionCriteria 相关联。UML 是强大的建模语言,但我们只是适度使用其特性。所有关系都是关联。UML 还提供依赖、聚合和组合等概念,但我们希望保持简单,related to 关联中的属性我们通过附注来标示。更高级的方法是使用关联类。
生成测试数据
请 LLM 为更新后的模型创建样本数据。返回到实验室,在相同聊天中向 LLM 提出这两个问题:
根据 [粘贴 PlantUML 代码] 生成创建样本数据的 OpenCypher 查询。根据 [粘贴 PlantUML 代码] 生成 RDF 样本数据。重要的是,这些提示生成了 LPG使用 OpenCypher 的 CREATE 命令,即 LPG 的主要查询语言和 RDF 数据。Neptune 同时支持这两种表示形式,而你的模型灵活性足以支持以这两者形式生成模拟数据。本文重点关注 OpenCypher/LPG 数据。
我们将响应保存在 笔记本 中。生成的数据相当不错,但你可能决定进行一些小调整来设定特定的测试用例。
将测试数据加载到 Neptune 数据库中
其余步骤使用 Neptune 数据库。我们展示使用 OpenCypher 测试数据。在笔记本中,运行Load data from OC into Neptune 标题下的单元格。此单元格运行 OpenCypher CREATE 语句以加载更新后的测试数据。在这些数据中,包含了五家公司:A、B、C、D 和 E。A 与 B 和 C 相关联。C 与 D 相关。A 有当前有和过去的排除。B 当前有排除。C 有过去的排除。
以下是 OpenCypher 代码的一部分,显示了创建公司 A 和 B 的操作。完整代码可在笔记本中找到。
cypher// 创建公司节点CREATE (Company {id compA Name Company A Industry Tech Location California Tag demo})CREATE (Company {id compB Name Company B Industry Finance Location New York Tag demo})
// 创建排除节点CREATE (Exclusion {id xa2 ExclusionStartDate datetime(20220101T000001) ExclusionType Financial Tag demo})CREATE (Exclusion {id xa1 ExclusionStartDate datetime(20200101T000001) ExclusionEndDate datetime(20200611T000001) ExclusionType Financial Tag demo})CREATE (Exclusion {id xb1 ExclusionStartDate datetime(19850101T000001) ExclusionType Legal Tag demo})
// 创建边
// 首先,定位源/目标节点MATCH (companyACompany {id compA})MATCH (companyBCompany {id compB})MATCH (xa2Exclusion {id xa2})MATCH (xa1Exclusion {id xa1})MATCH (xb1Exclusion {id xb1})
// 创建公司关系边CREATE (companyA)[r1relatedTo {reltype Partner establishedDate datetime(20200101T000001)}]gt(companyB)
// 创建排除边CREATE (companyA)[x1hasCurrentExclusion]gt(xa2)CREATE (companyA)[x2hasExclusion]gt(xa2)CREATE (companyA)[x3hasExclusion]gt(xa1)CREATE (companyB)[x4hasCurrentExclusion]gt(xb1)CREATE (companyB)[x5hasExclusion]gt(xb1)
提问
这个阶段的目标之一是测试模型。现在,你将测试数据加载到 Neptune 数据库中,可以运行查询来验证模型。使用生成性 AI,你可以直接提出自然语言问题,而无需手动编写 OpenCypher 查询。LLM 将根据你的问题生成查询,并返回自然语言回复。
在笔记本中使用 LangChain,这是一个为 LLM 模型提供接口的 Python 库。LangChain 支持检索增强生成RAG模式,这允许 LLM 获取数据库的帮助以回答问题。在这种情况下,LLM 从 Neptune 数据库中获得帮助 [https//pythonlangchaincom/docs/usecases/more/graph/neptunecypherqa