基于大语言模型的垂直领域知识问答系统流程学习
什么是垂直领域大语言模型应用
当前基于大模型的知识问答十分火热,大模型虽然能回答大多数通用问题,但在垂直领域中,回答的深度、准确度及时效性均有限。因此为了解决这一问题,可以结合“本地“知识结合大模型来解决。垂直领域即在某个领域内专有的知识问答,企业或个人可以利用向量数据库结合大模型及自有知识资产来构建。
为什么使用向量数据库构建垂直领域大模型应用
基于大模型构建垂直领域的大模型应用服务,主要有两种选择:第一是基于FineTuning方式,但是需要较大的综合投入成本和较低的更新频率,适用性不是很高,并非适用于所有行业团队。第二是使用Prompt Engineering,相比 Fine tuning,该方法则更加经济和便捷,门槛相对较低,只要有高质量的本地文档,以及会写prompt即可实现。
垂直领域问答系统工作流程
- 数据准备:我们前置会准备垂直领域内的知识,知识可以通过各种不同的形式提供,例如excel、ppt、word、文本文件等,
- 文本切割:为了避免大模型对超长文本的限制,以及提高检索的准确性,我们需要将原始的文本切分成多个段落,通常称为(text chunks)
- 向量化:向量化过程通常称为Embedding,经过分割后的文本段落,需要转换成可以计算的特征向量然后存储到向量数据库中。这里的文本到向量的模型可以按需选择适合的 NLP 模型,例如 BERT 或者 OpenAI提供的 text-embedding-ada-002。
- 向量存储(Vector Store) :向量存储通常有两种常见的方案,第一是向量化后的向量和原始文本分开存储,向量通过向量数据库提供的接口写入,并且每个向量都记录一个文档id,并将该 id与对应的 原始文本信息存储到关系数据库或查询引擎中(ES等),通过id关联。第二种向量和原始t文本块均存储在向量数据库中。好处是向量进行相似度匹配的时候,可以很方便的得到对应的原始文本内容。
- 相似性检索(Similarity Search):对于任意一个用户的提问 (query),需要用上述同样的模型将问题转换成相应的向量,并从向量数据库中检索与之最相似的 topK个目标向量,并返回该 topK 向量对应的文本块。在相似性检索的时候,可以直接使用向量数据库提供的相似度接口来实现,并指定合适的相似性度量方式。
- 提示(Prompting):基于向量数据库进行相似度搜索后,得到了领域专有知识,接着我们需要构造Prompt,例如Prompt模版如下:
上下文信息:<上下文>
请根据上述<>中的上下文信息,回答下列问题:
问题:<问题>
使用从向量数据库返回的topK的原始文本信息作为上下文,利用prompt 模板构造新的prompt并传给大模型,让其解答。如果达模型给出的结果可能存在输出结果冗余、文本过长、请求超时、prompt中包含非法语句导致失败等非预期结果,这个时候需要对结果进行二次处理。
此外还可以借助 LangChain等工具更方便地实现更多样、有趣的能力。
常用向量数据库介绍
常用的向量数据库有以下几种,具体信息可参考对应Github官网。
- milvus
- chroma
- pinecone
- qdrant
- typesense
- weaviate