书生浦语大模型实战营第三期 L1 InternLM + LlamaIndex RAG 实践学习笔记-CSDN博客
基于InternLM和LangChain从0开始搭建你的知识库
在做完RAG的demo后,想再深入学习一下RAG对于大模型输出效果的提升,想做一个动漫知识大模型,想着自己实践一下。
1. 准备数据集
首先动漫相关的问题大多都是来源于内容本身,所以我首先考虑的是构建动漫剧情的知识库。
先尝试《火影忍者》,通过萌娘百科中总结的火影剧情,利用Firecrawl将网站数据转化为 LLM 可用格式,再经过简单处理即可使用:
还准备了fate zero和fate stay night的小说:
2. 创建向量数据库
使用向量数据库Chroma,这里词嵌入模型我选择的是bge-base-zh-v1.5,后续大模型采用的词嵌入模型相同。
3. 接入 LangChain
基于本地部署的 InternLM,继承 LangChain 的 LLM 类自定义一个 InternLM的LLM子类,从而实现将 InternLM 接入到 LangChain 框架中。完成 LangChain 的自定义 LLM 子类之后,可以以完全一致的方式调用 LangChain 的接口。
4. 构建检索问答链
通过一个对象完成检索增强问答(即RAG)的全流程, 通过调用一个 LangChain 提供的 RetrievalQA 对象,通过初始化时填入已构建的数据库和自定义 LLM 作为参数,来简便地完成检索增强问答的全流程,LangChain 会自动完成基于用户提问进行检索、获取相关文档、拼接为合适的 Prompt 并交给 LLM 问答。
5. 部署WebDemo
将上文的代码内容封装为一个返回构建的检索问答链对象的函数,并在启动 Gradio 的第一时间调用该函数得到检索问答链对象,后续直接使用该对象进行问答对话,从而避免重复加载模型。定义一个类,该类负责加载并存储检索问答链,并响应 Web 界面里调用检索问答链进行回答的动作。按照 Gradio 的框架使用方法,实例化一个 Web 界面并将点击动作绑定到上述类的回答方法。使用python启动该脚本,并映射到本地。
6. 使用RAG前后效果对比
internlm2_5-7b:
internlm2_5-7b + RAG
github地址:yuzhibo-glittle/InternLM_AnimationKnowledge (github.com)