导读
2026/10/25约 812 字大约 3 分钟
导读
本栏目是一套「多模态图像检索引擎」的架构与设计文档。项目约 2,500 行 Python,核心能力是用自然语言搜图、用图搜相似图:CLIP 把图像和文本编码到同一 512 维向量空间,Faiss IVF4096,PQ32x8 负责近似检索,双缓冲增量索引解决 Faiss 不支持动态增删的问题,LLM 通过 Function Calling 提供查询扩展与结果解释。
按阅读顺序建议:
- 架构总览 —— 三层架构、数据流、技术选型、模块职责与关键设计决策。
- 核心系统设计 —— 检索引擎、增量索引、LLM 辅助层三大模块的接口与实现细节。
- 关键算法实现 —— IVF 倒排、PQ 乘积量化、双缓冲搜索合并的算法与复杂度。
- 小白概念指南 —— 向量、CLIP、Faiss、双缓冲、查询扩展的大白话解释。
- 面试准备指南 —— 自我介绍话术、高频问题、技术追问、自查清单与简历描述。
简历主线与对应模块
| 简历关键词 | 对应模块 | 核心文件 |
|---|---|---|
| Faiss IVF4096+PQ32x8 | 向量检索引擎 | retrieval_by_faiss.py |
| 双缓冲增量索引 | 增量索引管理 | incremental_index_manager.py |
| Function Calling + LLM | LLM 接口 + Agent 工具 | llm_interface.py、agent_tools.py |
核心亮点速览
1. CLIP + Faiss 跨模态语义检索
- CLIP (ViT-B/32) 将图像和文本编码到同一 512 维向量空间
- Faiss IVF4096+PQ32x8 索引:IVF 倒排缩小搜索范围 + PQ 乘积量化实现 64 倍向量压缩
- 支持以文搜图、以图搜图,三种输入(文本/图片路径/ndarray)统一接口
2. 双缓冲增量索引架构
主索引 (Faiss IVF, 已训练) + 缓冲区 (Python list, 暴力搜索) + 删除集合 (Set, 逻辑删除)- Add: 新图片特征直接进 buffer,O(1) 完成,不动主索引
- Remove: 逻辑删除(ID 加入 deleted_ids 集合),搜索时过滤
- Search: 主索引 + buffer 双路搜索,合并排序后取 topk
- Merge: buffer 超阈值时追加到主索引(Faiss IVADC 支持不重新训练的 add)
- Rebuild: 删除积累足够多时,过滤 deleted_ids,全量重建新索引
3. Function Calling 集成 LLM
- 4 个 Agent 工具:search_by_text、search_by_image、explain_search_results、answer_with_image_context
- 完整兼容 OpenAI Function Calling JSON Schema 格式
- LLM 查询扩展:用户输入 → LLM 生成 3 个语义变体 → 多路检索 → 去重融合
- LLM 结果解释:检索结果 → LLM 生成自然语言说明
- 优雅降级:LLM_API_KEY 未配置时,自动退化为传统检索
快速导航
| 你需要... | 去这里 |
|---|---|
| 理解系统架构 | 架构总览 |
| 深入三大模块 | 核心系统设计 |
| 搞懂 IVF/PQ/双缓冲算法 | 关键算法实现 |
| 零基础理解概念 | 小白概念指南 |
| 准备面试问答 | 面试准备指南 |