- 文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等 •
- 文本分割(Splitting):文本分割器把Documents 切分为指定大小的块,我把它们称为“文档块”或者“文档片”
- 存储(Storage):存储涉及到两个环节,分别是:
◦ 将切分好的文档块进行嵌入(Embedding)转换成向量的形式
◦ 将Embedding后的向量数据存储到向量数据库 - 检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片
- Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案
文本加载器(Document Loaders)
文本加载器就是将用户提供的文本加载到内存中,便于进行后续的处理
文本切割器(Text Splitters)
文本分割器把Documents 切分为指定大小的块,我把它们称为“文档块”或者“文档片” 文本切割通常有以下几个原因
• 为了更好的进行文本嵌入以及向量数据库的存储
• 通常大语言模型都有上下文的限制,如果不进行切割,文本在传递给大模型的时候可能超出上下文限制导致大模型随机丢失信息
文本切割器的概念是非常容易理解的,这里我们简单了解下文本切割器的工作流程
- 将文本切割成小的,语义上有意义的块(通常是句子)
- 开始将这些小块组成一个较大的块,直到达到某个块的大小(这个会通过某种函数测量)
- 一旦达到该大小,就将该块作为自己的文本片段,并开始创建一个新的文本块,同时保留一些重叠(以保持块之间的上下文)。
文本嵌入模型(Text Embedding models)
文本嵌入模型是用来将文本转换成数值向量的工具,这些向量能够捕捉文本的语义信息,使得相似的文本在向量空间中彼此接近。这对于各种自然语言处理任务,如文本相似性比较、聚类和检索等,都是非常有用的。下面是一段对嵌入的解释
文本检索
一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片。这里主要利用了大模型的能力
AnythingLLM 本地安装、配置
- 选择大模型
- 选择文本嵌入模型
- 选择向量数据库
构建本地知识库
AnythingLLM中有一个Workspace的概念,我们可以创建自己独有的Workspace跟其他的项目数据进行隔离。
- 首先创建一个工作空间
- 上传文档并且在工作空间中进行文本嵌入
3. 选择对话模式
AnythingLLM提供了两种对话模式:
- Chat模式:大模型会根据自己的训练数据和我们上传的文档数据综合给出答案
- Query模式:大模型仅仅会依靠文档中的数据给出答案
- 测试对话
当上述配置完成之后,我们就可以跟大模型进行对话了