目录
一、大模型开发范式简介
1.传统LLM的局限性
①传统LLM的知识时效性收限制,文本库不能实时更新,因此如何让LLM获取最新知识是重中之重;
②传统LLM文本信息仅限用于通用环境中,针对特殊领域例如医疗、汽车等无法提供准确答复;
③传统LLM的定制化成本极高,需要配置专用预料库。
2.大模型开发的两种范式简介
分为RAG(检索增强生成)和Finetune(微调)。
其中RAG的核心思想是:给大模型外挂知识库,对于用户的提问,首先从知识库中匹配提问对应相关的文档,将文档和提问一起提交给大模型来生成回答,提升大模型的知识储备。
依托RAG核心,其优点是①成本低,②可实时更新,③不需要重新训练,不需要GPU算力,对于新知识,只需组织加入到外挂知识库中即可。其缺点为:①受基座模型影响大,②每次应用需要将检索到的相关文档和用户提问,一起交给大模型,占用了大量的核心上下文,单次回答知识有限。
Finetune的核心思想为:在一个新的较小的训练集上进行轻量级的训练微调,从而提升模型在这个新数据集上的能力。
Finetune的优点包括:①可个性化微调,②知识覆盖面广。其缺点为:①成本昂贵,需要自行训练,②无法实时更新
3.RAG开发范式简介
简介详见下图:
二、LangChain简介
1.概述
LangChain框架是一个开源工具,通过为各种LLM提供通用接口来简化应用程序的开发流程,帮助开发者自由构建LLM应用
2.核心组成模块
Chain(链):将组件组合实现端到端应用,通过一个对象封装实现一系列的LLM操作
Eg:检索问答链,通过将大模型、向量数据库等多个组件组合在一起,覆盖实现了RAG(检索增强生成)的全部流程
3.基于LangChain搭建RAG应用的流程图
三、构建向量数据库
1.加载源文件
①确定元文件类型,针对不同类型源文件选用不同的加载器;
②核心在于将格式文本转化为无格式字符串。
2.文档分块
①由于大文档往往超过模型上下文上线,需要对加载的文档进行拆分;
②一般按字符串长度进行分割;
③可以手动控制分割快的长度和重叠区间长度,提升向量数据库的检索效果。
3.文档向量化
①使用向量数据库来支持语义检索,需要将文档向量化并存入向量数据库;
②可以使用任一一种Embedding模型来向量化 (sentence transformer);
③可以使用多种支持语义检索的向量数据库,一般使用轻量级的Chroma
四、搭建知识库助手
1.基于InternLM搭建知识库助手
①LangChain支持自定义LLM,可以直接接入到框架中;
②可以将InternLM部署到本地,将其封装一个LangChain的LLM类,调用本地的InternLM即可;
2.构建检索问答链
①LangChain提供了检索问答链模板,可以自动实现知识检索、Prompt嵌入、LLM问答的全流程;
②基于InternLM的自定义LLM个已构建的向量库接入到检索问答链的上游;
③调用检索问答链,即可实现知识库助手的核心功能
3.RAG方案优化建议
①依据RAG的问答系统性能核心受限于检索精度及Prompt性能;
②在检索方面或者Prompt方面进行优化
4.流程示意图
五、Web Demo部署
可以应用gradio或者Streamlit进行部署。
六、动手实战环节