首页 > 其他分享 >LinkAI RAG知识库平台优化之路

LinkAI RAG知识库平台优化之路

时间:2024-07-31 22:18:20浏览次数:14  
标签:检索 RAG 场景 知识库 用户 导入 LinkAI

基于知识库的RAG(Retrieval-Augmented Generation, 检索增强生成)作为当下主流的AI智能体应用技术之一,为解决大语言模型在问答交互场景下存在的不足(知识的局限性、滞后性以及幻觉等问题)提供了解决方案,也让AI大模型在专业领域(尤其是企业应用场景)的落地应用、满足真实的生产需求和业务场景成为可能。

选择一个功能丰富,体验友好的知识库平台至关重要,经过持续的迭代优化工作,LinkAI知识库能力在检索前、检索中和检索后等方面均得到显著提升,对于有数据保密要求的企业也可以提供私有化部署。

即刻体验:快速开始;LinkAI官网:LinkAI

编组 53

知识库导入

检索前的重要步骤之一便是知识库的内容导入,这包括文件的上传、解析、内容切分和向量化存储。将各种私有知识有序、合理地导入知识库,是后续获得知识库问答良好效果的重要前提。

多种内容格式

LinkAI知识库现支持导入:

  • 无结构文档
  • Q&A问答对
  • 多列表格
  • 网站内容

在导入文档时,支持导入PDF、docx、txt、md等格式的文件,自动解析分段,使用方便;导入问答对时,可将一问一答格式的CSV进行导入,问答时的精准度更高,后续也更易于维护;导入表格时,则可将多列的Excel或csv表格直接导入,并支持按列检索,非常适合导入多属性的列表型产品信息

内容分段及预览

当我们导入无结构的内容(文档、网站)时,为了避免文档过长给知识检索带来的影响(索引混淆,核心知识在信息中占比较小,导致按索引检索时无法命中关键数据;大模型token过长截断导致语义不完整等),我们需要将无结构的文档内容进行切分。

在切分时,针对不同类型文档的特性我们定义了不同的分割器,并按照分割符和分块长度进行切分。再设置冗余字符和相邻段落衔接句字重复的策略,来避免句子被截断的问题,使一个完整的句子保留在同一个段落中。

另外,在默认分段字符长度(600 tokens)的基础上,用户可根据文档特点和需求手动调整分段长度并再次预览分段,从而调整至相对最佳状态。整个分段过程实时预览,清晰可见

Snipaste_2024-07-28_17-09-47

增强解析

需要导入的PDF、docx文件时一般都是无结构的文档,除了排版不规范外,常常还会在文件中带有图片和表格。

增强解析功能为加强对无结构文档的解析能力而推出,针对PDF、docx和md文件,除文字以外,可对图片和表格自动提取解析,并可在分段中直接预览后导入。

导入后文档中的图片可作为附加素材直接参与到答案生成中(可参考「素材发送」部分),而表格则以Markdown格式存储可支持行列检索(可参考「表格导入」部分)。

Snipaste_2024-07-28_16-49-37 Snipaste_2024-07-28_16-50-12

表格导入

结构化的多列表格是使用场景中(例如多sku多属性值的产品信息表)非常见的知识格式。支持好表格知识的录入是RAG应用承载更多业务场景落地的重要前提。

表格型知识库使用了多列索引+单行检索的模式。在知识库表格导入时,默认会将表格中所有的列作为索引列(即参与检索的列,指的是用户提问时会将用户问题和该列的内容进行匹配),也可手动将列调整为非索引。另外可编辑修改列的名称,列名会在大模型答案生成的过程中起到重要的“语义解释”作用,设置一个含义清晰的列名能够让AI更好的理解该列的内容。而在检索时,则通过列数据匹配得到行数据。

knowledge_table

以上图场景举例:导入QS大学排名表格后,设置“学校英文名”一列为非检索列,其余三列均为检索列,当用户提问中涉及“牛津大学”时,会将用户问题与“排名”、“学校名称”、“类型”三列的内容进行检索匹配,则可检索到第三行数据“2,牛津大学,University of Oxford,QS200”,那么在AI回复用户时,这一整行数据都会用于回复的生成

同时,多列索引+单行检索模式可支持跨列检索,即提问“排名为第1名的学校中文名”和“排名为第1名的学校英文名”,可分别得到答案“麻省理工学院”和“University of Oxford”。在实际应用场景中举例,假设用户提问“推荐一款红色的衣服”和“推荐一款M码的衣服”,都能够命中“颜色:红色;尺码:M码...”这条知识库中的商品信息。

