搭建基于RAG的领域专家型知识问答系统
各种大模型应用平台提供了一种便捷的方式,让即使没有技术背景的用户也能快速创建适合自己业务的问答机器人。通过使用平台提供的模板,用户可以轻松上手,并在实践中深刻体会到LLM的强大功能和便捷的搭建过程。为了更好地理解其底层实现逻辑,我参考了相关技术资料(surfing时再次感叹方案和模型的更新速度太快了…跟不上,根本跟不上…),并将机器人构建过程中的每个步骤与其对应的原理联系起来,从而更深入地理解了大模型的应用。这篇文章旨在帮助那些对大模型了解不多的同学,同时也欢迎已经对大模型有深入理解的大佬们给予更深入的解读和建议。
大模型应用平台越做越强,impressive!让 AI 平民们也能短短几分钟内就完成一个答疑机器人(😝)。推荐在业务或者生活中有高频答疑场景的同学快来学习,早接入早下班(😁)。
关于RAG
当前较多的私域问答机器人的主要实现使用RAG场景,RAG (Retrieval Augmented Generation)是一种利用检索技术来增强大语言模型(LLM)的技术。通过检索从数据源中获取相关的知识将其融入Prompt,并将这些信息作为上下文提供给LLM,让大模型能够参考相应的知识从而给出合理回答。因此,可以将RAG的核心理解为检索+生成。贴一个目前看到的最通俗易懂的流程图:
完整的RAG应用流程主要包含两个阶段:
1、数据准备阶段:数据提取->文本分割->向量化(embedding)->数据入库->prompt构造
2、应用阶段:用户提问->数据检索(召回)->注入Prompt->LLM生成答案
1、数据准备阶段
数据准备一般是一个离线的过程,主要是将私域数据向量化后构建索引并存入数据库的过程。主要包括:数据提取、文本分割、向量化、数据入库等环节。
1)文本提取
在扣子中新建一个智能体应用,创建知识库,将规定格式的文本进行上传,当前扣子支持上传PDF、TXT、MD等格式的本地文件,文本大小建议不超过100MB,亲测会出现上传失败的情况。现在也已具备图片OCR能力,但会消耗更多处理时间,若图片非必要信息,建议文本中去掉多余图片。
2)文本分割
文本分割主要考虑两个因素:
- embedding模型的Tokens限制情况;
- 语义完整性对整体的检索效果的影响。
一些常见的文本分割方式如下:
- 句分割:以”句”的粒度进行切分,保留一个句子的完整语义。常见切分符包括:句号、感叹号、问号、换行符等。
- 固定长度分割:根据embedding模型的token长度限制,将文本分割为固定长度(例如256/512个tokens),这种切分方式会损失很多语义信息,一般通过在头尾增加一定冗余量来缓解。
文本上传后需要对其进行分隔和清洗,如果对于切割长度没有明确需求,可以使用智能处理,自动分段。