在项目实训过程中,根据项目实训的需要,我们选择首先了解RAG架构,希望借用RAG架构实现我们对大模型的应用。
网络上已经有许多介绍RAG架构的博客,这里主要介绍RAG架构以及实现RAG架构的Langchain,并探索了我们使用RAG架构的可能性。
RAG流程
-
入库
-
入库就是把原始分本分割,然后每个分割后的短文本,进行分词(chunk),然后向量映射(embedding),最后入库。
-
库一般使用向量数据库
-
-
查询
-
查询时先查询本地向量知识库,查询也被转换成向量,以便与文档的嵌入向量进行比较,抽取数据,把结果作为大模型的输入,进行查询
Langchain
langchain可以实现基于各种数据库的问答
-
文档加载器loader,支持加载各种文档
-
-
文本分割 text splitters
-
打对勾的是可以展示每个文本的来源的文本分割器
-
存储
-
通常使用vectorStore 和embeddings模型完成,langchain中集成了
-
langchain可以与任何大语言模型进行集成
如果是openAI(如果用GLM,改成GLM的API密钥,将API密钥存储在环境变量中)
如果直接调用本地部署的大模型,就不用api钥匙了
-
安装依赖:
-
设置环境变量:
(如果是glm-6b: 本地部署用chatlocal
-
文本加载、分割、存储
我们需要爬取数据,保存数据,可以采用文件存储csv或者nosql(mongoDB)
比如:使用mongoDB
这里chroma中会自动根据向量的特征建立索引,所以无需手动建立索引
-
检索,prompt
(换成我们的promt就行)
RAG处理管道,将检索到的文档格式化为一个字符串,使用prompt,输入到llm,解析大模型输出,转换成字符串格式
-
调用:
-
向LLM问问题,将会得到输出
-