展开本页目录
开始前准备什么
- 下载本题完整练习包,区分待实现 starter 与作者完成 reference。
- 按README准备本题原生依赖;所有输入均为原创或明确标注的本地fixture。
- 本地练习不需要付费模型Key;真实模型调用未执行,MiniLM题另有明确实际推理说明。
- 准备显式业务ID
- 创建顺序索引
- 删除并观察位移
- 加入IDMap2
- 按业务ID删除
- 保存重读核对
- 区分示例向量
原创输入、待完成starter、作者reference及实际运行产物,依README本地准备依赖。
环境要求、具体操作、产物核对与未运行范围。
1. 准备显式业务ID
输入为九个手工二维点,业务ID从101到920且不连续,查询点为4.1。它们不是模型embedding,方便直接看清删除后的身份变化。
2. 创建顺序索引
先创建IndexFlatL2并add向量,搜索返回的是顺序位置。若把位置当作永不变化的业务ID,删除后会产生错误关联。
本地启动与复现
cd reference
python3 verify.py3. 删除并观察位移
删除顺序位置1,再搜索最近点。数组位置前移,继续用旧metadata位置表映射会把本应为512的结果指向其他业务条目。
4. 加入IDMap2
用IndexIDMap2包装IndexFlatL2,并通过add_with_ids写入显式int64业务ID。向量顺序与业务身份从此分开保存。
5. 按业务ID删除
按业务ID205执行remove_ids,再查询。返回的最近业务ID仍为512,205不再出现,不能只检查索引总数少了一条。
6. 保存重读核对
把索引写到临时文件后重读,比较搜索返回ID集合与顺序。下载包只保留源代码与小型结果,不发布运行时索引二进制。
7. 区分示例向量
实际执行FAISS CPU原生接口,保留顺序索引误映射与IDMap正确结果。本题只说明删除身份合同,不给出某个真实语义模型的召回率。
怎样确认已经完成
- FAISS CPU实跑顺序ID删除错配与IndexIDMap2业务ID稳定,保存重读一致;二维向量手工编写,不是模型embedding。
- 顺序索引删除会使后续位置变化,继续用旧数组metadata映射就会错配。本题实际复现这一错误。
- 用IndexIDMap2与add_with_ids保存显式int64业务ID,再按业务ID remove_ids,保存重读后继续核对返回身份。
常见问题
向量库删一条数据以后,为什么搜索结果的ID会对不上?
顺序索引删除会使后续位置变化,继续用旧数组metadata映射就会错配。本题实际复现这一错误。
FAISS怎么保住业务ID,不让它跟数组位置一起变化?
用IndexIDMap2与add_with_ids保存显式int64业务ID,再按业务ID remove_ids,保存重读后继续核对返回身份。
哪些部分实际运行,哪些需要独立验证?
FAISS CPU实跑顺序ID删除错配与IndexIDMap2业务ID稳定,保存重读一致;二维向量手工编写,不是模型embedding。 目标AI助手账号生成、云平台部署和生产环境不在本次执行范围。




