小白概念指南
小白概念指南
阅读目标: 用大白话理解项目中的核心概念
1. 向量是什么?
向量 = 一串数字, 用来表示一张图或一句话的"含义"。
"一只金毛犬在草地上奔跑"
↓ CLIP 编码
[0.12, 0.53, 0.88, 0.33, ...] ← 512 个数字
可以想象成高维空间中的一个点:
意思相近的东西, 在空间里距离近; 意思无关的, 距离远。 "猫" ●
╲
╲ 距离近 = 意思接近
● "狗"
╲
╲ 距离远 = 意思无关
● "汽车"2. CLIP 是什么?
CLIP = 一个能把图片和文字变成同一种"语言"的模型。
类比翻译官: 英语 "Dog" → 中文 "狗"
CLIP 做的是: 文字 "狗" → 向量 [0.2, 0.8, ...]; 图片 [🐕] → 向量 [0.3, 0.7, ...]。两个向量很接近 → 可以比较相似度。
为什么厉害? 4 亿张图片+文字描述训练出来的, 能理解语义。就算没见过"柯基"的图片, 知道"短腿+大屁股+狗=柯基", 就能搜到。
3. Faiss 是什么?
Faiss = 超级快的"向量搜索引擎", 能在海量向量中快速找到最相似的。
类比:
- 不用 Faiss = 在图书馆里一本本翻找 (12 万本书全翻一遍)
- 用 Faiss = 先查目录, 直接去相关书架找 (只看几个书架)
3.1 IVF = 分区 (倒排索引)
先把 12 万个向量分成 4096 个"小区" (KMeans 聚类)。查询时只看最近的小区, 不用全看。
小区 1: 🐕🐩🦮 (都是狗)
小区 2: 🐱🐈🐯 (都是猫)
小区 3: 🚗🚕🚙 (都是车)
...
查 "狗的图片" → 只搜小区 1 和附近几个 → 快 400 倍3.2 PQ = 压缩 (乘积量化)
每个向量 512 个 float32 = 2048 字节。PQ 把每个向量切成 32 段, 每段用 1 个字节代替 4 个 float32 → 32 字节。压缩 64 倍, 有细微精度损失但可接受。
原向量: [0.12, 0.53, 0.88, 0.33, ...] (512 × 4 = 2048 字节)
→ 切 32 段 → 每段找最像的"代表编号" → [5, 128, 37, ...] (32 字节)4. 双缓冲增量索引是什么?
问题: Faiss 的"小区"划分好之后, 不能随便加人删人——加一个人要重新划分整个城市 (2-4 小时), 删人根本没有接口。
方案: 三件套
┌─────────────────────────────────────────┐
│ 主索引 (已建好的小区) 缓冲区 (新来的) │
│ 🐕🐩🦮 🐕🦺 (刚到的) │
│ Faiss 快速查 暴力一个个比对 │
│ │
│ 删除名单: "小区3的第5个居民搬走了" │
│ → 查的时候跳过他就行 │
└─────────────────────────────────────────┘| 操作 | 怎么做 | 为什么 |
|---|---|---|
| 加图片 | 放缓冲区 | 不用重建整个小区 |
| 删图片 | 加入"已搬走"名单 | 小区不支持直接删人 |
| 搜索 | 小区+缓冲区都查, 合并结果, 跳过"已搬走"的 | 保证查到所有数据 |
| 合并 | 缓冲区人多了 → 正式入住小区 | 缓冲区太大会变慢 |
| 重建 | "已搬走"积累太多 → 重新规划整个城市 | 彻底清理 |
5. 查询扩展和结果解释是什么?
查询扩展: 你说"狗", LLM 帮你想"puppy"、"canine"、"金毛"等各种说法, 每个说法都去搜一遍, 结果更多更全。
你说: "狗"
↓ LLM 扩展
搜: "狗" "puppy" "canine" "金毛"
↓ 合并去重
返回: 综合最好的结果结果解释: 搜到图片后, LLM 用自然语言告诉你"为什么返回这些图、最相关的是哪几张"。
优雅降级: LLM 没配置也不影响搜图——扩展和解释是锦上添花, 不是必需品。
6. Agent 工具是什么?
Agent = 能用工具的 AI。 普通 AI 只会聊天, Agent 能实际操作。
普通 AI:
你: "帮我找狗的照片"
AI: "我无法搜索图片..."
Agent:
你: "帮我找狗的照片"
AI: 想 → 我有 search_by_text 工具 → 调用 search_by_text("狗")
→ 拿到结果 → "为您找到以下图片..."本项目定义了 4 个工具: 文本搜图、以图搜图、解释结果、智能问答, 都是标准 OpenAI Function Calling 格式。
7. 术语速查
| 术语 | 大白话 |
|---|---|
| 向量 | 一串表示含义的数字 |
| 相似度 | 两个东西有多像 |
| 归一化 | 把数字缩放到统一范围, 便于比较 |
| 索引 | 预先分类整理, 加速搜索 |
| IVF | 先分区, 只搜最近的分区 |
| PQ | 压缩存储, 每向量从 2048 字节压到 32 字节 |
| TopK | 返回最相似的前 K 个结果 |
| 召回率 | 想找的 100 个里找到了几个 |
| LLM | 大语言模型, 如 GPT/DeepSeek |
| Function Calling | LLM 输出"调用什么工具+传什么参数"的标准格式 |
| 优雅降级 | 部分功能不可用时系统仍能正常工作 |