用LangChain构建“易速鲜花”智能问答系统学习笔记 | 豆包MarsCode AI刷题
项目介绍
- 项目名称:“易速鲜花”内部员工知识库问答系统
- 项目背景:易速鲜花作为大型在线鲜花销售平台,内部信息分散、文档冗长且更新不及时,员工查询不便。
- 项目目标:开发基于内部知识手册的“Doc - QA”系统,利用LangChain框架,处理员工手册相关问题,给出精准答案。
开发框架
整体框架
- 数据源(Data Sources):聚焦非结构化数据(如PDF、Word、txt等文件),也可处理结构化数据和代码。
- 大模型应用(Application,即LLM App):以大模型为逻辑引擎生成回答。
- 用例(Use - Cases):大模型生成的回答可构建QA/聊天机器人等系统。
核心实现机制(数据处理管道Pipeline)
- Loading:用document_loaders加载各种格式文本文件,存储在列表中。
- Splitting:使用RecursiveCharacterTextSplitter将文本分割成指定大小的文档块,为向量存储做准备。
- Storage:用OpenAIEmbeddings生成嵌入,Qdrant向量数据库存储嵌入后的文档块。
- Retrieval:将问题转换为向量,与向量数据库中的向量比较,提取相关信息,使用余弦相似度。
- 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的配置使复杂任务变得简单易操作。
思考题
- 基于文档的QA系统实现流程:加载文档,分割文本,存储嵌入向量,检索相关信息,生成回答并展示。
- 可以尝试用Chroma向量数据库代替Qdrant实现该任务。
- 可以尝试用HuggingFace的google/flan - t5 - x1模型代替GPT - 3.5完成该任务。