基于InternLM和LangChain搭建知识库
1 大模型开发范式
LLM的局限性
- 知识受限:最新知识无法实时获取
- 专业能力有限:有广度无深度
- 定制化成本高:训练成本高
RAG VS Finetune
RAG:
- 无需重新训练
- 组织外挂加入知识
- 容易受基座模型的影响
- 问题+回答一起送入大模型,占据token长度
Finetune
- 个性化微调:风格,领域知识
- 知识面覆盖广:新的数据集及通用数据集按照比例混合
- 训练成本高
- 无法实时更新
RAG检索增强
2 LangChain简介
- 开源
- 通用
- 核心模块:
- chains
- agent
基于LangChain搭建RAG应用
3 构建向量数据库
- 加载源文件
- 不同的文件有不同的加载方式
- 文档分块chunk
- 字符串长度分割
- 重叠区间
- 代码的话就是代码块 类等
- 文档向量化
- 文档embedding
- 存入向量数据库
4 搭建知识库助手
限制:
- 检索精度
- prompt性能
5 Web Demo部署
6 动手实战环节
创建开发机
新建虚拟环境
安装相关依赖
下载模型文件
本机有,可以先复制
- internLM-7B
- modelscope
- huggfingace:sentence-transformer
- nltk
- punkt
- tagger
搭建自己知识库
- 克隆opencompass项目
- 构建向量数据库
- 导入数据md,txt文件
- 获取文件中的文本
- 对文本进行分块
- 词向量模型进行编码
- 加载数据到向量库Chroma
- 向量库保存到本地磁盘
将InternLM接入LangChain
构建检索问答链
- 加载词向量模型
- 加载LLM模型
- 定义Prompt 模板
- 不懂的要回答说不知道,缓解幻觉问题
- 运行chain
-
存储检索问答链的对象
-
实例化核心功能对象
-
gradio创建聊天机器人页面
执行代码
python web_demo.py
自己部署,知识库为kkndme关于房价的
- 注意:demo要在本地打开,不然显示界面乱码;本地打开需要进行端口映射
参考
- InternLM-tutorial