Hello everyone. Thank you so much for coming today and welcome to rag needs a map using graph rag to retrieve connected context. So before we get started today and I know there are people who are trickling in but before we get started today I just wanted to do a quick little poll to see who is already using rag in their pipelines regular vector-based rag. Okay cool perfect are there people who are
already using graphbased rag in their pipelines. Okay >> got it still working on it. So I see just a few people. Um and for those who um are already using graph-based rag in their pipelines, could you explain what graph rag is? A couple sort of. Okay. People are like sort of that's perfectly okay. Um what we're going to do is for those who are new to the concept um this will be a sort of
one-on-one graph rag um talk. So, if you're already an expert, this you'll already know what we're talking about just so that you can um level set. But, um all in all, I want to make sure that people know what we're going to be talking about today. So, just to shortly introduce myself, my name is Ny Mlin and I'm a senior software engineer and senior developer advocate here at Neo4j. Um my research
focuses on graph theory, graph algorithms as well as uh context engineering while all trying to understand um the many architectures that are in place um to build out agents but also which architectures are best suited to break open this blackbox phenomenon um to be able to decipher and trace and explain how artificial intelligence systems work. So I um spend a lot of time thinking about AI
governance and safety as well which also turns out to matter a lot when uh thinking about how your agent is making its decisions and how your agent is built. Um but I've been doing this work for about a decade now and I'm excited to bring you all bring us all back to basics to try and understand uh graph rag and so this is a graph rag 101 type of workshop for those who are newer to the concept. So
today I have two incredible team members who are joining me as well as another team member who's joining me today. I have my colleagues uh Jeremy Adams Castanas who is here in the front. Jeremy's waving to everyone. If you have any questions whatsoever, please ask Jeremy. Um I also have my colleague Ryan Knight who is here I think somewhere. Oh great. Hey Ryan, great to see you. So Ryan's going to
be joining me and I also have a special guest, the uh the speaker for the previous session as well, Zach, who is in the back. He's an incredible AI research engineer on the Neo Forj team. He is also here to join us and to help out with any questions that you need. So if you have any questions, just raise your hand during the uh the workshop and one of my colleagues will um will join you at your
table and help you work through this. So, just a couple um uh housekeeping notes before we even get started. Today, we're going to be using this platform called Graph Academy in order to proceed through this workshop. Has anyone signed up or used Graph Academy before or even heard of Graph Academy? Okay. No, not at all. That's perfectly fine. So, Graph Academy is our completely free forever free
online learning platform where you can learn about all the concepts that I'm going to be talking about today. It takes you through building out agents. It takes you through learning about agentic memory, about context graphs, if you've all heard of that phrase as well. Um, there are lots of different free courses that are online and completely available. These are not sit back and listen to a
lecturer speak courses. These are handson keyboard start building type of courses. So, that's the main goal for Graph Academy and it's an absolutely excellent resource for you to use. Again, completely free at any time. So, we're going to be using that today. And what I want you all to do just so that we can start off is because we're using Graphacademy, I want you to create a Graphacademy account
for me. And so, it should be a quick process. You're going to go to graphacademy.ne4j.com and then you can start to create this account. Um, and again, these are free resources. So you can take this and go um throughout your time either here at AI engineer or as you continue to learn about graph and rag. I also have a link here for all of the links that we are going to be talking about today. All
of the um all of the notes that we have. I will also at the end be able to present with you all the slides from this deck. Um but um you'll go to dev.neforj.comworkshop-genai neo4j.comworkshop-genai-notes
and that has all of the information that we need. I'm going to go to it right now actually. And you'll see here if I can I always have to fight with these things. So you'll see here this is what uh the document that you go to um if you actually click that link the dash notes. So here we have um a couple links that you'll see after you sign up for graphacademy.com. I also want you to create a Neo
Forj Aura instance. This is our hosted cloud platform. We're doing this all for free. So please do not um uh click the instances that you're paying for. I want you to click the free instance. Um and so again remember that we're trying to do all this all for free. Click the free instance. If you want to have more um more tools in the future, then you can feel free to click the uh the professional
instance or what have you. But um we're going to create a free instance um and this will allow you to hook up to what we are going to be diving in today, Aura agents as well. So building out or building out agents within the Aura platform. But you can see here now I know people love a good free API key. [laughter] Don't worry, I did not leak my leak my API key here. But we do have a um OpenAI API
key that's going to give you access to be able to build today. So, we wanted to make this as simple as possible for you all and is easy to get started. So, we're giving you a free API key that you can use um in order to build. And um we do have limits on that. You can't just run up run up the bill, but um please do copy down that API key or save it on your computer. again it'll be here on this
document as you view it um so that you can have access to it later but I just wanted to show off this uh this document for you all um there's some different ways in order to get started with Neoforj but that's all okay so while you all are working on um creating those instances and creating those accounts what we will do is just get started with some of the material that we're going to be talking
about today and I'm just going to give you a a short primer and then we'll actually dive into what we'll be talking about in graph academy. So first of all and this will be uh something that many of you have already heard of because you're already working within uh rag and within vectorbased rag but to overcome this AI's blackbox problem right we often need knowledge itself and data itself to
实际上应该是透明的。所以我们可以看到,这里中心位置有一个苹果的直观视图,而在右侧则是苹果向量化后的视图。对于苹果的向量表示,你会看到这里有一系列数字,对吧?如果是工程师的话,这些是浮点数。但这些向量通常对人类来说并不可读也不易理解,除非你自己已经记住了苹果的向量视图。不过,每一个物体都可以同时表示为数据本身或作为向量存在。地球上存在的每个对象在这里都能被代表,而在左侧我们看到的是苹果的“知识图谱”视图。
我们可以看到这个苹果来自一棵树,它有特定的形态和外观:它是圆的,这种特定的苹果是红色的。而且苹果本身是一种水果——我们这里讨论的不是那家公司。知识图谱能让人类理解的事物也被机器所理解,它往往创造出两者的融合。因此,你可以同时理解这是一种既对机器可读又对人类可读的苹果视图。如果你迟到了且无法获取这些材料,Jeremy和Ryan正在分发二维码,举手示意一下他们就会过来给你提供刚才幻灯片上展示的材料链接。
目前大多数人的数据要么结构化地存储在表格和行中,要么像我之前展示的那样以向量形式存储。如果你的数据是以表格和行的方式组织的,那么为了弄清楚这些行和表是如何关联的,你通常需要进行多次复杂的数据连接操作。这往往会极大地降低应用程序的性能,而我们无法接受这种情况,尤其是考虑到我们大多数人都秉持着“旧金山心态”——快速行动并打破常规。先让程序勉强运行,然后推送到生产环境,之后再解决可能出现的问题。
这是最慢的做法,我们没有时间这样做。我们必须快速行动、保持准确并且具备可解释性。如果将所有这些数据都构建在知识图谱中,那么关系、连接和分组就会变得清晰得多。现在你的智能体可以直接从一个节点(我说的是圆圈)跳到另一个圆圈,通过我们看到的这条线所代表的关系进行跳转。我们可以从一个信息节点跳转到下一个节点,从而追溯并解释过去发生的事情。这是一个巨大的改进!
通过像智能体记忆这样的机制在节点间穿梭,虽然我今天不会深入讨论这个话题——我有专门的演讲来拆解智能体记忆的概念。但通过这种“智能体记忆”概念,你现在可以拥有上下文,了解该智能体过去是如何做出决策的。这对于处理受监管领域(如金融用例)非常有用,你们肯定不想要“随性银行”服务吧?没人希望自己的智能体随意访问资金并花光所有钱。我曾见过此类事件发生,而在医疗、法律等受监管空间中,这种上下文、历史和记忆至关重要。
一旦拥有知识图谱表示形式,智能体为你提供可解释、可追溯且准确响应的可能性实际上会变得极大提升,甚至有些人会说这是无限的。再次强调,因为这是一场一对一的工作坊,我想确保大家理解基于图结构的RAG系统的架构。在普通的检索增强生成(RAG)管道中,你并没有使用知识图谱。在一个基本的RAG流程里,你可以拿几份PDF文件为例,将它们分块,然后使用文本嵌入模型对这些分块进行索引。
当需要查询这些文本片段时,你会再次使用相同的嵌入模型去获取前K个或前X个相关文档,并将它们传递给大语言模型(LLM)。然后你的LLM会根据这些文档给出最终答案。这就是通常用于扑克牌场景的管道样子(此处原文可能有误,应为普通RAG)。另一方面,Graph RAG本质上仍然是RAG,但它的检索路径实际上包含了知识图谱。所以你会看到这里的架构略有不同:在我之前展示的普通RAG流程图中并没有使用知识图谱,但在这里我们可以看到底部实际上纳入了一个知识图谱。
当人们问我何时应该使用RAG还是Graph RAG时,我通常喜欢说:如果你试图回答的问题可以通过搜索引擎解决——这是最简单的说法——那么基于向量的RAG通常就足够了。然而,如果你想问的问题涉及我们所说的“多跳”查询——之前我们在知识图谱的例子中看到了节点。如果你试图进行多次跳转,或者至少三次以上的跳跃查询——这时Graph RAG就变得至关重要了。因为你可以看到并解析智能体为了得到答案必须经过哪些跳转路径。
例如,如果你试图进行源代码分析、供应链问题查询或任何需要从不同文档中聚合或连接数据的情况,那么Graph RAG就会非常有帮助。我并不是要贬低基于向量的RAG,我认为它对大多数用例来说都非常强大。但这里有一些例子展示了仅靠向量或纯向量数据库在处理这些问题时可能会力不从心,而在这些情况下,图结构以及能够遍历节点并获取历史上下文的优势就能体现出来。我不会逐一讲解所有这些例子,但我想让人们看到差异可能在哪里。总而言之,当人们问我们是否应该使用Graph RAG时……
基于向量的RAG?我说,同时使用两者才是关键所在。我们希望结合图数据库和向量技术。我们并不是说图数据库将完全取代你的向量层,而是强调如果同时使用两者,就能获得两者的优势。让我们在此基础上进行增强,确保我们的智能体能够发挥最大的效用。好的,我稍作停顿,接下来我们将进入Graphacademy环节。对于Graphacademy,第一个链接是graphacademy.com,我们要进入这个名为“um.ji”的工作坊。我想让大家做的是跳过前面的几个章节。当然,我已经完成过这门课程,但我可以重置它。我们将继续这门课程,并跳过一些较为入门的内容,比如什么是生成式AI。如果你需要了解这些基础知识也没关系,完全没问题。但针对本次交流,我们直接跳过往下走,进入Graph RAG部分。
好的,我们已经了解了RAG过程中的检索流程以及普通RAG与图RAG之间的区别。我们首先看到的是典型的处理过程,我之前已经讲解过:包括检索器、用户、应用程序和大语言模型(LLM),以及通常作为向量存储的数据存储。但如果我们往下看,就能看到其中的差异所在。我想在这里重点提及的概念是“检索器”。在座的许多人可能已经知道什么是检索器,如果了解的话请举手示意一下,这样我就不必详细解释了。
好的,实际上并没有我想象中那么多人了解,这完全没问题。那我们就快速回顾一下。检索器是RAG流程中的关键组件。检索功能实际上负责从外部数据源中搜索并获取相关信息。我喜欢这样比喻:让我们把这个概念放大一些,非常感谢。我经常用一种简单的方式来记忆检索器的作用——检索器就像金毛寻回犬(Golden Retriever)。大家都知道金毛喜欢接球、捕捉物品。因此,检索器就像那只金毛犬一样,去获取所需的信息。
通常,检索器接收非结构化输入(如问题或提示词),例如在使用聊天机器人时。然后它搜索结构化的数据,为答案提供上下文支持。这是关于Neo4j具体支持的检索功能的一些简要介绍:它支持全文搜索、向量搜索,以及文本或密码检索器。此外,我们还有多种不同的数据源。在常规的RAG管道和流程中,这些数据源可以包括文档、API以及知识图谱等。
如果我们以这个新闻代理聊天机器人为例,其流程如下:使用News API来检索最新的文章和头条。然后利用知识图谱来理解不同主题之间的关系,例如它们在历史背景下的相互联系。接着,文档数据库将存储和检索文章、报告或文本信息。这只是一个示例,展示了可能出现的架构形态。但让我们继续前进吧,使用图RAG有很多不同的优势。我会简要提及其中几点,其中之一是拥有更丰富的上下文信息以及提高准确性、可解释性。
正如我们在知识图谱中看到的那样,如果你能够遍历你的知识图谱,并结合智能体记忆等功能,你就能获得构建智能体所需且极具价值的丰富历史上下文。让我们继续往下讲。我听到几位听众提到,我的同事之前也稍微提及过这一点:大家以前是否构建过知识图谱?能否请几位举手示意一下,有多少人曾经搭建过知识图谱?只有少数几个人。好的,只有几个。
稍微有点了解。是的,好吧。大家好(Hello world),这完全没问题,没关系。这正是我们聚在一起学习的原因。所以,我们要确保理解什么是知识图谱。我们在前面的例子中已经稍微涉及过这一点:一般来说,知识图谱是对现实世界实体及其关系的有组织表示。如果我是其中一个节点(一个圆圈),那么我的同事Jeremy也是一个节点。是的,Jeremy,我们都是节点。
而我们之间实际上存在关系:我们是同事,也是朋友。因此这里有两个不同的关系。但这只是知识图谱最简单的架构形式。我们还可以连接到不同的人,比如我们的同事Zach和另一位同事Ryan。虽然有许多不同的方式,但这仅仅是一种表示形式,即数据在最简单形态下的呈现。那么什么是知识图谱呢?你可以看到这里另一个关于该知识图谱的示例。
为了节省时间,我将直接跳过并进入“知识图构建”部分。对于正在跟随教程的各位:我们现在处于知识图谱构建章节。让我们快速搭建一个知识图谱吧。在“知识图构建”这一课中,我们将回顾使用LLM从非结构化文本中构建知识图谱的过程。总体过程包括:确保收集数据源,然后对该信息进行分块(chunking)处理。
当然,我们还会对这些数据进行向量化处理,接着从中提取节点和关系,最后生成图谱。在这个示例中,如果我们想基于Neo4j的维基百科页面构建知识图谱(我们可以在此看到该页面),我们将收集页面上的文本。提取所有文本后,我们会将这段文字分割成多个块(chunks)。
如你所见,我们将为每个文本块生成嵌入向量。然后使用LLM提取实体和关系。当然,你也可以手动进行这种提取工作。但我们认为,利用LLM可以大幅缩短完成此类提取所需的时间。因此,我们会向LLM发送带有适当提示词(prompt)的内容……
这里是提示词示例。你的任务是从给定文本中识别出提示词所要求的实体和关系,然后生成包含 JSON 对象列表的 JSON 格式输出。接着,我们将解析这些实体和关系,将输出作为 JSON 粘贴到大型语言模型中,从而从所有这些数据生成图谱。
在这里我们可以看到“Cypher”,这是一种针对图数据库优化的查询语言。有人以前用过 Cypher 吗?有几个人举了手,好的,几位参与者。如果你是 Cypher 专家(笑声),那么如果我回答我的一些问题,我也有周边产品赠送给大家。因此,在这个研讨会期间,我希望互动性比正常情况更强。我会提问,如果你勇敢到在现场回答我的问题(这也是直播的),我就送你免费的独特周边产品。
这包括 T 恤、特殊的周边产品(其他地方买不到)以及袜子等,除此之外还有特别的赠品。感谢大家愿意挺身而出回答我们可能提出的问题。最后展示一个生成的图谱示例。这里有一个由 Neo4j 公司开发的图数据库,Neo4j 并没有开发通用的所有图数据库,而是 Neo4j 这家公司开发了名为 Neo4j 的图数据库。
顺便提一下,Neo4j这个名字来源于电影《黑客帝国》中的主角 Neo(尼奥),以及 Java 语言。所以知道这一点的人就会明白关于 Neo4j 的这个典故。我们可以继续了。
啊,是的,好的。 请开始吧。 好,让我们开始。因为现在是一个小时半了,我们希望你能从这次活动中获得最大收获。大家希望构建知识图谱。在左侧边栏上,写着“GraphRAG for Python”。 没错。就是那个链接。请导航到那里。向下滚动,这将带你了解 GraphRAG for Python 包,这是一个由 Neo4j 提供的开源包,用于知识图谱构建、检索和代理工作。
在这页面上还有我们将使用的所有示例所需的凭据,然后 Nia 你想接手谈谈这些凭据和 GitHub Codespaces。 当然可以。让我们开始吧,既然我们提到了 GraphRAG for Python 部分,我们要向下滚动并点击“在 GitHub Codespaces 中打开”。一旦我们打开了它,如果你还没有登录 GitHub,你需要先登录。
但一旦打开,我们就保持所有系统提示词不变,然后创建 Codespace。这需要一点时间。所以在这个生成过程中,我们要做几件事。我想向大家展示我们将创建这个设置环境。因此,我们将复制 .env.example 文件,你可以直接点击这里的“Copy”。
我们将在 Codespaces 部分中实际创建这个文件。当然,Wi-Fi 不一定总是顺畅的,但这会继续进行。最终,它将拥有整个文件夹结构的设置,并包含一个 .env 文件。因此,我们将创建一个名为 .env 的文件,并将所有这些凭据粘贴进去。
实际上我们要做的并不是直接粘贴那些确切的凭据,因为我们的具体目标是创建一个 Neo4j Aura 实例。我在笔记中提到了这一点以便我们开始。所以,请创建一个新的 Neo4j Aura 实例。
我再次提到我们应该为此研讨会创建一个免费实例,你也可以创建专业版实例。但我已经设置好了一个实例,这是这里的第三个实例号。你的应该显示类型为 Aura 或 Free。但我们将连接到该设置好的实例,一旦你创建了那个实例,你将获得连接详细信息并直接下载到你的电脑上以免丢失。
然后我们将在此处进行连接。 是的,所以这里有一个分岔路口。如果由于任何原因你无法及时创建 Aura 实例,请不要感到难过。如果你能完成它,对练习的最后部分来说是最理想的。但是我们在 Graph Academy 中看到的其他凭据是在 Graph Academy 内部的一个小型免费实例中,所以你可以使用那些。
无论如何,我们需要拥有连接到 Neo4j 数据库的详细信息,因为我们将在那里构建知识图谱。 没错。 完美。所以我现在正在获取我的实例信息,然后将其粘贴到我们的图谱中。很好,我们在那里看到了它。我还会获取 OpenAI 密钥。是的,我也会把它放大一些。
把这个终端移下来,移到一边去。完美。我们也需要之前获取的那个 OpenAI 密钥,我们将直接从笔记中抓取它。所以只需复制并粘贴密钥即可放置好。
太棒了。好吧,如果你开启了自动保存或需要手动保存,这将保存下来。现在我们有了这个 .env 文件。一旦我们有了它,我们就想快速测试一下我们的环境。所以我们会向下找到 test_environment.py 并运行这个文件。如果你使用 VS Code,你可以用它来运行,或者你希望使用 Python 虚拟环境来运行。
但让我们确保这样做。好的,我们可以看到下面它正在尝试连接。完美!它运行了五个测试并且全部通过(正数),我们没问题。 有人遇到阻碍吗?如果有,请确保你实际上创建了 .env 文件,而不仅仅是在示例文件中。 没错。你可以重命名文件或创建一个新文件。这样我们就知道我们成功连接到了 Neo4j 数据库,并且我们的 OpenAI 密钥也成功了。
完美。现在测试环境运行成功,我们可以看看这里。如果你进入 workshop.ipynb(注:原文为jai,推测指notebook),你可以看到这里有几种不同的解决方案。我们有原始数据本身。
解决方案本身,然后是智能体(Agent),接着是知识图谱构建器以及结构化知识图谱构建器。因此,我们将点击这个“结构化知识图谱构建器”,它将在我们的 Aura 实例中构建出该知识图谱。如果你再次处于 VS Code 环境中,我们可以直接播放(play)代码,虽然这个过程需要一点时间,但它实际上会生成知识图谱。我们可以看到它在 Dojo Aura 或 Aura 实例中实时填充数据,所以让我们回到 Aura 界面。
正如我之前所做的那样,在这里我们将连接并进入查询(Query)模式。我们可以看到我已经完成了这一步骤,之所以预先填充是因为这需要一些时间。由于我之前已经运行过该过程,因此可能会产生一些重复数据(duplication)。然而,所有这些信息都将在此处填充。接着我们可以查询并查看实例中存在的内容。你会发现,随着你进行更多次查询,知识图谱实际上会持续填充和扩展。
目前我们只是查看已经存在的节点(nodes)和关系(relationships)。我们有 P,然后输入匹配语句。这里稍微调整了一下语法,“哦,谢谢。” 接着是“Match P equals”,好了。“太棒了!”现在我们可以放大画面以看清具体情况。我们可以看到所有这些不同的节点和关系,它们都是基于我们摄入到知识图谱中的数据生成的。你可以点击这些数据并检查数据详情。
这不仅仅是一个可视化工具,它也是一个专门的查询工具,一种让你直接查询数据本身的方式。这就是最终的知识图谱。你的知识图谱规模可能会小得多。如果你多次运行这个特定的查询,比如匹配空节点(empty node)并返回 P,你会发现知识图谱会生长。这通常只是说“显示所有节点”,即展示所有的节点和关系,非常棒。
好的,一旦我们获得了这些节点和关系,对于在此过程中遇到任何问题的任何人,请随时举手。我们有同事会过来帮助你。一旦你的知识图谱开始生成,接下来我们要做的就是进入并创建一个智能体(Agent)。我看到后面有几只手举起来了。你可能还看不到“Agents”部分,如果你没看到,请让我看看你的情况。
我知道可能有些人还没到那一步。但如果你看不到这个智能体部分,我要你做的是进入你的 Neo4j 组织(Organization)。然后点击“所有组织”(All organizations)。我们要做的就是在此处启用 Neo4j 的功能。既然我们在这个新组织中,我们将进入设置(Settings)。我已经启用了它,但对于那些不知道如何启用或以前从未使用过 Neo4j 的人:
这里有你需要点击的两个选项,它们目前是灰色的。我希望你按顺序点击它们以启用功能:生成式 AI 辅助(Generative AI assistance)以及专门的 Aura Agent,因为今天我们要构建一个智能体。哦,看到几只手举起来了,完美!一旦我们有了这个组织设置,我们将回到我们的特定实例。
我们要在查询模式下打开实例,看到知识图谱正在填充数据。然后点击这里的“Agents”(智能体)部分以及这个特定的智能体选项。我已经有一个现成的智能体,但你们需要创建一个全新的智能体。我将从头开始创建,并将该智能体绑定到这个特定的实例上。它应该基于你最新创建的实例自动填充信息,然后我们将进行配置。
我们希望这个智能体做什么呢?我们要给这个智能体起个名字,叫“GenAI Fundamentals”(生成式 AI 基础)。不,实际上我们叫它“Graph RAG Fundamentals Agent”(图检索增强生成基础智能体)。完美。然后对于描述部分,我们要说明这个智能体提供基于我们特定的图学院课程(Graph Academy course)的 Neo4j Graph RAG 信息。
所以我们有了这个智能体,再次提醒跟随操作的人,它将提供基于特定图学院课程的 Neo4j 图形信息。最后我们要在此处为该智能体提供指令(Instruction)。该指令将是……我们可以直接复制粘贴。我会把这些内容也包含在 GenAI 笔记部分,以便大家都能看到。我将转到笔记页面。
这是一种为大家创建智能体描述的简便方法,这样你们可以复制粘贴并让你们的智能体在这里正常工作。如果有问题请随时举手。好的,我们将把这些内容复制到我们的智能体中。我们有了指令,然后保持其他设置基本不变,包括实例、智能体位置以及内部配置等。完美!我们要创建这个智能体。
但是,实际上我们是否应该……是的?好的。所以在创建该智能体之前,我们要尝试为其添加相似性搜索(Similarity Search)。如果你还没有为智能体添加向量搜索或向量索引,我们必须这样做才能出现该提示。你会收到一个单独的提示说“需要进行向量搜索”。
为了获取这些信息,我们要关闭这个窗口。哦,我们可以保持打开状态。但我们将进入 Python 部分。在 Graph for Python 部分中……找到了!我将把这些内容粘贴到大家的笔记中。我真喜欢全屏模式,来吧,让我退出全屏以便为大家粘贴代码。所以我们要创建一个向量索引(Vector Index)。
我们要点击这里的链接“创建向量索引”(Create Vector Index),很酷。这就是你要做的,点击该链接会给你一段示例代码以创建向量索引。我现在就展示我们将把这部分信息放在哪里。这里有一个“创建向量索引”的部分,你只需复制这段代码即可。
然后我们会包含那个部分。所以关于向量索引,我要问杰里米:你还记得我们把向量索引放在哪里了吗?哦,在哪里放我们的……嗯,向量索引?>> 是的。对。就在作为 Cypher 查询窗口里。 >> 是的,你说得对。完全正确。好的。那么我们回去看看。
所以我们要从这里出去。这取决于你使用的是哪个实例。如果你使用 Aura 实例,你需要进入你的 Aura 控制台中的查询界面。所以你可能想要打开另一个窗口。 >> 嗯哼。 >> 这样你可以保留你的代理,或者你必须暂时关闭你的代理去查询界面,>> 对吧?然后你就可以创建那个向量索引了。 >> 所以就像杰里米提到的,我们实际上要把这个向量索引粘贴到这里的 Cypher 查询窗口中。然后你会运行它,接着你就会看到……嗯,我们会扩展这个命令。我想这是因为我已经成功执行过了。哦对了,它已经存在了。没错。因为我已经运行过这个命令了。你要做的是创建并运行那个命令,然后它会实际显示已经创建的向量索引。
一旦你有了这个已创建好的向量索引,你就可以进入……嗯,代理部分,然后访问我们之前看到的那个提示词。所以我要再做一次同样的操作:从头创建、配置,我们要做一样的事情。Graph RAG(基于图的检索增强生成)。太棒了。自动填充描述。漂亮的描述。嗯哼。漂亮。然后我们有同样的提示词。
很好。接下来我们要进行“添加工具”部分。现在是相似度搜索。现在你应该能看到……嗯,同样的提示词。但是对于这个相似度搜索工具,我们要创建这样一个工具:它将说明我们将搜索这些课程内容并能够从课程中实际收集见解,而无需……嗯,获取整个课程。搜索课程内容。然后我们有一个描述,我也会粘贴出来。
我会把它贴上去。确保你们都有那个描述。相似度搜索的描述。完美。所以现在它就在笔记里了,这样你也可以使用它。然后我们要选择我们刚刚创建的那个特定的向量索引,也就是块嵌入(chunk embedding)。我们会说我们将使用大约前五个……嗯。然后我们要选择我们的嵌入提供商,是 OpenAI。我们使用的嵌入模型只是 text-embedding-3-small(文本嵌入三小型)。这完全没问题。默认维度是 1536。然后我们要确保……嗯,返回这个连接的图数据,这非常重要,特别是因为我们使用的是这个……嗯,图形界面。所以我们要返回这些数据,你想怎么做?我们可以在这里使用自然语言,但你也可以使用特定的 Cypher 查询。不过……嗯,对于这个 Cypher 查询……我们有一个已经存在的 Cypher 查询。我在试图回忆它在哪里。哦,有浅色模式吗?这是个很好的问题。哦,因为太难看了。是的,让我们把它放大一点。太棒了。
所以对于这个 Cypher 查询……我们要使用这里的这段代码,我会确保把它粘贴给你们大家。这就是我们将要使用的 Cypher 查询。
所以它是……嗯,哦,实际上,我应该直接粘贴实际的 Cypher 查询代码本身,而不仅仅是链接。酷。好吧。所以这里是我们将在代理中包含的 Cypher 代码。我们要做的是把它粘贴到我们的 Aura 代理中。同样的 Cypher 查询,不要改变任何东西,但重点是如果你看这个 Cypher 查询……我们需要那个 Cypher 查询包含节点。你可以看到这里的 nodes(节点),然后是 scores(分数)或者 similarity(相似度)。所以我们可以看到这个 Cypher 查询 specifically 在其查询中使用了 nodes and scores。但这非常有帮助,我也会确保为你们提供链接,以便稍后获取该查询的来源。完美。好吧。现在我们可以创建这个代理了,对吧?或者我们可以添加这个特定的工具。好了。所以我们在这里有了所有内容:我们使用内部(internal),这是免费的。我们有这两个工具:“搜索课程内容”和“相似度搜索”,然后是用于 Cypher 工具的……嗯,自然语言。我们要创建这个代理。所以我们可以看到这里的“图基础代理”(Graph Fundamentals Agent)。所以我们不再需要配置它了。但如果你需要……嗯,就像我们在构建知识图谱时那样,你可以更新这个代理。你可以按下“更新代理”,这将接收来自知识图谱的所有信息。
现在我们可以与这个特定的代理进行聊天,并且可以询问关于……嗯,该代理的不同问题。我希望我能把这个滑过去,但我不能,但这没关系。所以我们可以问这些特定的问题……很多不同的问题……嗯,你现在可以学习图学院课程中的任何实际内容。例如,我们有信息关于……嗯,温度(temperature)如何影响 LLM(大型语言模型),这将基于我们在 Neo4j 中创建的知识图谱中的所有信息,并且仅使用知识图谱内的这些信息来……嗯,给你答案。
我们来了。 >> 有趣的一点是……对于那些稍后回去查看数据目录的人来说,你会注意到所有那些 PDF 文件都来自图学院的“生成式 AI 入门”课程。没错。 >> 所以我们在图学院上训练了它,在图学院里。有点元(meta)但 >> 完全正确,它能工作。 >> 不,那太完美了。就像杰里米提到的那样,所有这些信息都是在图学院上训练的。所以你在本代理中就可以随时获取图学院中的所有信息。但它回答了……嗯,温度是一个控制生成文本随机程度的参数。对吧?你有轮胎压力(tire temperature)……不,是低温度以及它基于什么,还有信息来源的出处,你可以在图学院中学习更多。但你……不只能询问关于图学院内容的问题,还能做诸如基于图学院获取聚合信息之类的事情。嗯,所以我们可以问……比如这门课程有多少节课?通常当你构建代理时,或者当你在构建 RAG 管道时……它们往往在这方面表现不佳,就像我提到的聚合和连接部分。但让我们看看,我们可以看到在这门特定课程中有 30 个不同的课时……实际上有 15 节课,但它现在计算的是 30。这是因为我已经重新运行了……嗯,知识图谱构建器,它最初有 15 节课,然后我重新运行了该构建器,创建了这 30……
不同的课程。所以,如果我们想在 Aura 中进行检查以确保我们的状态……哦,是的。那么,如果我们要返回并查询一下,比如计算这里有多少课程,我们会发现它实际上会给出正确的数字。>> 你甚至可以直接点击左侧的课程节点类型。 >> 没错, >> 对于作弊代码来说…… >> 所以我们会看到正确答案,即这个空间内的 15 门课程。然后因为我又重新运行了一次,但没有在系统中更新数据,所以它显示有 15 门课程,也就是 Graph Academy 课程中的课程数量。 >> 所以 Nia,我之前有一些人想知道既然我们已经从头到尾走了一遍流程……
我们构建了一个知识图谱。连接上了一个可以使用 Graph RAG(向量查询和属性查询结合)的代理。他们想知道能不能快速看一下实现这一功能的代码?>> 所以,能否让我们看看那个知识图谱结构化构建器的代码? >> 快速过一遍,以便我们了解其中的元素。 >> 当然可以。那么让我们进入我们的知识图谱结构化构建器。完美。这里就是创建和生成这个知识图谱的所有代码。我会尽量让窗口变大,同时避免截断文本……我想做一下自动换行。 >> 我觉得你可以隐藏左侧边栏。 >> 哦,是的,绝对可以。完美。
我们可以看到这里导入了所有必要的部分:OpenAI LLM、OpenAI 嵌入模型、简单的知识图谱管道(Simple KG Pipeline),以及固定大小的分块器。但这里还有 Neo4j 驱动程序,这基本上是你的核心组件。当我们说“驱动”时,我们确实是指生成这一切的驱动程序。所以我们使用 Neo4j 驱动程序连接到我们的图数据库,这是连接最简单的方式。然后我们在这里看到 LLM,即 OpenAI 的 LLM;还有嵌入模型(OpenAI Embeddings);当然还要使用文本分块器,固定大小分块器的分块大小为 500。
以及重叠部分(chunk overlap),以防错过任何特定分块中的内容。然后我们有一些示例节点类型,即圆圈代表的实体:技术、概念、例子、流程、挑战和收益。接着是我们认为对知识图谱非常重要的关系类型,我们希望这些关系聚焦于“相关”、“部分使用在……中”等。然后我们可以看到模式,即节点-关系-节点的组合模式。例如,“技术相关于特定技术”或“例子用于特定技术”。
在填入所有这些示例信息后,我们可以看到知识图谱构建器接收了知识图谱管道和所有相关信息以生成最终的知识图谱。当然,这里很酷的一点是:虽然我们使用了 Graph Academy 的数据和相应的模式,但大多数人将使用来自其业务的各种文档。你可以利用 LLM 帮助你确定正确的模式(Schema)。一旦确定了,使用这些模式可以引导 LLM,使其不会随意编造新的节点和关系类型,而是严格遵守既定规范。 >> 没错,很好。
所以我们可以看到我们输入了 CSV 文件……我们的数据中也有不同的 CSV 文件,以及来自该课程的所有通用 PDF。然后它会解析这些 CSV……并创建和生成知识图谱,全部完成。这就是这个构建器的背景原理:它使用 Graph RAG 在后端创建我们在 Aura 中看到的那个知识图谱。完美,好的。嗯……这就是我们今天想向大家展示的关于 GenAI 的内容。我最后再放几张幻灯片,并给出一些行动号召(Call to Action)。
这些是使用 Graph RAG 的一些好处。我之前提到过更高的准确性、更简单的开发以及可解释性。但总而言之,了解更多关于图(Graph)和 Graph RAG 的最佳地方是 Graph Academy,那里有所有不同的资源、完全免费且注重动手操作的课程。还有属性查询基础(Cypher Fundamentals),如果你想成为精通 Cypher、构建知识图谱和上下文图的专家。然后在周二……是的,本周二或者周三(7月1日),我们将在旧金山的 Digital Garage 举办一场聚会,时间是下午5点到8点。
请随时加入我们并注册。如果你想参加那个聚会,请务必来我们的展位登记。我们将有一些在图和知识图谱领域的杰出专家出席,包括我们的创始人兼首席执行官 Emil Efim 先生。你可以向他提问关于构建知识图谱的问题,以及技术团队——我自己(Jeremy Zach)……我们都会在那里回答你关于用例的提问。但这次演讲的重点是教导决策背后的原因,即上下文图(Context Graph)所做的决策。
请随时来我们的展位 P3 看看,就在微软展位的旁边。我们将在那里回答你的任何问题。非常感谢你今天能来。我们非常感激。(掌声)谢谢。 >> [音乐]