基于 InternLM 和 LangChain 搭建你的知识库
大模型开发范式
LLM的局限性:
- 知识实效性受限:如何让LLM能够获得更新的知识
- 专业能力有限:如何打造垂直领域大模型
- 定制化成本高:如何打造个人专属的LLM应用
两种开发范式:
RAG 检索增强生成
LangChain简介
LangChain框架是一个开源工具,通过为各种LLM提供通用接口来简化应用程序的开发流程,帮助开发者自由构建LLM应用。
LangChain的核心组成模块:
- 链:将组件组合实现端到端应用,通过一个对象封装实现一系列LLM操作
- Eg.检索问答链:覆盖实现了GAR(增强检索生成)的全部流程
构建向量数据库
- 加载源文件
确定源文件类型,针对不同类型源文件选用不同的加载器,核心在于将带格式文本转化为无格式字符串 - 文档分块
由于单个文档往往超过了模型上下文上限,我们需要对加载的文档进行切分
一般按字符串长度进行分割
可以手动控制分割块的长度和重叠区间的长度 - 文档向量化
使用向量数据库来支持语义检索,需要将文档向量化存入向量数据库
可以使用任一一种Embedding模型来进行向量化
可以使用多种支持语义检索的向量数据库,一般使用轻量级的Chroma
搭建知识库助手
将InternLM接入LangChain
基于RAG的问答系统性能核心受限于:
- 检索精度
- Prompt性能
一些可能优化的点: - 检索方面:
- 基于语义进行分割,保证每一个chunk的语义完整
- 给每个chunk生成概括性索引,检索时匹配索引
- Prompt方面
- 迭代优化Prompt策略
Web Demo部署
有很多支持简易web部署的框架,如Gradio、Streamlit等
环境配置
在环境中安装运行 demo 所需要的依赖
# 升级pip
python -m pip install --upgrade pip
pip install modelscope==1.9.5
pip install transformers==4.35.2
pip install streamlit==1.24.0
pip install sentencepiece==0.1.99
pip install accelerate==0.24.1
在 /root 路径下新建目录 data,在目录下新建 download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 python /root/data/download.py 执行下载,模型大小为 14 GB,下载模型大概需要 10~20 分钟.
下载 NLTK 相关资源
我们在使用开源词向量模型构建开源词向量的时候,需要用到第三方库 nltk 的一些资源。正常情况下,其会自动从互联网上下载,但可能由于网络原因会导致下载中断,此处我们可以从国内仓库镜像地址下载相关资源,保存到服务器上。
cd /root
git clone https://gitee.com/yzy0612/nltk_data.git --branch gh-pages
cd nltk_data
mv packages/* ./
cd tokenizers
unzip punkt.zip
cd ../taggers
unzip averaged_perceptron_tagger.zip
下载本项目代码
cd /root/data
git clone https://github.com/InternLM/tutorial