知识库
应用开发就是用模型的推理能力生成你想要的答案或你想要的内容。模型的推理能力强大与否除了模型本身而言,还来源于训练的数据,训练越完整,推理能力更准确,模型训练的数据大部分来源于公共数据,还有一些是私域数据。
第一:模型训练的数据不是最新的数据,这时用到知识库的方式喂给大模型,让大模型拿到最新的数据,让它拿最新数据重新去推理、去回答,这样回答、推理的准确性至少在数据上有个很大的改进;
第二:私域数据大模型找不到,知识库把需要用到的数据找回来,再给到大模型让它去推理。
这是知识库用到的两个场景
公司的文档、术语、资料尽量从数据库里拉齐,哪些是淘汰的、哪些是过期的,需要把它维护起来,这样所有人在用的时候,特别是庞大团队,小团队还稍微好点,特别百人团队、几十人团队搞一个工程的时候,这时候在改上下文、特别是改边界的时候要拉齐,不拉齐的话边界上会出问题。
不管是agent应用开发里有知识库,work Buddy、阿里云里都有知识库。知识库就是应用开发里补充一些私域数据或者是补充一些最新数据的一个东西。这样大模型回答的足够精准,避免AI coding的时候混乱。所有团队都应该有知识库把文档管理起来。两类场景用到知识库,一种是应用开发,另一种是AI coding。
第一:喂给大模型的文档越多,大模型推理、提取有用信息的时间也多,时间成本高;
第二:文档一股脑都给大模型,而且挤占上下文,上下文长度有限,也不是好办法;
第三:文档都给大模型,如果文档里有逻辑冲突的该怎么办,那么大模型提取有用的东西它就会按照自己的理解提取、去压缩,不会按照你的需要提取,可能和你想要的东西有点出入;
这三点可以通过知识库解决
知识库的过程、rag的过程:知识库相当于一个数据库,先召回在使用。我们再用我们想要的数据的时候,不是一股脑的全部把它从里面提取出来。我们先从知识库里查,把想要的、有用的、相关的东西把它召回出来,把它找到之后再给大模型让它去使用,这样大模型接到的是有用的、跟它相关的信息,上下文的事情可以得到解决,找到的也是相关的、有用的信息,按照你的意愿去召回的。
知识库是一个结构化、非结构化的信息集合。结构化就是一个数据库;非结构化就是文档,把文档当知识库。
把数据库当知识库或把文档当知识库无非就有几种弊端,没有向量的部分,召回就不准确,相当于把所有内容都给到大模型。它就存储所谓的事实、
规则、文档、实体关系、FAQ、数据库记录也好都无所谓,它就是一个信息的集合,这种集合召回或者检索效果更好的话会用到rag技术。
知识库可以是数据库、还可以是知识图谱、可以是向量的数据库、也可以是文档的集合、可以是一个页面都无所谓,它就是一个供可以查询、可以维护
的知识源,供系统在推理时问答或决策时去查找或去补充它的知识来源,这是广义的知识库的概念。
侠义的知识库就是把东西放到向量库里,侠义就是向量库,广义什么都行。我们一般说的时候是广义的,用的时候是侠义的。
RAG(Retrieval‑Augmented Generation,检索增强生成):信息检索与文本生成的ai架构,是一种技术,用来提升大预言模型在回答问题的准确性、时效性以及可解释性。
准确性就是从知识库里召回的,认为知识库里的内容是对的,不对的也不会放到知识库里,从知识库里召回的内容都是可靠的;
时效性:知识库里的内容是最新的;
可解释性是用知识库时标注答案是从哪来的,这段内容从哪来的,为了证明我这里比较权威,不是胡编乱造的,用知识库时答案从文档哪块来的。我的回答是基于知识库里哪个文档哪一段给回答出来的,也默默调了一个联网搜索,怕自己的答案不是最新的。知识库找不到相关物料才用到联网搜索。
用知识库、RAG就是解决LLM的幻觉(胡编乱造)、数据过时或者私有数据不能训练进模型的问题。
知识库是信息存储的集合,从知识库检索,检索用到的技术就是RAG。知识库不包含模型,rag有模型,知识库是燃料,rag是引擎,rag来回答。
创建知识库:进入阿里云百炼页面,点击应用,点击知识库,出现这个页面,如下图:

点击右上角的红框里的标记,弹出如下:

点击创建知识库按钮,弹出如下图:

