使用知识图谱构建基于 Amazon Bedrock 和 Amazon Neptune 的 Graph

使用知识图谱构建 GraphRAG 应用程序:结合亚马逊 Bedrock 和亚马逊 Neptune

由 Matheus Duarte Dias 于 2024 年 8 月 1 日发布于 高级(300),亚马逊 Bedrock,亚马逊 Neptune,生成式 AI,技术指引永久链接评论

关键要点

RAG 技术:结合大型语言模型与外部知识源,提升内容生成的准确性和信息性。知识图谱的优势:提供结构化的实体表示和关系,有利于相关信息的高效检索和整合。GraphRAG 应用:借助 LlamaIndex 框架在亚马逊 Bedrock 和 Neptune 上构建应用,支持生成式 AI 应用程序。实现步骤:包括设置 Customer 360 知识图谱、配置 Bedrock 和 LlamaIndex、集成 Neptune,及知识图谱交互。

Retrieval Augmented Generation (RAG) 是一种创新的方法,它结合了大型语言模型的强大功能与外部知识源,从而实现更准确和信息丰富的内容生成。这种技术充分利用了两者的优势,借助语言模型的上下文理解能力来生成连贯的应答,同时用从各类数据源中检索到的事实信息来增强生成过程。

数据源的选择在 RAG 的有效性中至关重要。虽然结构化数据库和非结构化文本都可以作为珍贵的资源,但知识图谱的优势尤为突出。知识图谱提供了现实世界中实体及其关系的结构化表示,支持有效的相关信息检索和整合。

一元飞机场梯子

将知识图谱作为 RAGGraphRAG的数据源带来多种优势。这些知识库封装了大量经过策划和相互关联的信息,使得生成的回应扎根于事实知识。此外,知识图谱的结构化特性还便于精确的查询和检索,确保最相关的信息被纳入生成过程。这种语言理解与事实知识的融合,使得 RAG 能够生成既有信息量又连贯的输出,成为从问答到内容生成等应用的强力工具。

亚马逊 Bedrock 是一项完全托管的服务,提供来自 AI 领先公司的高性能基础模型 (FMs),如 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和亚马逊,通过一个统一的 API,以及一整套能力,以安全、隐私和负责任的 AI 构建生成式 AI 应用程序。

在本篇文章中,我们将展示如何使用亚马逊 Bedrock 和 亚马逊 Neptune 以及 LlamaIndex 框架构建 GraphRAG 应用。

解决方案概述

作为示例解决方案,我们在 Customer 360 知识图谱 上实现 GraphRAG,提供客户背景,供生成式人工智能 (AI) 应用程序使用。

GraphRAG 应用程序通过 LlamaIndex 框架进行编排,管理与亚马逊 Bedrock 和 Neptune 的互动。亚马逊 Bedrock 提供与大型语言模型 (LLMs) 的通信接口,Neptune 数据库存储用于 GraphRAG 的知识图谱。

本解决方案包括以下步骤:

使用知识图谱构建基于 Amazon Bedrock 和 Amazon Neptune 的 Graph在 Neptune 中设置 Customer 360 知识图谱配置与 LlamaIndex 的亚马逊 Bedrock 集成与 LlamaIndex 集成亚马逊 Neptune配置 Neptune 的检索器与知识图谱互动

有关如何安装和配置 LlamaIndex 的说明,请参阅 LlamaIndex 安装和设置 页面。

您可以在 Neptune 图形笔记本 上运行此解决方案。该笔记本会与 Neptune 集成以检索数据,并与 Bedrock 进行互动,以根据检索到的上下文推理输入提示,从而生成输出。

在 Neptune 中设置 Customer 360 知识图谱

有关如何设置 Neptune 数据库的说明,请参见 设置 Neptune 页面。

我们通过遵循 Neptune 示例身份图笔记本 使用合成数据在 Neptune 中设置了 Customer 360 知识图谱。知识图谱结构将电话、电子邮件、地址和会话节点与用户节点连接,城市节点连接到地址节点,而设备、IP 和页面节点则连接到会话节点。

将亚马逊 Bedrock 与 LlamaIndex 配置结合

配置亚马逊 Bedrock 以与 LlamaIndex 组件整合。这使您能够在 GraphRAG 工作流的检索和推理步骤中实现 LLM。

在这种情况下,我们通过 Bedrock 使用 Anthropic Claude 3 Sonnet LLM。

pythonfrom llamaindexllmsbedrock import Bedrockfrom llamaindexcore import Settings

llm = Bedrock(model=anthropicclaude3sonnet20240229v10) Settingsllm = llm

您可以通过更改 Bedrock 类的 model 参数来更换 LLM。例如,如果您想定义 Anthropic Claude 3 Haiku,model 参数的值应为 anthropicclaude3haiku{modelversion}。

有关可用模型的更多信息,请参阅 亚马逊 Bedrock 页面。

集成亚马逊 Neptune 与 LlamaIndex

