02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统
项目及实现框架
- 深入了解
- 翻译
- 解释
- 总结
LangChain是一个基于大语言模型的应用开发框架,旨在构建智能问答系统,解决“易速鲜花”内部员工知识库的问题。该系统利用LangChain框架处理员工手册中的问题,并提供精准答案。文章介绍了如何利用LangChain快速构建智能问答系统,包括文档加载器、文本分割器和向量数据库等工具的使用。通过向量数据库存储和信息提取,实现了文档到问答系统的完整流程。文章还详细介绍了向量数据库的存储和检索方法,以及欧氏距离和余弦相似度的应用。最后,通过创建RetrievalQA链,展示了如何生成并展示系统用户的具体问题的答案。整体而言,本文通过介绍LangChain框架的功能和应用,为读者提供了构建智能问答系统的技术指南。 文章还展示了问答系统的UI实现,使用Flask框架构建了一个网页,用户可以在网页上输入问题并获取系统生成的答案。通过展示实际代码和HTML网页的关键部分,读者可以了解系统的交互方式和界面设计。此外,文章还提出了思考题,引导读者对基于文档的QA系统的实现流程、LangChain支持的向量数据库和大语言模型进行思考和讨论。 总的来说,本文通过具体示例和技术讨论,向读者展示了LangChain框架的强大功能和应用前景,为开发智能问答系统的技术人员提供了有益的参考和启发。
《LangChain 实战课》,新⼈⾸单¥59
全部留言(51)
- 最新
- 精选
- shatu学习小结: 排坑点: 1.文本分割默认采用“utf-8”,中文字符会出错,改为“gbk”后解决 问题点: 1.MultiQueryRetriever在代码中的意义是什么? 2.Langchain中不同Retrievers应该如何选择? 3.对于中文而言,如何判断不同文本分割方法的效果差异?
作者回复: shatu兄弟来啦。一年多前,你在《零基础实战机器学习》专栏中给我留言,解决了matplotlib绘图无法显示中文和负号的问题。我把那个方案写进了《数据分析咖哥十话》书里面了,序言中我同时也感谢了你。 ------------------------------------------- https://time.geekbang.org/column/article/414504 2.matplotlib作图标签产生乱码的解决方案 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 ------------------------------------------- 这里,谢谢你的再次分享。 对于几个问题: 1.MultiQueryRetriever在代码中的意义是什么? MultiQueryRetriever - 这是LangChain中的检索器之一。它的特点使用语言模型从不同的视角为给定的用户输入查询生成多个查询。然后使用这些查询来检索一组相关文档。—— 这是一种常见策略。 2.Langchain中不同Retrievers应该如何选择?—— Langchain中Retriever很多,MultiQueryRetriever、VectorRetriever和KeywordRetriever等等。详见第15课。 不同的Retrievers在Langchain中有不同的选择方式。选择Retriever的方法取决于您的需求和数据类型。 如果数据是基于向量的,可以选择使用VectorRetriever。VectorRetriever使用向量数据库进行检索,并根据查询向量找到最相似的文档。可以使用不同的嵌入模型(如OpenAIEmbeddings)来构建向量数据库,并使用VectorRetriever进行检索。 如果数据是基于关键词的,可以选择使用KeywordRetriever。KeywordRetriever使用关键词匹配的方法进行检索。可以将关键词与文档进行关联,并使用KeywordRetriever根据关键词进行检索。 如果希望自动生成多个查询并获取更丰富的结果,可以选择使用MultiQueryRetriever。MultiQueryRetriever使用语言模型生成多个查询,并根据这些查询检索相关文档。MultiQueryRetriever生成多个查询的不同视角,以获取更多潜在相关的文档。 3.对于中文而言,如何判断不同文本分割方法的效果差异? --- 似乎没有一定之规,你可以试试记住方法,打印出来分割结果看一看。可能按照句子或者段落分吧。或者一个语义块分成一片(类似与段落)。
2023-09-20归属地:北京314 - Geek_ebb87d其实不仅图片,文档中如果有表格,处理问答的效果也不好,表格方面老师是否有思路?
作者回复: 补充内容:随着LangChain文档的发展,有了一些读表策略,包括使用Unstrutured 库 摘出表格 等等 包括多模态的一些处理。 https://github.com/langchain-ai/langchain/blob/master/cookbook/Semi_Structured_RAG.ipynb 这些新内容,值得总结成一个新专栏!!!我要发奋学习了。 的确,这是一个挑战。难度在于表格通常包含结构化信息,与传统的连续文本表示方式不同。 那么,我们可以这么的做一些尝试哈: 第一个是表格数据的预处理:将表格数据转换为连续文本描述。例如,一个表格中的条目"姓名: 张三, 年龄: 25"可以被转化为"张三的年龄是25岁"。这样就将表格内容转换为模型更容易理解的格式。 第二个思路是融合一些专门基于表格数据而训练的大模型框架,比如说PyTorch Tabular或者TabNet,参考: https://paperswithcode.com/paper/pytorch-tabular-a-framework-for-deep-learning https://paperswithcode.com/method/tabnet 第三个思路,是否可以结合知识图谱。知识图谱是表示知识的图形结构。通过将表格数据转换为知识图谱中的实体和关系,是否可以使用图神经网络或其他技术来查询和处理数据。---- 视你的具体表格是什么表格而定。 第4个思路:在RAG系统中,增强检索组件的能力以更好地检索表格数据。这可能涉及开发针对表格结构的特定检索策略。——比如说生成索引时,加入一些Meta data。 总而言之,我感觉如果你的表格直接嵌入后效果不好的话,考虑需要对表格数据做一些特征工程,再嵌入或者存储。
2023-09-16归属地:四川314 - iLeGeND老师能不能提供一下文章中代码完整源码
作者回复: 有!同学去我的github, https://github.com/huangjia2019 , 找LangChain,我会把代码逐步都上传。
2023-09-11归属地:北京9 - Geek_439927老师,我想通过Langchain +开源大模型搭建一个私有化的知识库GPT,文件内容是文字+图片,图片的内容没有文字,你可以想象成这个文件是一个系统操作手册,手册里面有一些文字描述,以及一步一步地操作截图,这种格式的文档可行吗,在LLM给出的回答中,希望能够显示这些图片
作者回复: 同学,谢谢你提出的好问题。 LangChain中是有文件检索这个模块的。你的系统操作手册中的文本部分可以被LangChain载入,进行Chunk,然后用大模型Embedding后存入向量数据库。后面你可以检索它们。 但是,LangChain或者说文本类大模型目前还不支持多模态的功能,还不能读图,此处,你需要在你的应用中引入多模态的大模型,比如类似与CLIP这种图文模型(https://github.com/openai/CLIP - 图文对比学习方法),想办法把图文的索引链接起来。然后,在能够利用LangChain,在查询到文档时,把相关的图也同时显示出来。 要完成你的需求,不是一件很轻松的工作,希望你能够把它弄出来,然后跟大家分享更具体地细节。
2023-09-12归属地:上海27 - iLeGeND深入浅出,相当清晰
作者回复: 谢谢同学鼓励,也希望大家多多分享自己使用时发现的用例。
2023-09-11归属地:北京4 - 阿斯蒂芬跟着老师代码敲一遍,解决过程中遇到的问题,成功run起来之后,还是小有成就感的😎
作者回复: 哈哈,这肿么能是小有成就感呢!这是大有成就感。 本课代码,每个小朋友都应该亲手跑一遍。 😁 😆 😅 😂 🤣
2023-09-14归属地:广东23 - Realm这里切割文本,生成的向量数据库,保存在内存中吗?
作者回复: 具体情况具体分析,目前我们是把它保存在内存中的,因为这样检索起来比较快。当然你也完全可以将向量数据存储在磁盘上,比如使用Qdrant,Faiss等系统,都为向量数据创建高效的索引,从而实现快速的近似查询。这样你就不用每次都Embedding了。 混合方案: 在某些情况下,你可能希望结合内存和磁盘存储。
2023-09-13归属地:浙江33 - 清风明月如果文档有更新怎么更新索引
作者回复: 使用LangChain的索引API - https://python.langchain.com/docs/modules/data_connection/indexing
2023-12-25归属地:上海2 - 一路前行qdrant,chromadb,fiass老师在这些向量库的选择上有什么建议么
作者回复: https://docs.google.com/spreadsheets/d/1oAeF4Q7ILxxfInGJ8vTsBck3-2U9VV8idDf3hJOozNw/edit#gid=0 这里有人做了个比较表耶,同学看一看。目前我用起来,简单的需求大概都差不多。
2023-11-03归属地:北京22 - 敬我用OpenAIEmbeddings查询出来的结果不对,后来该用text2vec-base-chinese才正常。
作者回复: 好!谢谢同学的这个Input。
2023-10-22归属地:上海2