网站导入

网站导入功能支持很方便地将企业官网、产品介绍、博客、公众号文章等静态网页资源快速导入知识库中,搭建知识库问答智能体。支持将批量独立网址链接粘贴后一键导入知识库,还支持直接输入网站地图URL一键自动获取网站下所有页面的内容并导入知识库。

与导入文档类似,系统会自动结合分段长度和标点符号、语义将长文本拆分成多个段落,方便建立索引进行检索,在右侧可以看到解析得到的每个网页名称,以及网页中内容拆分效果的预览。

knowledge-webinput

对于定期会更新的网站,我们即将支持设置定时获取网站内容以更新知识库的能力

知识库的导入非常重要,是RAG有效应用关键的第一步。基于我们过去的工作,使得LinkAI在多格式、多来源知识文档的解析,后续检索环节的前置准备等方面不断优化提升,很好地满足了客户及用户的业务需求。

知识库检索

语义向量检索

导入知识库内容后,在实际问答场景中的RAG检索主要基于语义向量检索实现,即使用模型对导入的每段文本建立索引的向量,再使用同一模型将用户的每次提问进行向量化,从而进行向量之间的匹配,得出吻合度相对最高的结果。

绝大多数问答场景下,基于向量检索都可以得到比较好的检索结果,从而生成高质量的回复,在一些特殊场景下则需依赖增强检索模式。

增强混合检索

为提升知识库问答的效果,我们上线了增强检索模式。增强检索是将语义检索全文关键词检索混合增强的模式,能够大幅提升一些特殊场景下(如对姓名、字母、数字、型号等文本的提问)的检索和回复效果。

提问及答案中包含例如姓名、字母、数字内容时,使用关键词匹配往往会有比向量匹配更好的效果(对于部分短词、符号,其向量往往无法反映真实的语义)故将向量检索与关键词匹配结合起来使用,可较为完美地覆盖常规提问和特殊提问的需求。

123

当然,经典的关键词检索方式也有弊端,即文本间的强匹配可能会给大模型生成回复带来噪音(例如用户提问中的无实义常用语匹配到同样包含这些词汇的知识库内容,造成错误回复)。为解决这一问题,LinkAI设置了过滤词库机制,将此类词汇从关键词检索范围中剔除。

检索测试

知识库导入后,检索时的工作过程往往是“黑盒”的(向量匹配相似度的不确定性以及大模型生成回复的不确定性)为了将这一过程尽可能的白盒化,我们可以通过模拟用户提问的方式来观察检索过程。

检索测试可通过模拟用户提问查看问题在知识库中的检索结果,支持按 语义检索 和 增强检索 两种模式进行测试,可查看不同提问检索到的前20条(语义检索、关键词检索各10条)知识库语料以及对应相似度。

Snipaste_2024-07-29_20-12-16

基于检索测试可以在回答不符合预期时查看该提问与预期的知识库语料之间的向量匹配相似度,也便于为用户提供配置知识库语义检索相似度阈值的参考依据。

当然,RAG检索在实践中还有很多范式的变种,例如模块化并行检索,加入记忆模块参与检索,加入搜索引擎内容参与检索等等。同时,LinKAI在自研的AI搜索、内容总结、拟人对话等功能和场景中广泛使用和进行了RAG相关的多种技术优化实践,因不涉及知识库功能便不展开阐述。

知识库答案生成

对于一次对话而言,知识库检索完成后便进入答案生成的环节,该环节是将检索结果、用户提问等内容结合LLM大语言模型能力进行智能生成的过程,也是用户接收到答案前的最后一道工序,对于最终回答的生成至关重要。

检索结果加工

在前序环节中,取决于检索策略配置(语义相似度阈值、检索模式、检索条数等)会得到多条检索结果,其中可能包含重复的知识库语料(分别通过语义检索和关建词匹配检索得到,或同一语料重复录入),便需要进行去重加工。另外,多条知识库语料给到大语言模型的顺序也至关重要,包含了同样是语义检索、但向量匹配相似度不同的语料之间的排序;以及关建词检索结果与语义检索结果之间的排序。不同的排序方式对于大语言模型的理解和生成都可能会带来不同的影响,故需引入重排策略进行调控。

降噪及严谨性控制

