在当今的AI领域,一个优秀的RAG(检索增强生成)产品,其上限往往体现在Agent(智能体)与工作流编排的精妙结合上。
然而,我们产品设计的核心切入点是RAG,而非Agent。这意味着,我们可以在RAG系统中调用Agent来获取外部信息,作为参考依据,从而优化生成结果。
那么,换个角度思考,是否有可能将RAG作为一种子反馈机制,为Agent提供服务呢?
这样的设计,将赋予系统处理复杂任务的能力,而这也正是在MAS(多智能体系统)系列中提出的解决方案。
生产级AI多智能体系统MAS学习指南
沿着这一思路,在GraphRAG系列中进行了更为深入的探索。
他提出,让知识图谱成为Agent的得力工具之一,使Agent在面对知识图谱或其他数据库时,能够自主决策是否调用相关资源。这一系列课程堪称知识图谱的进阶宝典,其价值极高,围绕“如何做好RAG”这一核心问题精心设计。
该加餐系列课程内容丰富,从数据处理到产品部署,涵盖了多个关键环节:
1. Day1:数据处理:将原始数据转化为知识图谱标准数据,为后续的构建工作奠定基础。
2. Day2:构建知识图谱:将处理好的数据存储到Neo4J中,构建起知识图谱的基本架构。
3. Day3:企业批量创建:实现工程化批量处理知识数据,提高数据处理效率。
4. Day4:RAG学习合集:深入浅出地讲解langchain核心知识,帮助学员掌握RAG的关键技术。
5. Day5:GraphRAG融合:将知识图谱与RAG相结合,增强RAG的性能,推动kg+rag应用的发展。
6. Day6:Agent接入GraphRAG:使GraphRAG成为Agent的决策工具,提升Agent的决策能力。
7. Day7:后端服务部署:将整个产品打包成后端服务,并进行微调,使其能够稳定运行。
8. Day8:产品构建与交付:手把手指导学员构建Agent+GraphRAG的产品,并提供给用户使用。
整个加餐系列内容前后连贯,从GraphRAG的原理剖析到实际应用,逐步展开,让学员能够系统地学习和掌握相关知识和技能。
快速定位,聚焦兴趣
考虑到人的专注力有限,我们建议大家直接跳到自己感兴趣的部分进行学习:
1. 如何将GraphRAG接入到Agent?其原理是什么?
2. 在接入过程中会遇到哪些问题?相应的解决方案是什么?
3. 实际操作:一边运行代码,一边深入探讨代码细节
AI发展迅猛,实践出真知
AI领域发展日新月异,只有亲自动手实践,才能深入了解其中的奥秘。就像过河一样,只有真正迈出脚步,才能知道哪里有坑,该往哪个方向走。
同时,这个系列课程也是知识图谱课程的重要补充和延展,我们将持续更新加餐内容,为大家提供更多有价值的学习资源。强烈建议大家前往知识图谱课程打卡学习,相信你一定会收获满满!
第一部分:GraphRAG与Agent的深度融合
在MAS系列中,对Agent进行了深入的介绍和研究,从顶层设计到技术实现,全方位地为MAS配备了与外部世界交互的特定工具,使Agent从被动的语言模型转变为能够主动解决问题的智能体。
今天,我们将深入探讨如何将GraphRAG的结果作为Agent的信息接口之一。 为什么说是“之一”呢?因为这种方案具有很强的通用性,可以应用于各种产品,将不同的数据源接入Agent。Agent能够根据当前任务的需求,智能、自主地决策调用哪些信息,以更好地完成任务。
本次,以Neo4j接入Agent为例,为大家展示具体的实现过程。首先,我们自定义了一些工具,让Agent能够根据这些工具进行决策: `
稍后,将在代码演示中,详细讲解核心关键部分,帮助大家更好地理解和掌握。
在MAS内部,Agent是如何进行决策的?多个Agent之间是如何协同工作、保持对齐的?在函数调用过程中,如何提高工具的成功触达率?如果出现错误,又该如何处理?即将上线的函数调用专题,将对这些问题进行深入探讨。
虽然从示意图上看,整个过程似乎很简单,但实际上要做好并不容易。随着工具数量的增加,Agent的决策正确率会降低。因此,我们建议尽可能减少单个线程的Agent进行跨领域决策,可以采用父子架构设计,减少工具决策的复杂性。
当找到合适的工具后,如何让工具的结果根据动态任务目标进行调整呢?例如,在Neo4j中查询产品信息时,如果工具错误地查询了跟单路由,就无法完成任务。这时,就需要进行动态查询,以获取正确的结果。
第二部分:问题剖析与解决方案
在上述任务中,我们主要面临两个关键问题:
1. 工具成功选用率:即正确工具反馈次数与调用次数的比例。这里的“正确工具反馈次数”并非简单地指工具是否与领域对应,而是指在的评估体系中,解决问题生成的结果达到90分以上的情况。从公式中可以看出,系统中的工具越多,Agent的决策成功率越低。目前,较少的工具编排能够提高成功率,但这种做法在实际应用中存在一定的局限性。为了提升系统性能,我们需要进行复杂编排,采用父子结构编排,并制定【通用行动指南】和【任务说明书】。
2. 动态任务的工具成功触达率:即收到成功执行结果次数与执行次数的比例。在动态任务中,确保工具能够成功触达并获取所需的反馈至关重要。以Neo4j为例,查询语言是Cypher,我们需要根据任务动态生成正确的查询语句,实时获取最新的数据。为了实现这一目标,我们可以采用提示词或微调等方法。提示词方案成本较低,但对于一些通用模型,可能无法满足任务质量要求,这时就需要进行微调。
第三部分:实践操作,代码详解
本次实践的环境与上篇相同,操作系统无特殊要求,三大系统均可,演示使用win11。实践环境为minicodna和jupyter,大模型采用openai api(也可选择本地模型),知识图谱使用Neo4j,RAG框架为langchain。
搭建好环境后,我们就可以跟着一起进行实操了。
首先,激活conda环境:
然后,进入jupyter环境,输入以下代码,会自动跳转到浏览器:
接下来,检查自己的key,打开同目录下的.env文件,确保所有key都填写正确。
我们的实践代码从day5继续,整个操作过程并不复杂,不习惯使用jupyter的同学可以根据自己的习惯进行调整。对于入门的朋友,建议跟着步骤进行操作。
首先,登录Neo4j,开启数据库。由于长时间未登录,官方可能会自动释放数据库,因此需要重新登录开启,开启后大约需要等待5分钟才能继续操作。 接下来,我们分别创建两个工具,让Agent决定调用哪个工具:
1. 第一个工具:
2. 第二个工具:
现在,我们给agent一个任务,看看它能否正常工作: 问:数据库中最贵的产品是什么? 整个执行过程如下:
1. 动作一:执行Agent编排器> Entering new AgentExecutor chain...
2. 动作二:找到正确的工具Invoking: `general-qa-tool` with `{'query': '数据库中最贵的产品是什么?'}`
3. **动作三**:执行工具> Entering new GraphCypherQAChain chain...
4. **动作四**:生成工具的查询函数,去Neo4j中查数据!
5. **动作五**:根据查询的实时结果输出回答> Finished chain. 最贵的产品是Côte de Blaye,价格为263.5。
通过以上操作,我们展示了如何将GraphRAG接入Agent,并实现了简单的任务处理。希望大家能够掌握这一技能,在AI领域不断探索和进步!
领取专属 10元无门槛券
私享最新 技术干货