索引状态与重建范围最容易错在把解析完成当成可召回,或把重建理解成全量重跑。正确顺序是先确认数据行已落库,再核对索引状态,最后按已完成索引范围判断重建影响。
解析完成只代表数据行落库
在 FastGPT 的知识库流程里,文件上传后先进入解析环节。解析动作的产出是结构化的数据行,这些数据行会立即写入知识库对应的存储中。此时数据已经存在,可以在数据集里看到记录,也能查看每条数据的内容。解析完成并不等于可以被检索召回,它只说明原始内容已经转换成系统可管理的行记录。很多使用者在这一步误以为知识库已经可用,直接去问答或调试,结果发现模型答不出内容,于是怀疑模型能力或提示词写法。实际原因往往是指向索引环节:数据行虽然落库,但还没有完成向量化与索引构建。核对动作很简单,进入知识库的数据列表,确认目标数据行是否存在,再查看其索引状态字段。如果状态停留在已解析,说明数据行已就绪,索引尚未开始或尚未完成。失败表现通常是检索结果为空,或者召回内容与问题无关,但数据列表里明明有对应文件。把解析与索引分开看待,是排查知识库问题的第一步。
三种索引状态的含义与流转
FastGPT 把索引状态划分为已解析、索引中、已完成三种。已解析表示数据行已经生成,等待进入索引流程;索引中表示系统正在为这些数据行生成向量并写入索引结构;已完成表示索引构建结束,数据可以参与召回。三种状态构成一条单向流转链路,正常顺序是已解析到索引中再到已完成。使用者需要关注的是状态是否卡住。如果长时间停留在已解析,可能是索引任务未触发或队列积压;如果长时间停留在索引中,可能是数据量较大或处理资源紧张。核对动作是定期刷新数据列表,观察状态是否推进。失败表现包括:状态长期不变,检索始终无结果;或者部分数据已完成、部分仍处于已解析,导致召回结果不完整。理解三态的意义在于,它能帮助判断问题出在数据准备阶段还是索引构建阶段。已解析是数据层面的完成,已完成才是检索层面的可用。把两者混为一谈,就会在错误的方向上反复调整配置。
待索引数据不参与召回
处于已解析或索引中状态的数据行,在索引完成之前不会参与召回。这是 FastGPT 检索机制中的一个硬性边界:召回只面向已建立索引的数据。换句话说,即使数据行已经落库、内容完整,只要索引状态不是已完成,问答时就无法命中这部分内容。很多使用者遇到的情况是,刚上传完文件立刻提问,得到的回答缺少新文件的信息,于是认为上传失败或解析失败。实际原因是索引尚未完成,数据还处于待索引阶段。核对动作是查看目标数据行的索引状态,确认是否为已完成。如果尚未完成,等待索引流程结束再测试召回。失败表现通常是:旧数据可以召回,新上传的数据无法召回;或者同一批文件中部分可召回、部分不可召回,差异正好对应索引状态。这个机制也解释了为什么批量导入后需要留出索引构建时间。把待索引数据当作可召回数据来使用,会得到不稳定的检索结果,也会让排查方向偏离真正原因。
换模型重建只覆盖已完成索引
更换嵌入模型时,重建处理已完成索引、状态为 indexed 的数据行;parsed与indexing状态的数据不进入这一重建链。重建对象与当前可召回对象都应回到具体数据行状态核对,待索引数据本来就被检索层隔离。
操作前先记录目标资料的数据行、索引状态与当前模型,再查看本次重建任务实际覆盖的行。对已完成索引的资料,检查重建后索引是否写回;对仍在处理的资料,检查原训练任务的进度或错误,再待其完成后检索相同问题。两类对象分别记录,可以看清“重建已结束”与“所有目标资料已经可检索”的差别。
遇到旧版内容被召回时,应检查现行资料是否已经替换、旧文件是否仍启用、检索范围是否包含旧集合,以及实际命中数据的版本。数据行尚未完成索引,只能解释该行暂时无法参与召回。把命中原文、状态与任务记录放在一起,才能判断需要补索引、等待训练,还是更新资料与检索范围。
核对顺序与常见失败表现
面对知识库检索问题,建议按固定顺序核对。第一步,确认数据行是否已经落库,查看数据列表是否存在目标记录。第二步,确认索引状态,区分已解析、索引中、已完成三种情况。第三步,如果状态不是已完成,等待或触发索引流程,不要急于调整检索参数。第四步,如果状态是已完成但仍无法召回,再检查检索配置与查询写法。第五步,如果涉及换模型,先确认待索引数据是否已处理完毕,再判断重建范围。常见失败表现包括:数据列表有记录但问答无结果,对应索引未完成;部分文件可召回部分不可召回,对应索引状态不一致;换模型后结果异常,应分别核对已完成索引行的重建结果与原本待索引行的训练进度。把这些表现与索引状态对应起来,就能快速定位问题环节。索引状态是知识库可用性的前置条件,重建范围是模型切换时的关键边界。掌握这两点,大部分检索异常都能在配置层面找到原因。
索引状态与召回的实际关系
数据行在解析后立即落库,随后进入索引流程,状态依次是已解析、索引中、已完成。只有已完成索引的数据行参与召回,待索引与索引中的数据行不会出现在检索结果里,也不存在“仍用旧向量继续被召回”的情况。
换向量模型后重建索引,覆盖范围是已完成索引的数据,未完成索引的数据行保持原状,等下一次索引完成后再进入集合。因此核对时要先看数据行的状态分布,再决定重建范围,不要用“重建任务是否跑过”代替状态检查。检索不到内容时,先确认数据行状态,再确认检索范围与过滤条件,最后才看相似度阈值。
验收准备两组样本:一组数据行全部已完成索引,另一组含索引中的数据行。分别用相同问题检索,记录返回的数据行与状态,确认未完成索引的行没有出现在结果里。若出现返回,先查检索是否绕过了状态过滤,再核对模型配置。