当通过上述手段确定可以使用的检索结果后,依然还可能会面临“可用性”问题。那就是检索结果可能与用户提问之间并无关系(部分短词、符号,其向量往往无法反映真实的语义,但增强检索又只能检索到文本极其相似但实际含义完全不同的内容,如型号、标号相近的产品信息),这时候如果直接将检索结果提供给模型,相当于引入噪声,从而干扰问题的准确回复。

所以在此之前还需要对检索结果进行最终降噪,实现方法是使用大语言模型对检索结果和用户提问进行前置比对,即借助LLM出色的自然语言理解及推理能力来判断检索得到的知识库语料与用户提问是否有足够的相关性。当确认两者相关时才将其进一步给到大语言模型进行最终的答案生成。

对于知识库中没有的内容,部分企业场景则需要AI“有分寸感”的避而不答。LinkAI支持当知识库检索结果为空时(知识库中没有满足语义检索向量相似度阈值的语料)输出固定回复或不回复,从而满足严谨性控制的需求。

答案来源标注

大模型最终生成的回复,对于终端用户来说仍然是“黑盒”的,即用户无法准确分辨该答案到底是基于确有其文的资料回复的,还是基于大模型自身的知识能力回复的。特别是在部分企业场景中,对于机器人的回答有严谨性和可追溯的要求。故可在最终回复生成时,由大模型补充知识库导入时的文件或网站名称作为内容来源进行标注说明,以提升答案的可信度和可溯源性。

Snipaste_2024-07-29_21-23-24

素材发送

知识库内容除了文字以外,还会有图片、视频和独立文件,在知识库智能体对话场景中,除了需要以文字回复用户外,也有回复用户图片、视频和文件的需求。

例如AI销售的场景中,需根据顾客的需求发送合适的服装搭配方案,除了文字介绍外还需发送衣服的图片、视频作为补充。再例如企业内部员工问答bot的场景,当员工需要获取一个文件模板时,智能体需要将整个文件原封不动发出,而不是发送文件里的具体内容。

知识库除导入用于RAG的文字语料外,还支持上传图片、视频、文件等素材,上传后的素材将以URL的格式作为附件一并存储于知识库内,当用户提问命中该条知识库语料时,附件可以一同发出

Snipaste_2024-07-28_22-10-24

知识库素材发送能力,不仅在网页端使用时支持,LinkAI的应用接入渠道(网站嵌入、钉钉、飞书、企业微信等)均可兼容。

知识库回答反馈优化

使用记录定位溯源

经过上述一系列动作后,一次基于RAG知识库的对话便完成了。但即便使用了多种AI和工程能力的调控优化手段,也无法保证最终回答达到100%的准确率,偶尔还是会出现不符合预期的情况。

借助LinkAI的使用记录功能,可查看每一次AI智能体问答的详情,其中包含了知识库应用的RAG检索结果以及工作流中知识库节点的RAG检索结果。

records-Knowledge2 1123

通过使用记录中的知识库命中详情,可溯源大语言模型在生成智能回复时具体使用的知识库参考信息,还可一键跳转到该条知识库语料的编辑页面,进行调整和优化。

未命中知识库数据看板

在企业应用场景中,对于知识库型智能体,用户提问如果未命中知识库,往往是不符合预期的。一般来说代表着知识库内容还没有完全覆盖用户可能会提问的全部问题。故实时洞察未命中知识库的用户问题对于知识库的不断改善和优化也十分重要。

基于数据驾驶舱功能的「未命中知识库」图表,企业管理员可实时查看任意周期内未命中知识库内容的用户提问统计数据,并可下钻查看明细,根据用户当时的具体问题,判断是否需要补充新的知识库内容。这样一来,智能体应用的Feedback模式将从用户反馈变为数据驱动,以此帮助企业不断优化改善知识库型智能体的应用表现。

Snipaste_2024-07-29_23-11-15

RAG知识库的运营型迭代优化是一个复利工程。受益于AI chatbot 1vN 服务的规模效应,当我们改善一个知识库的问题时,对于服务效果的提升、人力的节省,都将带来巨大的规模性收益。通过持续不断的反馈优化,能够最大程度释放AI应用在企业场景落地的价值!

总结

RAG工程的每个步骤和环节都有可能对最终效果产生影响,在不同的使用场景中又会有不同的目标及侧重。一套功能强大且场景覆盖全面,并能兼容各种corner case的RAG知识库系统是知识库型AI智能体在企业场景落地应用的基础。

