最近帮企业定制了一个langgraph+rag的项目,跟大家简单介绍一下设计架构和具体的应用。如果大家有兴趣,我也可以出一期视频,给大家详细介绍一下。我们会一步步探讨如何构建一个可以控的Agent,以执行RAG任务,并最终展示一个简短的演示。
什么是RAG?
RAG,全称Retrieval-Augmented Generation,是一种辅助AI语言模型生成基于外部信息文本的方法。在RAG中,我们将数据拆分成多个小块,然后将这些小块嵌入到低维空间并存储在向量存储中。当用户提出查询时,该查询也会嵌入到相同的低维空间,与向量存储中的信息进行比较,从而检索到相关的信息作为上下文,并与查询一起输入到语言模型中,生成基于上下文的最终答案。
什么是Agent?
智能代理是先进的AI系统,设计用于执行需要连续推理的复杂任务。它们可以预见未来的步骤,记住过去的对话,并使用不同的工具根据情况和需求调整其响应。
为什么我们需要控制Agent?
控制智能代理的原因在于代理自主性与过程控制之间的权衡。代理的自主性越高,我们对其控制就越少。使用常规代理时,我们无法控制它何时使用工具或以何种顺序使用工具,也无法控制其得出的结论,特别是在处理其内在机制中的幻觉或预训练知识时。然而,通过构建工作流程,我们可以定义解决问题的具体路径,从而对每一步进行全面控制,但这需要量身定制的解决方案,可能耗时且复杂。
构建可控的RAG代理的基本模块
语义相似性
在我们的嵌入空间中,嵌入数据的方式使得相似的词汇彼此接近。例如,“国王”和“王后”的距离会比“狗”近。利用这种语义相似性,我们可以在简单的RAG任务中,例如历史事件查询中,检索到相关的上下文并生成答案。
处理复杂问题
对于更复杂的问题,我们需要不同的方法来构建数据。例如,我们可以使用语言模型生成章节摘要,包含关键点和章节总结,增加找到解决此类问题的可能性。
多向量存储
为了精确处理复杂问题,我们可以建立多个向量存储,例如文本块存储、章节摘要存储和书籍引用存储。
构建可控RAG代理的工作流程
我们需要以下能力:
工具:代理需要具备检索和回答问题的工具。
推理能力:构建解决问题的流程。
过程控制:确保每一步按预期进行。
终止判断:知道何时停止代理的操作。
评估任务表现:评估任务完成的效果。
Agent Tools
我们需要三种检索工具:引用检索、章节摘要检索和文本块检索。此外,还需要一种回答工具,用于在中间步骤或最终生成答案时使用已有的上下文。
问题匿名化
为了避免预训练模型的偏见,我们可以将问题中的特定实体替换为变量,例如将“关羽是如何打败华雄的?”替换为“X是如何打败Y的?”,构建一般计划后再替换回原始名称。
代理工作流程
输入问题并匿名化。
使用计划器构建匿名问题的解决步骤。
去匿名化并分解为检索或回答工具。
任务处理器选择合适的工具进行操作。
根据上下文和计划进行重新规划,直到问题解决或达到终止条件。
终止条件
我们可以通过以下方法判断何时停止:
每一步询问语言模型当前上下文是否足够回答问题。
直到新信息量低于某个阈值。
限制图的递归次数,如达到100次遍历后停止。
评估
我们可以通过以下指标评估RAG任务的效果:
答案正确性:答案是否事实正确。
忠实度:生成的答案是否基于检索的信息。
答案相关性:答案与问题的相关性。
语义相似度:生成答案与标准答案的语义相似度。
总结
通过结合RAG和智能代理,我们能够解决复杂的任务,尽管可能需要权衡时间和成本,但在解决无法通过其他方法解决的任务时,这种方法具有显著优势。
如果您有任何问题或需要进一步的讨论,请随时联系我。谢谢!
常见问题
为什么不同时检索所有信息?
这是设计上的选择,同时检索所有信息可能会导致时间和成本的增加,且不一定需要所有的信息。例如,针对某些特定问题,代理可能只需要引用检索工具。
如何验证答案是否是幻觉?
我们可以使用语言模型作为判断工具,验证生成的答案是否基于原始上下文。
这种方法是否具有成本效益?
这取决于具体的使用场景。如果现有解决方案无法解决问题,而通过客户支持等方式需要花费数天时间,那么这种方法可以在几秒钟或几分钟内解决,从而节省时间和成本。
关注我,每天带你开发一个AI应用,每周二四六直播,欢迎多多交流。