用LangChain构建“易速鲜花”智能问答系统学习笔记 | 豆包MarsCode AI刷题

72 阅读2分钟

项目介绍

  • 项目名称:“易速鲜花”内部员工知识库问答系统
  • 项目背景:易速鲜花作为大型在线鲜花销售平台,内部信息分散、文档冗长且更新不及时,员工查询不便。
  • 项目目标:开发基于内部知识手册的“Doc - QA”系统,利用LangChain框架,处理员工手册相关问题,给出精准答案。

开发框架

整体框架

  • 数据源(Data Sources):聚焦非结构化数据(如PDF、Word、txt等文件),也可处理结构化数据和代码。
  • 大模型应用(Application,即LLM App):以大模型为逻辑引擎生成回答。
  • 用例(Use - Cases):大模型生成的回答可构建QA/聊天机器人等系统。

核心实现机制(数据处理管道Pipeline)

  1. Loading:用document_loaders加载各种格式文本文件,存储在列表中。
  2. Splitting:使用RecursiveCharacterTextSplitter将文本分割成指定大小的文档块,为向量存储做准备。
  3. Storage:用OpenAIEmbeddings生成嵌入,Qdrant向量数据库存储嵌入后的文档块。
  4. Retrieval:将问题转换为向量,与向量数据库中的向量比较,提取相关信息,使用余弦相似度。
  5. Output:创建Flask应用接收用户问题,用RetrievalQA链获取相关文档并生成答案,通过index.html渲染呈现。

具体实现步骤

数据的准备和载入

  • 导入OpenAI的API Key,用于文档嵌入和生成回答。
  • 安装相关工具包(如PyPDF、Docx2txt等)。
  • 从指定目录加载各种格式的文本文件,将文本存储在列表中。

文本的分割

  • 使用RecursiveCharacterTextSplitter将加载的文本分割成200字符左右的文档块,设置chunk_size=200,chunk_overlap=10。

向量数据库存储

  • 用OpenAIEmbeddings为分割后的文本生成嵌入。
  • 使用Qdrant向量数据库存储嵌入,指定collection_name。

相关信息的获取

  • 创建聊天模型(如ChatOpenAI的GPT - 3.5)。
  • 创建RetrievalQA链,包括负责回答问题的LLM和负责检索相关文档的retriever。

生成回答并展示

  • 创建Flask应用,接收用户问题,用RetrievalQA链生成答案。
  • 通过index.html对答案进行渲染和呈现。

总结

  • 先将本地知识切片做Embedding存储到向量数据库,再把用户输入和检索到的本地知识传递给大模型生成回答。
  • LangChain + LLM的配置使复杂任务变得简单易操作。

思考题

  1. 基于文档的QA系统实现流程:加载文档,分割文本,存储嵌入向量,检索相关信息,生成回答并展示。
  2. 可以尝试用Chroma向量数据库代替Qdrant实现该任务。
  3. 可以尝试用HuggingFace的google/flan - t5 - x1模型代替GPT - 3.5完成该任务。