LinkAI自23年6月发布以来,不断在RAG知识库产品方面进行探索和优化,逐步达成功能通用、产品易用、多场景可用的目标。将继续通过优秀的产品能力解决好大模型企业级应用中知识依赖和知识更新的问题。

更多内容点击访问LinkAI官网,知识库文档:LinkAI知识库

标签:检索,RAG,场景,知识库,用户,导入,LinkAI
From: https://www.cnblogs.com/visionwpc/p/18335605

相关文章

  • 【YashanDB知识库】ycm托管数据库时,数据库非OM安装无法托管
    问题现象ps-ef|grepyas查看无yasom和yasagent进程,且在{数据库安装目录}/om/{数据库名称}的目录下没有conf、data、log等目录,确定数据库不是用yasboot安装,是用脚本安装的问题的风险及影响非yasboot安装,ycm无法完成托管,无法监控问题影响的版本不涉及ycm的版本问题问题发......
  • 【大模型本地知识库搭建】ChatGLM3,M3E,FastGPT,One-API_fastgpt m3e
    目录引言一、ChatGLM3大模型本地部署二、部署M3E模型三、部署One-API四、部署FastGPT引言本文技术路线为:利用ChatGLM3-6b作为基座大模型,M3E作为向量模型,基于FastGPT建立用户知识库,One-API做统一API接口管理。其中ChatGLM3和M3E模型都是在windows下部署的,FastGPT......
  • 【YashanDB知识库】ycm纳管主机安装YCM-AGENT时报错“任务提交失败,无法连接主机”
    问题现象执行安装ycm-agent命令纳管主机时报错问题的风险及影响会导致ycm-agent纳管不成功,YCM无法监控主机和数据库问题影响的版本yashandb-cloud-manager-23.2.1.100-linux-aarch64.tar问题发生原因因为10.149.223.121对ycm的主机没有开放端口9070或9071解决方法及规避......
  • 【YashanDB知识库】自动选举配置错误引发的一系列问题
    问题现象问题出现的步骤/操作:配置自动选举,数据库备库手动发起switchover,命令会报错主、备库变为只读状态,数据库无法进行读写操作shutdownimmediate停止数据库,此时发现数据库一直没有退出,业务人员反馈需要尽快恢复数据库的读写状态kill-9杀死yasdb进程,数据库发生c......
  • 【YashanDB知识库】账号被锁,如何分析具体原因
    问题现象客户刚开始使用YashanDB的时候,经常收到客户反馈账号被锁,但是不知道哪里触发了。问题的风险及影响客户环境为测试环境,影响测试业务的开展。问题影响的版本YashanDB版本:23.1.3.101问题发生原因账号被锁一般有下面原因:●密码尝试次数过多:用户在短时间内连续多次输......
  • 了解GraphRAG
    了解GraphRAG转载:从零实现大模型-GraphRAG,构建LLM中的关系数据库开源地址:https://github.com/microsoft/graphrag论文:FromLocaltoGlobal:AGraphRAGApproachtoQuery-FocusedSummarization博客介绍:https://microsoft.github.io/graphrag/传统RAGLLM预训练和......
  • Android开发 - ArrayList类动态数组与ArrayList<Fragment>解析
    什么是ArrayListArrayList是Java编程语言中的一个类,它实现了动态数组的数据结构。简单来说,ArrayList允许我们创建一个可以动态增长或缩减的数组,这在处理需要频繁添加或删除元素的情况下非常有用主要特点和用途动态大小:ArrayList的大小可以根据需要动态增长或缩减,与普通的数......
  • 【YashanDB知识库】使用select * 创建的物化视图无法进行查询重写
    问题现象使用如下语句准备测试数据:altersystemsetquery_rewrite_enabled=forcescope=both;droptabletest;createtabletest(tidnumber,tnamevarchar2(30));beginforiin1..100000loopinsertintotestvalues(i,i||'abcd');endloop;end;/commit......
  • graphrag api调用
    """参考:https://microsoft.github.io/graphrag/posts/get_started/1.初始化家目录:python-mgraphrag.index--init--root./ragtest2.初始化索引:python-mgraphrag.index--root./ragtest脚本需要放置在ragtest目录下运行"""importosimportrefromp......
  • RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anythi
    RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐1.MaxKBMaxKB=MaxKnowledgeBase,是一款基于LLM大语言模型的开源知识库问答系统,旨在成为企业的最强大脑。它能够帮助企业高效地管理知识,并提供智能问答功能。想象一......