Jan 10, 2024
第三节:基于 InternLM 和 LangChain 搭建你的知识库
prompt-engineering-for-developers 开源项目负责人 邹丽衡
Intro
两种基于大模型的应用开发范式:RAG,Finetune
主流RAG开发框架LangChain
LLM的优势与局限性
优势:强大的语言理解、指令跟随、语言生成能力;【知识储备、逻辑推理】
局限性:时效性【高昂的训练成本、多次训练解决时效性问题不可行】、专业领域能力有限
RAG vs Finetune
RAG:Retrieval-Augmented Generation, typically involves two stages: retrieving context-relevant information and using this retrieved knowledge to guide the generation process. 将检索到的与提问相关的文档和提问一起交给大模型【占用了大量模型上下文,回答知识有限,总结性问题表现不佳】
Finetune:延承传统NLP算法,在一个新的较小训练集上轻量级训练微调,提升在新数据集上的能力,可充分拟合个性化数据,对于非可见知识(如回答风格)模拟效果很好

RAG

LangChain
LangChain 框架是一个开源工具,通过为各种 LLM 提供通用接口来简化应用程序的开发流程,帮助开发者自由构建 LLM应用。
LangChain 的核心组成模块:
链(Chains):一个链将多个组件组合实现一个端到端应用,that is, 通过一个对象(链)封装实现一系列LLM操作
Eg.检索问答链,将大模型、向量数据库等多个组件组合,覆盖实现了 RAG的全部流程

构建向量数据库
加载源文件
针对不同类型源文件选用不同的加载器,将带格式文本转化为无格式字符串
文档分块
针对单个文档分块,以满足模型上下文上限
文档向量化,存入向量数据库
以支持语义检索
可使用任一Embedding模型进行向量化,e.g. 开源词向量模型 Sentence Transformer,相对轻量、支持中文且效果较好
可使用多种支持语义检索的向量数据库,e.g. Chroma
检索问答链
LangChain 提供了检索问答链模版,可以自动实现知识检索、Prompt 嵌入、LLM问答的全部流程
RAG可能的优化点
检索方面:
基于语义进行分割,保证每一个chunk的语义完整
给每一个chunk生成概括性索引,检索时匹配索引
Prompt方面:
迭代优化Prompt策略
Web部署
如Gradio、Streamlit
实验环境:
info: Ubuntu 20.04, CUDA 11.7, CuDNN8.5-NCCL2.12, conda
resource: A100(1/4)
知识库搭建
数据收集
opencompass、lmdeploy、xtuner、InternLM-XComposer、lagent、InternLM仓库中所有的 markdown、txt 文件作为示例语料库
加载数据
使用 LangChain 提供的 FileLoader 对象来加载文件(语料),得到由文件解析出的纯文本内容,之后引入到 LangChain 框架中构建向量数据库
构建向量数据库
文本分块
LangChain 提供了多种文本分块工具,e.g.字符串递归分割器
文本向量化
使用开源词向量模型 Sentence Transformer
开源词向量模型 Sentence Transformer,相对轻量、支持中文且效果较好
LangChain 提供了引入 HuggingFace 中的模型并进行向量化的接口
Chroma 作为向量数据库
使用第三方库 nltk(Natural Language Toolkit)
when 使用开源词向量模型构建开源词向量

InterLM接入LangChain
基于本地部署的 InternLM,继承 LangChain 的 LLM 类自定义一个 InternLM LLM 子类,从而实现将 InternLM 接入到 LangChain 框架中,以完全一致的方式调用 LangChain 的接口
继承LangChain.llms.base.LLM
并重写构造函数和_call
函数
构建检索问答链
LangChain 通过提供检索问答链对象来实现对于 RAG 全流程的封装。
调用LangChain 提供的 RetrievalQA
对象,在初始化时传入数据库和自定义 LLM 作为参数
部署
基于 Gradio 框架部署到 Web 网页

作业
【基础】复现课程知识库助手搭建过程 (截图)



【进阶】选择一个垂直领域,收集该领域的专业资料构建专业知识库,并搭建专业问答助手,并在 OpenXLab 上成功部署(截图,并提供应用地址)
上海住宅投资数据查询助手
应用地址:https://openxlab.org.cn/apps/detail/hannah803/InterLM-demo


【ref】https://github.com/szhowardhuang/WuxiaQA
【ref】https://zhuanlan.zhihu.com/p/676719586