InternLM Training - Lec3

InternLM Training - Lec3

Jan 10, 2024

第三节:基于 InternLM 和 LangChain 搭建你的知识库

prompt-engineering-for-developers 开源项目负责人 邹丽衡

文档 视频 算力平台ID: 25940

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

实验环境:

InternStudio

info: Ubuntu 20.04, CUDA 11.7, CuDNN8.5-NCCL2.12, conda

resource: A100(1/4)

知识库搭建

  1. 数据收集

opencompass、lmdeploy、xtuner、InternLM-XComposer、lagent、InternLM仓库中所有的 markdown、txt 文件作为示例语料库

  1. 加载数据

使用 LangChain 提供的 FileLoader 对象来加载文件(语料),得到由文件解析出的纯文本内容,之后引入到 LangChain 框架中构建向量数据库

  1. 构建向量数据库

  • 文本分块

  • 文本向量化

    • 使用开源词向量模型 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