基于 InternLM 和 LangChain 搭建你的知识库
目录
作业
基础作业
复现课程知识库助手搭建过程 (截图)
进阶作业
选择一个垂直领域,收集该领域的专业资料构建专业知识库,并搭建专业问答助手,并在 OpenXLab 上成功部署(截图,并提供应用地址)
采用了开源的法律文库(just-laws),加入了向量数据库索引,提问法律问题效果如下:
注:因为账号在 OpenXLab 没有 GPU 资源配额,所以在 InternStudio 部署,并使用 SSH 转发到本地打开。
笔记
RAG(检索增强生成)
- 低成本
- 可实时更新
- 受基座模型影响大
- 单次回答知识有限
RAG流程(图片截取自视频)
Finetune(微调)
- 可个性化微调
- 知识覆盖面广
- 成本高昂
- 无法实时更新
过程:加载源文件--文档分块--文档向量化
- 确定源文件类型,针对不同类型源文件选用不同的加载器
- 核心在于将带格式文本转化为无格式字符串
- 由于单个文档往往超过模型上下文上限,我们需要对加载的文档进行切分
- 一般按字符串长度进行分割(chunk)
- 可以手动控制分割块的长度和重叠区间长度
- 使用向量数据库来支持语义检索,需要将文档向量化存入向量数据库
- 可以使用任一一种 Embedding 模型来进行向量化
- 可以使用多种支持语义检索的向量数据库,一般使用轻量级的 Chroma
将 InternLM 接入 LangChain
- LangChain 支持自定义 LLM,可以直接接入到框架中
- 可以将 InternLM 部署在本地,并封装一个自定义 LLM 类,调用本地 InternLM 即可
- LangChain 提供了检索问答链模板,可以自动实现知识检索、Prompt 嵌入、LLM 问答的全部流程
基于 LangChain 搭建 RAG 应用(图片截取自视频)
RAG 方案的优化
- 基于 RAG 问答系统的性能受限于:
- 检索精度
- Prompt 性能
- 优化方向:
- 基于语义进行分割,保证每一个 chunk 的语义完整
- 给每一个 chunk 生成概括性索引,检索时匹配索引
- 迭代优化 Prompt 策略
参考文档: