总的来说,这个仓库作为一个全面的指南,帮助理解和实现不同复杂度层级的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编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技 术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号