最近在研究如何使用langchain构造一个本地的大模型问答系统, 找了套源码部署,下面是一些经验, 以飨读者, 源码已经上传 源码下载 , 下面的是一些研究笔记和部署教程
问答系统架构
目前的问答系统架构都差不多
这套流程也可以称之为RAG, 主要分为三部分
内容抽取与向量化
将长文档以某种方式切分为若干 block,每个 block 大小一般会小于向量模型能处理的最大上下文。切分方式可以简单也可以是一个复杂的策略。比如,相邻的 block 之间可以保留重复的内容,用来降低简单切分方式造成的信息损失,并进一步补充 block 的上下文信息。
然后将block块向量化,存储在向量数据库中, 比如es, pg_vector, faiss等
ANN向量搜索
对于输入的query ,使用相同的embedding模型进行向量化, 然后在向量数据库中获取n个documents
文档给LLM并提问
将最近的documents合并成上下文并提供给llm问答,构造对应的prompt
简单的问答系统架构都是这样的, 但是具体的有很多细节可以做,比如如何分快, 如何提升召回率, 指令模版怎么构建等等,
关于分享的源码
分享的这套源码 源码下载 ,是同事给我的,目前已经传csdn, 0积分下载, 自己拿法律问答试了一下, 准确率还算可以, 用api形式的chatglm-turbo比本地的7b参数好很多