学习笔记2:LangChain 实战项目-易速鲜花内部员工知识库问答系统
项目名称:易速鲜花内部员工知识库问答系统 项目介绍:这个项目是基于 LangChain 框架开发的一个问答系统,主要解决易速鲜花内部员工对于公司SOP手册的查询问题。该系统能够从内部各种知识手册中理解员工的问题,并根据最新的员工手册给出精准的答案。
项目框架: 整体框架分为三个部分:
- 数据源(Data Sources):包括非结构化的数据(如PDF)和结构化的数据(如SQL、代码)。
- 大模型应用(Application,即LLM App):通过大模型作为逻辑引擎,生成问题的答案。
- 用例(Use-Cases):将大模型生成的答案应用于QA/聊天机器人等系统。
核心实现机制: 本项目的核心实现机制是数据处理管道,具体分为以下五个步骤:
- Loading:将文档加载为LangChain可读取的形式。
- Splitting:将文档切分为指定大小的文档块。
- Storage:将文档块以嵌入的形式存储到向量数据库中。
- Retrieval:从存储中检索分割后的文档,找到与输入问题类似的嵌入片。
- Output:将问题和嵌入片传给语言模型,生成回答。
数据的准备和载入: 首先需要加载各种格式的文本文件,并将其存储在一个列表中。这些文本文件包括PDF、Word和Txt格式的文件。使用LangChain的document_loaders模块中的加载器进行文档加载。
文本的分割: 将加载的文本分割成较小的块,以便进行嵌入和存储。使用LangChain的text_splitter模块中的RecursiveCharacterTextSplitter进行文本分割。
向量数据库存储: 将分割后的文本转换为嵌入形式,并存储在向量数据库中。这里使用了OpenAIEmbeddings模块进行嵌入生成,使用Qdrant向量数据库进行存储。
相关信息的获取: 根据问题和任务提取最相关的信息。使用向量之间的余弦相似度进行匹配和比较,找到与问题最匹配的答案。
生成回答并展示: 使用Flask应用接收用户的问题,并根据问题检索信息生成答案。将答案显示在网页上。
总结: 整个流程如下图所示,先将本地知识切分为块并进行嵌入存储,然后将用户问题和从向量数据库中检索到的信息传递给大模型,最后生成回答并展示。
通过这个项目的实战演示,能够感受到LangChain作为一个基于大语言模型的应用开发框架的强大功能和简单易用的特点。在后续的课程中,会对LangChain的具体组件进行详细讲解,并实现更多的任务和应用。