在本节中,我们将 Neptune 数据库与 LlamaIndex 集成。这使 LlamaIndex 能够连接到您的 Neptune 数据库实例以检索信息。

您需要创建 NeptuneDatabaseGraphStore 类的实例,以连接到 Neptune 数据库。在主机参数中,您需要提供 Neptune 数据库端点;对于 GraphRAG 使用,应该使用只读端点。对于 port 参数,您可以从数据库端点中提取端口。nodelabel 参数表示与知识图谱中存储的实体节点关联的标签,在检索时会查询此标签。

在这种情况下,我们将 Neptune 知识图谱中的 User 节点标签设置为检索信息的查询实体节点。

pythonfrom llamaindexcore import StorageContextfrom llamaindexgraphstoresneptune import NeptuneDatabaseGraphStore

graphstore = NeptuneDatabaseGraphStore( host=neptuneamazonawscom port=8182 nodelabel=User)storagecontext = StorageContextfromdefaults(graphstore=graphstore)

为 Neptune 配置检索器

现在设置 LLM 与 Neptune 数据库之间的集成,以对存储在数据库中的知识图谱执行相关子图的检索。

首先,您需要创建 KnowledgeGraphRAGRetriever 类的实例,通过该实例将给定的输入提示转换为将在 Neptune 数据库 (storagecontext 参数) 上执行的检索指令。

KnowledgeGraphRAGRetriever 提供了通过将自然语言输入提示转换为 openCypher 查询格式 来丰富检索内容的选项,只需将 withnl2graphquery 参数设置为 True此转换由之前配置的 LLM 执行。graphtraversaldepth 参数表示检索的子图信息深度,值越大,返回的知识图谱信息越深入。

此外,您还需要创建 RetrieverQueryEngine 类的实例,以对 KnowledgeGraphRAGRetriever 实例 (retriever 参数) 执行自然语言提示。

为了提高 GraphRAG 的准确性,我们在输入提示上实现了提示工程,以提取与知识图谱中配置的检索节点在此案例中为 User 节点相关的信息。ENTITYEXTRACTPROMPT 被作为参数传递到 KnowledgeGraphRAGRetriever 类中。

在本例中,我们利用自然语言转换为 openCypher 查询格式NL2GraphQuery以增加检索信息的多样性。我们在输入提示上实施了提示工程,以指导 LLM 采用 openCypher 查询语言的良好实践。NL2CYPHERPROMPT 作为参数传递给 KnowledgeGraphRAGRetriever 类。通过使用 NL2GraphQuery,我们假设 LLM 生成的查询可能存在语法或语义错误。为了提高响应的准确性,我们为 RetrieverQueryEngine 类设置了 responsemode 参数为 refine。这意味着 LLM 将独立地对 NL2GraphQuery 和知识图谱检索的结果进行推理,并基于这些结果生成单一推理。这将最大限度降低 NL2GraphQuery 的空或不完整结果的影响。

设置检索的子图深度为三跳,这是该示例中使用的知识图谱的最大跳数。

pythonfrom llamaindexcorepromptsbase import ( PromptTemplate PromptType)from llamaindexcorequeryengine import RetrieverQueryEnginefrom llamaindexcoreretrievers import KnowledgeGraphRAGRetriever

ENTITYEXTRACTTMPLSTR = 下面提供了一个问题。 根据该问题,提取最多 {maxkeywords} 个信息,以识别问题中给定的用户。避免使用停用词。专注于从问题中提取完整的信息,可以包含多个单词。

{question}

以以下逗号分隔的格式提供信息:KEYWORDS lt信息gt

ENTITYEXTRACTPROMPT = PromptTemplate( ENTITYEXTRACTTMPLSTR prompttype=PromptTypeQUERYKEYWORDEXTRACT)

AMAZONNEPTUNENL2CYPHERPROMPTTMPLSTR = 根据提供的关系路径和问题创建一个 亚马逊 Neptune 风格的 Cypher 查询。该查询应能尽量回答问题,符合给定的图形模式。查询应遵循以下指导: 充分限定属性引用节点的标签。// 错误 MATCH (pperson)[follow]gt(person) RETURN pname // 正确 MATCH (pperson)[follow]gt(iperson) RETURN iname 严格遵循模式中的关系:给定关系 [(Art)[BYARTIST]gt(Artist)]// 错误 MATCH (aArtist)[BYARTIST]gt(tArt) RETURN DISTINCT t // 正确 MATCH (aArt)[BYARTIST]gt(tArtist) RETURN DISTINCT t 遵循单向从左到右查询模型:// 错误 MATCH (aArtist)lt[BYARTIST](tArt) RETURN DISTINCT t // 正确 MATCH (aArt)[BYARTIST]gt(tArtist) RETURN DISTINCT t对于任何关系属性,您应遵循提供的关系路径使用它们,尊重关系路径的方向。根据这些信息,构建一个亚马逊 Neptune Cypher 查询,以提供回答问题所需的信息,返回的仅应为原始文本查询,不需解释、道歉或其他文本。注意:0 努力获取尽可能多的图数据以回答问题1 在查询中限制结果为 30 条。