点击标准版,进入创建知识库页面,有效期30天,超过30天该收费了。输入知识库名称和知识库描述,点击下一步,选择连接器默认默认文件连接器,配置类目选择新增类目,输入类目名称,点击确认,刷新配置类目,选择医疗,上传一个文件,.xlsx格式的,解析方式选择自定义设置,点击如下图:

点击红框里那个按钮,弹出如下图:

点击下拉框,选择大模型文档解析,点击保存按钮,新增标签输入捷德,点击下一步按钮,切片方式选择按照符号切分,标识符选择换行,因为上传的是excel文件,其他文件选择对应的切片方式,向量模型选择text-embedding-v3,点击完成按钮,跳转到如下页面:

过一会儿,状态就变成解析完成,如下图:

可以点击查看切片,然后点击切片详情,每一行就是一个切片,切回到知识库,点击右下角三个点里的知识问答,如下图:

状态变成已发布,点击发布按钮,跳转到如下页面:

点击发布按钮,跳转到如下页面:

输入版本描述,点击确认发布,提示发布成功,

鼠标悬浮到模型qwen3.6-plus上,可见配置,点击配置按钮,跳转到调试页面,输入问题,点击发送,就能得到答案,回到知识库页面,点击知识检索,如下图:

点击配置按钮,跳转到如下页面:

输入问题:各参数都没有的情况,点击发送,召回了5个,可以看到最终加权分数、语义分数,从高到底排序,知识库的创建和召回。
知识库存储阶段干的活是:上传->向量化->切片->存储
知识库在入库的时候选择向量模型,向量模型的目的就是把知识库的文档切片之后进行向量化的存储。
向量在数学上概念,有大小,有方向的一个量,一般用数组表示。向量库一般在百维、千维以上,一般是1024维,最大是4096维。
维度AI领域是特征,1024维就是分成1024个特征,4096维就是分成4096个特征,每个维度都存在一个特征值,维度越多,特征越细,越精确。计算多少维,就是计算它们之间的相似度的。
向量相似度:计算两个向量在方向和内容上接近程度的指标。
计算向量相似度目的就是为了从知识库或向量库里找到和问题相关的内容,无关的内容不召回。做检索时输入的问题是一个向量,知识库召回的也是一个向量,向量相似度越高,说明越接近。
向量相似度计算方式有3种:余弦相似度、欧氏距离、点积。
余弦相似度:计算向量之间夹角的cos值,没有距离一说,夹角越小方向越近,相似度越高。
欧式距离:计算2个向量的空间中的距离,距离越小,相似度越高。主要收到长度(距离)的影响
点积:代数方式计算两个向量的相似度,方向和距离都考虑。
向量库由三部分组成:id、向量、元数据,每一个切片都是由这三部分组成
把长文档,切割成一段一段的小片段,每一小段就叫一个 chunk,就是一个切片
id代表唯一标识,
向量表示方式是:【0,1,-33,11,29......1024】,如果是1024维,就到1024
向量值:就是切片的值
元数据就是一些标签和结构化的附加信息在里面,这个切片是从哪个文档里来的、文档多少页取的、标签是什么东西,这些东西存在元数据里面,在知识库里看交Meta信息,但是看不见。
创建向量的时候选择embedding-v3、embedding-v4向量模型,向量模型就是负责把知识库内容分成多少个维度,每个维度用什么特征存储。外面的模型有开源的,有收费模型,还有用开源模型改的。
embedding-v3、embedding-v4是阿里云自研的向量模型,不同的公司向量模型也不一样,腾讯云支持1024维向量
向量化就是把切片分成一个个片段的过程。
最小的、可管理的单元,叫chunk,每次召回就是一个一个chunk。
chunk关键属性:size、overlap(重叠块)、boundary(边界)
size就是一个长度,多少个token,切片上显示多少个字符。
切片方式有6种,只有按长度切分每个chunk的token是一致的,其他方式都是不一样的,切片方式的选择尽可能让每一个chunk的内容相对完整,召回的chunk也是完整的
重叠块:选择按长度切分的时候,显示分段预估长度和分段重叠长度,分段重叠长度是当前分片与上一个分片重叠的文本长度,这个就是重叠块,就是当前切片和上一个切片有64k的token重叠长度,这个长度可以修改。重叠块一样证明这两个切片是相关的,用的时候把这两块重叠内容的片段组合到一块给到大模型去回答,重叠跨的目的是防止语义割裂、相邻的chunk之间重叠的token。
boundary:切分的策略,用什么方式切割,最好的方式就是组织好内容形式,采取一种切片方式,尽量保证每一个chunk的内容完整,语义不割裂
公司prd的切割方式是按标题切分,几级标题去切,一个标题是一个功能点完整描述,如果标题的功能点比较乱,按长度切分,肯定会语义割裂,设置好重叠块,要不然召回就是不完整的,prd一般就是这两种方式。
先用一种切片方式,再用一种切片方式,最终在存储,没有混合方式,只有先后。
知识库内容来源以文本为主,文本向量化入库的时候先切片,再把这些片段做向量化存储,id是多少,向量维度是多少,【2,3,5】,也是向量的值,再有元数据这些辅助信息
重叠块设置太大有好处也有弊端,比较浪费token,重叠块设置范围是size的10%-20%
技术文档 500-800tokens,重叠块设置在50-150tokens,防止命令、参数、步骤被切开;
通用文章 300-500tokens,重叠块设置在30-100tokens;
法律合同 600-1500tokens,重叠块设置在120-400tokens,法律合同条款跨度较长,overlap设置需要大一些。
Excel表头拼装:如果有表头开启此功能,此Excel的切分为:“姓名:张三;年龄:18”,反之别开启
生成向量库之后就有召回,召回就是在向量库里通过相似度比较,把向量库这些向量跟我的问题进行比较,取相似度最高的内容给召回来。
混排模型有三种:
不使用模型就是纯比对
选择qwen3-rerank,最大召回数量输入20,如下图:

最多召回20个候选词,K个候选词两两之间进行计算,query问题和召回的片段,进行计算它们之间的相关性,然后重新排序,取20个返回给大语言模型,这就是重排。
qwen3-rerank:纯稠密模型,基于问题和召回的片段,去计算一个向量的相似度得分,向量相似度得分取向量这个维度,它可能是语义相似度、同义词替换、意图泛化,忽略关键词的匹配。选择该模型不会走初步关键词检索。
选择qwen3-rerank(hybrid):既有语义相似度,还有关键字匹配,召回时双路进行召回,既进行语义召回、关键字匹配召回,每个关键字对象更一致,去召回这种关键字。
使用rerank和不使用rerank模型的区别:
不使用rerank:从切片里进行召回,仅仅依赖向量检索+向量相似度计算,召回topk给到大模型,没有+重拍,检索和召回速度比较快,百万文档毫秒级就能召回,只管像不像,没有回答的对不对的方式,它认为所有相关性的文档,不管分是多少,都会召回。
使用了rerank :返回tok-k候选后,再用rerank 对文档进行深度语义分析(深度分析用户问题跟文档的关联性)重新打分排序,选出top-n最相关的文档 , 把真正跟问题相关或者能回答用户问题的文档排在最前面,速度慢一些,100-500ms延迟。

