项目名称:“易速鲜花”内部员工知识库问答系统。
-
- “易速鲜花” 内部员工知识库问答系统旨在解决公司内部资料分散、查询不便、文档冗长及版本更新不及时等问题。
- 利用 LangChain 框架,处理内部知识手册,实现基于文档的精准问答功能。
-
开发框架
- 分为数据源、大模型应用和用例三部分。数据源主要聚焦非结构化数据处理;大模型应用以大语言模型为逻辑引擎生成回答;用例可构建 QA / 聊天机器人等系统。
- 核心实现机制是数据处理管道,包括加载、分割、存储、检索和输出五个环节。
-
具体流程
- 数据的准备和载入:使用 LangChain 中的 document_loaders 加载各种格式的文本文件,如 pdf、word 和 txt,并存储在列表中。需导入 OpenAI 的 API Key,可能还需安装特定工具包。
- 文本的分割:用 RecursiveCharacterTextSplitter 将加载的文本分割成较小的块,为嵌入和向量存储做准备。
- 在高维空间中,常用的向量距离或相似度计算方法有欧氏距离和余弦相似度。
- 欧氏距离:这是最直接的距离度量方式,就像在二维平面上测量两点之间的直线距离那样。在高维空间中,两个向量的欧氏距离就是各个对应维度差的平方和的平方根。
- 余弦相似度:在很多情况下,我们更关心向量的方向而不是它的大小。例如在文本处理中,一个词的向量可能会因为文本长度的不同,而在大小上有很大的差距,但方向更能反映其语义。余弦相似度就是度量向量之间方向的相似性,它的值范围在-1到1之间,值越接近1,表示两个向量的方向越相似。两者各有长处,前者多用于关心数据的绝对大小时,后者关心的是两个向量的角度差异,而不是它们的大小差异,词向量的方向更能反映其语义相似性。
-
向量数据库存储:将分割后的文本转换为嵌入形式,存储在向量数据库中。本项目使用 OpenAIEmbeddings 生成嵌入,Qdrant 作为向量数据库,并介绍了词嵌入和向量数据库的概念。
-
相关信息的获取:通过比较问题向量与向量数据库中的向量,提取最相关信息。建议使用余弦相似度作为度量标准处理文本数据,创建聊天模型和 RetrievalQA 链,包括大模型和负责检索相关文档的 retriever。
-
生成回答并展示:使用 Flask 应用接收用户问题,利用 RetrievalQA 链生成答案并通过网页呈现。
-
二、技术面拓展
-
多种数据源支持
- 目前项目聚焦于非结构化数据处理,但 LangChain 框架可以支持多种数据源,包括结构化数据(如 SQL)和代码等。可以进一步探索如何整合这些不同类型的数据,为员工提供更全面的知识查询服务。
- 例如,对于结构化的员工数据库,可以提取员工的职位、部门等信息,与文档知识结合,更好地回答与特定员工群体相关的问题。
-
模型选择与优化
- 文中使用了 OpenAI 的模型进行嵌入和生成回答,但 LangChain 支持多种开源模型。可以对比不同模型在这个项目中的性能,选择更适合 “易速鲜花” 需求的模型,降低成本。
- 对大语言模型进行微调,利用公司内部的特定领域数据进行训练,提高回答的准确性和针对性。可以采用迁移学习等技术,在有限的计算资源下实现较好的效果。
-
增强用户交互
- 目前的网页交互较为简单,可以添加更多的用户反馈机制,如对回答的满意度评价、问题追问功能等,以不断改进系统性能。
- 实现多轮对话功能,让问答系统更好地理解用户的复杂问题和上下文,提供更连贯的回答。
-
性能优化
- 对于大规模的文档数据,优化文本分割和向量存储的过程,提高加载和检索速度。可以采用分布式存储和计算技术,处理更大规模的数据。
- 监控系统的性能指标,如响应时间、吞吐量等,及时发现和解决性能瓶颈问题。
-
安全与权限管理
- 由于涉及公司内部知识,需要加强安全管理,确保只有授权员工可以访问问答系统。可以采用身份验证、授权机制等技术手段。
- 对敏感信息进行加密处理,防止数据泄露。同时,考虑对用户的问题和回答进行审计,以满足合规要求。
总结说,这一节课我们了解了一个应用大模型的搭建流程,“嵌入”(Embedding)的形式存储到向量数据库,应用程序从存储中检索分割后的文档(例如通过比较余弦相似度,找到与输入问题类似的嵌入片把问题和相似的嵌入片传递给语言模型(LLM),使用包含问题和检索到的分割的提示生成答案。这为后面我们的继续学习指明了几大方向。