问题 {querystr}

模式 {schema}

亚马逊 Neptune 风格查询:

NL2CYPHERPROMPT = PromptTemplate( AMAZONNEPTUNENL2CYPHERPROMPTTMPLSTR prompttype=PromptTypeTEXTTOGRAPHQUERY)

graphragretriever = KnowledgeGraphRAGRetriever( storagecontext=storagecontext entityextracttemplate=ENTITYEXTRACTPROMPT withnl2graphquery=True graphquerysynthesisprompt=NL2CYPHERPROMPT graphtraversaldepth=3)

queryengine = RetrieverQueryEnginefromargs( graphragretriever responsemode=refine)

与知识图谱互动

完成所有设置后,您现在可以与亚马逊 Bedrock LLM 互动,该 LLM 将使用检索到的知识图谱信息。

为测试应用程序,我们定义了一个提示,根据从知识图谱检索的用户信息进行产品推荐。这意味着,通过更改用户识别,LLM 的结果将不同且高度个性化。

pythonfrom IPythondisplay import display Markdown

response = queryenginequery(您是一家科技零售公司的市场分析师,主要销售来自知名品牌的笔记本电脑、智能手机和平板电脑。

您需要为这位客户创建超个性化的产品推荐。

使用该客户提供的信息的说明:

您应该推荐与客户所使用的设备模型类似的产品

// 示例 给定设备 Mozilla/50 (x11 Linux Amd64) Apple Web Kit/53436 (khtml Like Gecko) Chrome/1307660 Safari/53436 设备模型为 x11 Linux Amd64

网络浏览器信息无关紧要应使用地理信息来个性化您的推荐确认联系信息的准确性

注意: 保持友好交流,专注于推荐产品模型 包含推荐产品模型的技术细节 避免提及您的角色 避免提及您正在进行个性化推荐 结束时表明自己可供支持客户并回答问题

客户 USERID)display(Markdown(f{response}))

第一次测试询问为名为 “Wallis Lamba” 的用户推荐,以下是相关的子图信息。

边缘类型内容按设备Mozilla/50 (windows Nt 60) Apple Web Kit/53424 (khtml Like Gecko) Chrome/1106963 Safari/53424按设备Mozilla/50 (x11 Net Bsd) Apple Web Kit/53736 (khtml Like Gecko) Chrome/2701453116 Safari/53736关联B6def854 F605 4986 A364 Bd29cb5cc8be关联6a62012a 34a7 4b87 Bbe0 3a7919666fe1有电话305 355 XXX加入时间3/18/2021有电子邮件Wlambaip@neptunedemoscom所在城市迈阿密有地址82 Westridge Park

响应看起来像以下内容:

“你好 Wallis,

为了您的考虑,我建议您使用配备英特尔 i7 处理器的 Microsoft Surface Pro 8。这款平板电脑运行 Windows 11,具有出色的便携性,适合迈阿密的温暖气候。其电池续航时间可达 16 小时,配备生动的 13 英寸 PixelSense 触摸屏,是工作和娱乐的多功能设备。

另一个不错的选择可能是戴尔 XPS 13 笔记本电脑。这款时尚轻便的笔记本电脑可搭载 Windows 10 或 Ubuntu Linux,具有惊人的 4K InfinityEdge 显示屏。XPS 13 配备第 11 代英特尔处理器,在紧凑的形态中提供了令人印象深刻的性能。

请确认您的联系信息 wlambai@neptunedemoscom 和 305355XXXX 是否正确。我很乐意提供更多细节或根据您的偏好探索其他选项。如需其他帮助或有任何额外问题,请随时告知!”

第二次测试为名为 “Armand Aglione” 的用户询

亚马逊识别出被APT29滥用的互联网域名 安全博客

亚马逊识别出被APT29滥用的互联网域名 安全博客

亚马逊识别出被APT29滥用的互联网域名主要要点APT29也称为午夜寒潮最近尝试对成千上万的人进行网络钓鱼攻击。亚马逊与CERTUA的合作,成功识别出APT29滥用的互联网域名。此次网络钓鱼活动的目标主要是政府机构、企业和军事机构,目的是窃取俄罗斯对手的凭证。亚马逊已立即采取措施,对APT29滥用的...

在 Amazon Bedrock 中通过提示管理和提示流程预览简化生成式 AI 开发 机器学习博

在 Amazon Bedrock 中通过提示管理和提示流程预览简化生成式 AI 开发 机器学习博

优化亚马逊 Bedrock 中生成式 AI 开发的提示管理与提示流预览作者:安东尼奥罗德里格斯Antonio Rodriguez和贾雷德迪恩Jared Dean于 2024 年 7 月 10 日发布关键要点新增“提示管理”和“提示流”功能,帮助开发者加速生成式 AI 应用的开发与管理。提供可视化的工...

订阅邮箱