输入“/”快速插入内容

开发:产品视角的大模型 RAG 应用

知识库问答(一):LangChain 初体验
💡
原创 木水酱 ,公众号:银河系降落伞
最近接触了大模型+本地知识库的问答应用实践。
从 0 到 1 开始做的过程中,参考了很多网上的教程和分享文章,其中绝大部分都是技术向的分享。感谢各位热爱总结和分享的开发大佬,让我在没有太多技术背景的情况下快速补齐了项目落地实践所需的基础知识。
同时,也想从产品视角出发,分享我所理解的大模型 RAG 应用,以及我作为产品这一角色,在实践过程中的经验(坑)
因为篇幅问题,这一系列的分享,预计会分成 3 篇:
1、LangChain 框架初体验:项目背景,初步体验和评测结果
2、调优思路分享:基于公开资料和实践的 Langchain 调优思路分享
3、如何测评:如何基于业务场景构建测试集和测评标准,并开展测评,以及过程中踩过的坑
今天来分享第一部分—LangChain 框架初体验。
项目背景介绍
此次实践做的是政府政策问答。
对政策面向对象而言,从最开始的判断自身可申报的政策、找到政策原文、到解读政策、准备材料进行申报等各个节点,都存在一定的困难。因此,市面上也有许多提供政策咨询和申报服务的中介机构。
由于政策之间关系复杂、政策条文拆解门槛高、政策语义理解难度大、用户面向政策咨询的问法多等多种原因,传统的智能问答产品很难实现政府政策的智能问答。
而大模型能学习大量文本数据、能捕捉和理解问题的上下文,具有超强的泛化和生成自然语言的能力。同时区别于传统的智能问答系统,大模型通过预训练和微调的方式,减少了对人工标注数据的需求,这也大大增加了落地应用的可行性。大模型的出现,似乎为政策问答带来了新的曙光。
因此,我们选择 LangChain-Chatchat 框架,构建政策文档的本地知识库,实现大模型基于本地知识库内容生成回答,为用户提供政策问答和解读服务,节省查找和理解政策的时间。
LangChain 框架介绍
为了方便理解后面的内容,这里先对 LangChain-Chatchat 框架和实现原理做一个简单的介绍。
由于本文非技术向梳理,详细介绍就不展开,感兴趣可参考:https://www.langchain.com.cn/
1、名词解释
RAG:即 Retrieval-Augmented Generation,搜索增强生成,简单来说就是大模型+知识库,从广泛的知识库数据中检索相关片段,然后由大模型根据这些内容生成答案。这种方式,一方面可以减大模型的幻觉,提高其在特定任务上的表现,更加贴合实际应用的需求,另一方面可以明显提高搜索文档信息和生成回答的效率和体验,因此称为搜索增强生成。
LangChain:是一个可以实现 RAG 的开源框架,它提供一些基础的组件和工具,如知识库管理、文本处理、模型加载等,允许开发人员将大语言模型(LLM)与外部数据源相结合,快速搭建自己的应用。
LangChain-Chatchat:原 Langchain-ChatGLM,是在 LangChain 基础上构建的一个具体应用,使用了 LangChain 的组件和工具,并结合了其他一些技术和库(如 FastAPI、Streamlit 等),来构建基于 LLM 的本地知识库问答系统,其目标是建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
2、实现原理
(1) 上传文档:用户上传包含知识的文档,支持 txt、pdf、docx 等格式,LangChain Chatchat 会将文档转换为 Markdown 格式
(2) 文本切割:为了便于分析和处理,将长文本切割为小块(chunk)
(3) 文本向量化:将切割的 chunk 通过 embedding 技术,转换为算法可以处理的向量,存入向量数据库
(4) 问句向量化:用户提问后,同样将用户的问句向量化
(5) 语义检索匹配:将用户的问句与向量数据库中的 chunk 匹配,匹配出与问句向量最相似的 top k 个
(6) 提交 prompt 至 LLM:将匹配出的文本和问句,一起添加到配置好的 prompt 模板中,提交给 LLM
(7) 生成回答:LLM 生成回答,返回给用户
评测过程
在开发基于 LangChain Chatchat 框架完成部署后,终于进入了激动人心的评测环节。
大模型+知识库的组合,是否真的可以解决政策智能问答的顽疾,达到一个比较可用的效果呢?
是骡子是马拉出来遛遛才知道。首先确定测评标准,基于业务目标和政策咨询的场景,对回答的内容生成质量进行测评,构建了一个测试集,并确定了评分标准,具体会在后面的文章中说明,这里先不做过多展开。主要包括以下方面:
是否可以理解问题
是否可以匹配正确的政策原文
基于政策原文的回答是否准确
基于政策原文的回答是否全面
回答里是否生成了政策原文以外的内容
回答是否可靠,不同轮次的回答是否差异大