总的来说,这个仓库作为一个全面的指南,帮助理解和实现不同复杂度层级的RAG应用。无论你是刚开始学习基础知识的初学者,还是想要深化专业知识的有经验开发者,你都能在这里找到有价值的见解和实用知识,助力你的学习之旅。让我们一起开启这段激动人心的探索,充分发掘RAG应用的全部潜力。
欢迎来到RAG应用的基础层级!在这里,我们将从基础开始,为你探索检索增强生成(Retrieval-Augmented Generation)领域奠定基础。这个层级旨在向你介绍使用RAG模型的核心概念和基本技术。完成这部分内容后,你将对如何遍历文件系统进行文本生成、如何分块和批处理文本、以及如何与嵌入API交互有扎实的理解。让我们一起深入探索RAG应用的激动人心的功能吧!
[此处省略代码部分]
[此处省略代码部分]
[此处省略代码部分]
在这一层,我们深入探讨检索增强生成(RAG)应用的世界。这个层级是为那些已经掌握基础知识并准备探索更高级技巧和优化方法的人设计的。在这里,我们专注于通过更好的异步编程、改进的分块策略以及处理流程中的强大重试机制来提高RAG应用的效率和有效性。
在搜索流程中,我们引入了一些复杂的方法,如更优的排序算法、查询扩展和重写,以及执行并行查询,以提高搜索结果的质量和相关性。
此外,回答流程也得到了改进,以提供更有结构和信息量的回答,包括引用特定文本块和采用流式响应模型以实现更好的交互。
[此处省略代码部分]
[此处省略代码部分]
在第三层,重点转向关键的可观察性实践。这个阶段强调实施全面的日志记录机制的重要性,以监控和衡量应用程序的多方面性能。建立强大的可观察性允许你快速定位和解决任何瓶颈或问题,确保最佳功能。以下我们列出了几种对实现这一目标至关重要的关键日志类型。
广泛事件跟踪
| 查询 | 重写后的查询 | 延迟 | ... |
|---|---|---|---|
| ... | ... | ... | ... |
示例:我们曾发现对于包含"最新"的查询,它选择的日期实际上是当前日期。通过包含考虑"最新"为一周或更长时间的少量示例,我们能够快速修复这个问题。
我们还可以利用所有正面示例来研究如何训练一个更好地进行查询扩展的模型。
通过记录引用,我们可以快速了解模型是否引用了正确的信息,哪些文本块很受欢迎,审查并了解模型是 否引用了正确的信息。此外,我们还可能在未来构建一个模型,以理解哪些文本块更重要。
| 查询 | 重写后的查询 | ... | 引用 |
|---|---|---|---|
| ... | ... | ... | [1,2,4] |
有几种方法可以实现这一点。例如,在引用某些内容时,你不仅可以包含展示给语言模型的内容,还可以包含被引用的内容。如果某些内容被展示给语言模型但未被引用,我们可以将其作为数据集的一部分。
| 查询 | 重写后的查询 | ... | 来源 | 被引用 |
|---|---|---|---|---|
| ... | ... | ... | [1,2,4] | [1,2] |
通过附加这些小型元数据,我们将能够非常轻松地识别可能表现不佳的查询。
| 查询 | 重写后的查询 | ... | 平均余弦相似度分数 | 重排序分数 |
|---|---|---|---|---|
| 法国的首都是什么? | 法国的首都是什么? | ... | 0.9 | 0.8 |
| 谁最后修改了文件? | 谁最后修改了文件? | ... | 0.2 | 0.1 |
在这里你可能会发现"哦,显然我无法回答关于文件修改的问题",因为这甚至不在我的索引中。
通过包含其他组信息,我们可以快速识别某个特定群体是否有不好的体验
示例可能包括:
这可以帮助你了解很多关于应用程序使用方式的不同信息。也许使用不同设备的人会提出较短的查询,而这些查询表现不佳。或者当新组织注册时 ,他们提出的问题类型没有得到语言模型的良好服务。将来我们会讨论其他指标,但仅通过实施平均余弦相似度分数和自由排序分数,你就可以免费获得这些信息,无需额外工作。
只需构建一些按这些属性分组并查看平均分数的简单仪表板,你就可以学到很多。我的建议是每周在站会时审查这些内容,查看一些示例,并找出我们可以如何改进我们的系统。当我们看到较差的分数时,我们可以查看查询和重写后的查询,试图理解到底发生了什么。
到这个阶段,你肯定应该有用户了。你已经通过理解查询、重写查询以及监控用户如何实际使用你的系统为成功做好了准备。接下来的几个步骤将围绕改进特定指标以及实现这一目标的不同方法。
在这个阶段,评估对于理解我们系统的性能和有效性至关重要。主要来说,我们处理两个不同的系统:搜索系统和问答(QA)系统。通常会看到很多人关注评估QA系统,因为它直接与最终用户的查询进行交互。然而,同样重要的是不要忽视搜索系统。搜索系统作为骨干,获取相关信息,QA系统在此基础上构建答案。全面的评估策略应该包括这两个系统,单独评估它们,并评估它们在为用户查询提供准确、相关答案方面如何良好集成和互补。
这里的目标是加强我们对各个层级(K)的精确度和召回率等关键指标的关注。通过全面记录所有引用数据,我们有坚实的基础来使用语言模型对搜索系统的有效性进行深入评估。
对于数据集可能有限的情况,转向合成数据是一种实用的方法。这种方法涉及选择随机文本块或文档,然后提示语言模型生成这些文本可以回答的问题。这个过程对于验证搜索系统准确识别和检索负责生成这些问题的文本块的能力至关重要。
[此处省略代码部分] return { "召回率@5": (如果text_chunk在search_results前5个结果中则为1,否则为0), ... }
平均召回率 = sum(测试() for _ in range(n)) / n
你的代码实际上不应该是这样的,但这基本上概括了我们可以综合生成问题并将其用作评估的一部分的想法。你可以尝试发挥创意。但最终它将取决于你实际编写生成提示的能力。
### 评估回答系统
这要棘手得多,但通常人们会使用类似的框架来评估问题。在这里,我建议花更多时间构建一个实际包含答案的数据集。
```python
def 测试():
text_chunk = 抽样文本块(n=...)
问题, 答案 = 询问AI(f"为{text_chunk.text}生成问题和答案")
ai_答案 = rag应用(问题)
return 询问AI(f"对于问题{问题},给定{答案}是正确答案,回答{ai_答案}是否正确?")
建立反馈机制以获得更好的分数也很重要。我建议建立一个点赞、点踩评级系统,而不是五星评级系统。我现在不会详细讨论,但这是我强烈推荐的。
合成数据的目的是帮助你快速获得一些指标。它将帮助你建立这个评估流程,希望随着你获得更多用户和更多真实问题,你将能够使用我们拥有的一系列测试来了解我们在哪些方面表现良好,在哪些方面表现不佳。精确度、召回率、平均排名分数等。
在这一点上,你应该能够使用合成数据和生产数据构建一个极其多样化的数据集。我们还应该有一套可以用来评估答案质量的分数。
| org_id | 查询 | 重写 | 答案 | 召回率@k | 精确度@k | 平均排名分数 | 重排序分数 | 用户反馈 | 引 用 | 来源 | ... |
|---|---|---|---|---|---|---|---|---|---|---|---|
| org123 | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
现在我们可以通过进行探索性数据分析来了解我们的表现如何。我们可以查看平均排名分数和重排序分数,看看是否有任何模式。我们可以查看引用,看看是否有任何模式。我们可以查看用户反馈,看看是否有任何模式。我们可以查看来源,看看是否有任何模式。我们可以查看查询,看看是否有任何模式。
我们可以使用聚类来了解查询中是否存在任何模式。我们可以使用聚类来了解引用中是否存在任何模式。我们可以使用聚类来了解来源中是否存在任何模式。我们可以使用聚类来了解用户反馈中是否存在任何模式。
我们稍后会更深入地讨论,但总的想法是我们还可以引入聚类主题。我发现通常有两种不同类型的聚类我们会检测到。
主题由文本块和查询的性质捕获。能力由来源的性质或我们拥有的额外元数据捕获。
能力可能更像是:
这些都是你在聚类和探索数据集时可能会发现的东西。
随着我们继续探索RAG应用的深度,以下领域将在后续级别中讨论,每个级别都旨在提高RAG系统的复杂性和功能:


职场AI,就用扣子
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!


多风格AI绘画神器
堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。


零代码AI应用开发平台
零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式 导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作 改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号