上篇文章为大家介绍了项目实践背景和LangChain初体验结果。
初次体验效果并不够理想,这也是目前RAG常被人诟病的一点:入门简单,但用好却非常难!
因此我查阅了大量资料,基于LangChain实现的步骤,从整理知识库文档、知识库数据入库、embedding、召回Top k、构建prompt、LLM生成答案这6个阶段,分别总结了可能的调优方向(不涉及实现细节)。
就其中操作性较强的可优化点,我们也做了一些测试,确实发现了效果的显著提升。
如果对LangChain框架的实现原理还不够了解,产品视角的大模型RAG应用-知识库问答(一):LangChain初体验查看。
如何调优
整理知识库文档阶段
在最开始,我们需要确定知识库包含哪些文档,比如政策原文文档、业务积累的QA、操作指引、产品说明等,并对这些文档进行预处理。
知识库本身质量对最终效果的影响至关重要,这是大模型最终生成回答的原始语料。
在此阶段,可以考虑以下优化方向:
-
文档的格式:pdf、docx等不同格式的文档,识别难度不一样。从目前公开的资料来看,一般PDF文档的效果会更好一些,因为pdf文档的格式信息相对来说较为简洁,对大模型干扰少。但也有说.docx的效果更优的,因此实践中还是要根据场景去测试。
-
文档命名:尽量控制在10字左右,涵义简洁明了,避免标题中出现无意义的数字、符号或缩写。
-
文档语言:尽量统一为同一种。因为embedding模型对于中英文、繁简体的支持可能不一样,如果文档不做处理,引擎会把中英文切到一个 chunk 里面,向量化之后有一半可能是乱码,有一半是没有用的数据。
-
文档内容:设置可清晰识别的一二级标题,对难以处理的图片、表格、公式、超链接、附件、架构图、代码等进行特殊处理。
-
构建问答对:因为最终的交互是问答的形式,所以在构建知识库时,如果能基于用户可能的提问方式,构建问答对,作为知识库原始数据,一般能达到更好的效果,但构建问答对的过程需要耗费较多人力,还需要考虑运营成本。
需要注意的是,对知识库的处理是一个case by case的事情,并不存在一个放之四海而皆准的公式,需要根据具体的场景和需求以及处理成本去做大量实践,才能找到最适合自己的。
知识库数据入库阶段
整理好知识库文档,就需要上传文档,开始构建本地的知识库。同时,知识库文档入库时,为了便于分析和处理,需要将长文本切割为小块(chunk)。
在此阶段,可以考虑以下优化方向:
-
优化内容提取的方式:应用适当的方法从文档中提取内容,如从PDF中提取文档内容可参考https://www.luxiangdong.com/2023/10/05/extract/#/写在前面
-
设置合理的文档切割chunk_size:设置chunk_size时,需要考虑知识库文档本身是较长的文档,还是较短的内容;所选取的embedding模型在多大的chunk_size上表现最佳;对用户提问以及对应回答原文长度的预期等。在实际中,要结合这些因素,选择最佳的分块策略,具体可参考:https://www.luxiangdong.com/2023/09/20/chunk/#/分块需要考虑的因素
-
文档段落处理:基于文档切割时所设置的chunk_size,对知识库文档的段落进行拆分或者合并,尽量保证连贯语义数据不会被切割。
-
手动切割分段:为了保证知识库数据的完整性,人工对内容进行准确切割
-
知识库文档标注:为了提升召回准确性,一方面在导入前,先对知识库文档内容进行标注处理,另一方面对于切割后的chunk进行标注,如标注chunk来源哪个文档的哪个段落。
3、embedding阶段
将知识库文档切割成chunk之后,需要通过embedding技术,转换为算法可以处理的向量,存入向量数据库。
在此阶段,可以考虑以下优化方向:
-
**embedding模型的选择:**不同的embedding模型对准确性的影响较大,且不同的场景适合的embedding模型可能不一致,一般的说法是bge-large-zh模型对中文的支持较好,我们在实践中也发现bge-large-zh优于m3e-base。
-
向量库类型:LangChain Chatchat框架默认的是faiss,据说milvus也不错(但我们还没有验证过)。
一般采用 Top5 的召回准确率和 Top10 的召回准确率来评估embedding模型的好坏,TopN 召回准确率 = TopN 条 chunk 包含了答案的问题数/总的问题数。
4、召回Top-K阶段
用户提问后,同样将用户的问句向量化。将用户的问句与向量数据库中的chunk匹配,匹配出与问句向量最相似的top k个。
在此阶段,可以考虑以下优化方向:
-
检索模型优化:在上一篇的实践中我们发现,回答错误的原因有很大部分是未匹配到正确的原文片段,因此检索优化是调优的重点方向。分享一个我看到的做法:将所有的文本组织成二级索引,第一级索引是 [关键信息],第二级是 [原始文本],二者一一映射。检索部分只对关键信息做embedding,参与相似度计算,把召回结果映射的原始文本交给LLM。具体可查看:https://zhuanlan.zhihu.com/p/651179780
-
k的取值:考虑用户的提问一般会是什么问题,其对应的文档片段大致会在什么区间,根据实际的使用场景去不断测试,选择最佳的k值。一般来说,调大k值,会增加召回片段中含有正确答案的概率,但k值并不是越大越好,k值过大时,召回的无关信息更多,模型生成的答案质量反而会更差。
-
Temperature参数的值:Temperature代表的是生成内容的精准程度,1代表十分精确,不包含废话和错误信息,而0代表发散,生成的内容会更有创造性,大模型将根据已有信息编造内容。需要根据自己的场景,设置合适的Temperature值。
-
利用大模型能力增强召回效果:除了调用大模型生成答案以外,在召回阶段还可以应用大模型增强召回效果,但需要考虑多次调用大模型的成本。具体可查看:https://zhuanlan.zhihu.com/p/653808554
-
Top k的排序方式:开源框架检索返回的Top K,会按照它们在数据库中的顺序进行排序,目的是保留原始数据库的上下文结构。但开源框架返回的不一定是最优的排序,尤其是当索引有数百万或千万级别时,精确度一般不会太高。这时候可以增加top k的大小,比如从10个增加到30个,然后再使用更加精确的算法进行rerank。具体可查看:https://www.zhihu.com/question/628651389/answer/3356678699
5、Prompt阶段
匹配出与问句向量最相似的top k个chunk之后,会将匹配出的文本和问句,一起添加到配置好的prompt中,提交给LLM。
在这个阶段,可能需要一定的prompt工程,选择最合适的prompt模板。
根据论文《Lost in the Middle: How Language Models Use Long Contexts》,大模型对上下文中间位置的知识点提取较差,因此在prompt中,把query放到头部和尾部,同时根据相似度,把相似度大的文档放到context的两端,能提升回答效果。
6、LLM生成答案
prompt提交给LLM后,LLM将生成回答,返回给用户。此时最大的影响因素就是大语言模型本身的性能。
选择大模型时,也需要在成本和收益之间找到最佳平衡点,有些场景可能不需要最好的大模型,就可以实现还不错的效果。
有条件的还可以对模型进行微调,使模型能力更加匹配自身的场景。
调优实践
基于以上的分析,我们先选取了实现成本最小的方式进行调优,结果如下:
1、更换大模型:从ChatGLM2-6B替换成baichuan2-13b,发现针对我们的场景,后者的性能可以提升一倍左右。
2、更换embedding模型:将embedding模型从LangChain Chatchat默认的m3e-base替换为bge-large-zh,发现后者优于前者
3、测试不同Top k的值:比较Top 5、Top 10、Top 15的结果,发现Top 10时效果最优。

4、对文档名称进行处理**:**由于原来的政策文件,在导出时文件名会进行简化,如too_long_发展行动方案。因此,人工对文件进行重命名,上传相同文件构建知识库,同时在构建知识库时勾选【开启中文标题加强】选项,发现重命名文件对结果的提升效果不明显,但勾选【开启中文标题加强】选项后,回答的无关信息减少,效果有所提升。

目前来看,尽管效果有所提升,但仍未达到可用水平,后续我们也将尝试其他的调优策略。
程序员为什么要学大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑……
不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、LLM大模型经典书籍
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套LLM大模型报告合集
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

三、LLM大模型系列视频教程

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

LLM大模型学习路线 ↓
阶段1:AI大模型时代的基础理解
-
目标:了解AI大模型的基本概念、发展历程和核心原理。
-
内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
-
目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
-
内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.3 流水线工程
- L2.4 总结与展望
阶段3:AI大模型应用架构实践
-
目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
-
内容:
- L3.1 Agent模型框架
- L3.2 MetaGPT
- L3.3 ChatGLM
- L3.4 LLAMA
- L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
-
目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
-
内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

2万+

被折叠的 条评论
为什么被折叠?