这个开关要开启,点击那个齿轮。
初步向量检索TopK,太小了不行,如果设为10,可能会把第11的干掉,就找不回来了,但是第11的通过rerank又排到最前面了;设置太大,乱七八糟相关的都召回了,比较就增加了,延迟也增加了。如果设为0,这个就没有命中,只能按照另一个检索。
相似度阈值0.01~1.0,这个要是设置成0.80,初步向量检索低于0.80的召回时就会被剔除,没有进入重排。如果这个值低于0.60,召回的片段跟问题之间的相关度没有那么高。
标签过滤:标签在元数据里,选择一个标签,去向量库召回的时候首先进行了过滤,没有标签的文档就被剔除掉了。从打了妇产科的标签的chunk里去匹配语义相似度和初步关键词检索。
权重:如果多个知识库,可以设置权重。这个问题它优先从哪个知识库去找,可以把这个知识库的权重设高一些。
知识库路由:这个问题我可以在多个知识库之间查找
多个知识库召回以后再重排一次
标签的功能:对文档或者片段,进行分类、标记,提升标签的准确性、可控性、可管理性。
标签的作用:精细化召回、权限的管控、租户隔离、ab测试。如果要实现这些,向量库是否支持meta元数据的过滤功能。
精细化召回:带着标签的切片里去召回。比如公用一个或多个知识库、文档比较多、内容比较多,公司建立了一个统治知识库,知识库里有IP/财务/HR相关文档,问题就是跟财务相关的,就去打着财务标签的文档里去找,不用从其他的切片里去召回,避免无关的文档、切片的干扰。
权限的管控:不同用户绑定不同的标签内容,就可以实现权限隔离。在RAG时,如果是普通用户,需要高级权限的文档无、切片,他无法访问。
租户隔离:租户a只能访问租户a相关权限的文档,租户b只能访问租户b相关权限的文档,租户a是什么权限,文档、切片也是对应的权限,就能实现租户隔离。
ab测试:这批文档打上testa标签,那批文档打上testb标签,先从testa标签里是召回,看看质量怎么样,再从testb标签里是召回,看看质量怎么样,实现ab对比测试,文档质量好不好。
标签可以打几类:
分类标签:it/hr 技术/普通文档 业务标签:支付模块/首页功能 角色标签:管理员/普通用户/超管
标签设计建议:结构化命名、标签不要太多(10个以内的核心标签)、定期清理
标签不在chunk里,关键词在chunk里,标签不在向量任何一维里,标签不影响排序,它影响哪些chunk能进到这个top候选的列表里,它更加不影响向量相似度计算的分数、rerank。
公司建设知识库: 需求(知识库到底给谁用,知识库要解决什么问题) 、知识的采集与筛选、知识的清洗与结构化、知识的组织跟标注、向量化、知识库评测与迭代。
需求(知识库到底给谁用,知识库要解决什么问题):决定的是你要找什么类型的数据
知识的采集与筛选:产品手册、技术手册、FAQ; 最新的政策文件、最新的法律 一般都是内部文档
内部文档:结构化文档(产品相关文档、流程跟制度相关文档 项目资料等)、非结构化文档(个人的专家知识、会议、论坛、邮件、协作工作提取、ppt、api文档、设计文档、代码、工单)
外部文档:最新的法律法规、医疗信息、金融信息、音视频(通过大模型也能转成文本)
知识的清洗与结构化:让内容准确(没用的,过时的都剔除)、统一(不同的词改成一样的)、消除歧义(接口文档统一格式,方便后续处理,包含同一个人、品牌、文档入库--pdf、word转成md格式)、方便大模型理解
知识库评测与迭代:文档的质量、标签、切片策略、召回的算法(向量相似度计算算法、单路/双路召回)、重排的算法(混合、稠密)、参数、问题的质量,文档的质量影响排第一,召回的算法排第二。
知识库评测指标:召回率(也叫查全率,在所有的片段里被大模型正确召回的片段) recall@K
召回率:关注的是召回全不全,但是不关注召回准不准;召回率的公式:topk中召回的相关片段/实际知识库中总的相关片段
准确率: precision@k:召回的内容中,有多少是真正相关的,topk中相关结果的数量/k;
命中率:topk返回结果中,至少命中一个的相关的查询比例;
MRR(Mean Reciprocal Rank,平均倒数排名):关注的召回的顺序,召回结果里第一个相关片段的位置,公式:1/位置顺序。
F1值:既看准确率,又看召回率,公式: 2 * (准确率*召回率)/(准确率+召回率)
时效性:
覆盖率:
RAG的概念:用户在提问的时候,从知识库中检索到相关片段,再将这些片段给到大模型,检索到补充内容,LLM在生成答案。
知识库外面挂着大模型,用户的问题先到LLM,大模型默认会从知识库里查询检索相关问题,把相关问题召回,通过rag把结果返回给LLM,LLM在回答问题。Query改写(LLM认为的你提问的问题不专业,不便于知识库召回,大模型会把问题改写,也有可能不改写,大模型会判断),大模型不认识汉字,会把汉字翻译成一个一个token,翻译成token之后,大模型才会改写问题,改写问题之后发给知识库,一般就是双路召回,第一路是语义召回,稠密检索,通过embedding模型计算向量相似度,做一次召回;第二路是关键字检索,稀疏检索,BM25检索(BM25是一种关键词匹配算法),两路召回之后融合去重,输出topK。接下来到rerank阶段,找到相关度更高的片段再去重排,输出topN相关片段,拿到topN相关片段给到大模型,大模型拿到片段后做上下文构建(根据召回的资料回答问题,可能有敏感问题就不回答)。重排的优势是获取最新的片段,把最新的放在最前面。
多文档融合:生成答案时把多个文档都考虑进去,请参考以下文档。
为什么用rerank?
1、解决召回top 过时或者不是最准确的片段;
2、保证top 片段里有尽可能多的、高价值的、互补的片段;
浙公网安备 33010602011771号