易速鲜花内部员工知识库问答系统初体验

210 阅读3分钟

我正在参加「豆包MarsCode AI练中学体验活动」详情请看:掘金小册上线 AI练中学功能 | 你的 AI 编程助教喊你免费领小册啦!

“易速鲜花”内部员工知识库问答系统初体验

今天,我们通过LangChain这个强大的框架,构建一个基于“易速鲜花”内部知识库的智能问答系统。

这个系统能帮助员工快速找到他们需要的信息,LLM会自动检索员工手册地内容并给出恰当地答案,极大减少员工手动查阅地时间效率低地问题。

下面是我地“初体验”过程——

整个过程主要概括为两个步骤:

  1. 文档数据加载和处理
  2. 模型训练推理

文档数据

文档载入

在数据准备阶段,我了解到了如何使用LangChain中的document loaders来加载各种格式的文本文件。

{E7D942EC-8188-42E9-AE29-63E552809C21}.png

没错,Langchain支持多种复杂格式地文件,包括pdf、doc、txt、excel,甚至PPT等等。

我们从指定的目录中读取各种类型的文档,并将它们加载到一个列表中,以便后续处理。通过遍历指定目录下的所有文件,检查文件的扩展名,如果是.pdf.docx.txt,就使用相应的加载器(PyPDFLoaderDocx2txtLoaderTextLoader)来加载文件内容,并将加载后的文档添加到documents列表中。

文本的分割与向量数据库存储

仅仅将文本文件读取出来是远远不够的,一是大模型针对长文本的读取能力还不足,二是通过简单输入文本的效率太低,三是如果涉及到图表类文本,传统的文本系统就显得无能为力。

因此,我们通过将文本切割成小块,并将其存储在向量数据库中,可以更高效地检索和处理信息。

这个过程中,我学习到了词嵌入和向量数据库的概念,这些概念虽然有些复杂,但它们在自然语言处理中非常重要。而且,他们在代码调用上还是比较简单的

# 导入用于分割文本的类
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 创建一个实例,设置分割块的大小为200,重叠部分为10
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=10)

# 使用创建的实例分割文档,得到分割后的文档列表
chunked_documents = text_splitter.split_documents(documents)

模型训练推理

最后,我们学习了如何根据问题检索信息,并生成答案。

这个过程中,我了解到了余弦相似度这个概念,它帮助我们找到与问题最相关的信息

如果两条向量数据的余弦相似度越大,那么这两个文本越可能匹配。即为回答

通过Flask应用,我们可以将用户的问题和生成的答案展示在网页上,这个交互式的体验让我感受到了AI应用的实用性。

{BEA068C2-AA8A-40BE-BDE3-30A1D946FFF1}.png

我们也可看到在控制台输出了余弦相似度匹配最高的三个问题以及回答。

{F5C2462B-BCA9-4F22-A144-B6DBC9A183A6}.png

个人感悟💡

通过这次学习,初步了解LangChain的工作流程,体验到了将理论知识转化为实际应用的过程。

同时,这个过程中,我也学习到了如何处理非结构化数据,如何将数据转化为机器可以理解的形式,以及如何利用向量数据库存储和检索这些数据。真正搭建起了第一个langchain应用。