一、通用步骤1、切片2、生成 embedding把每个 chunk 送入 embedding 模型得到向量。query 的向量和文档向量必须来自同一个模型维度必须一致用户输入账号密码后进行验证码校验- [0.12, -0.33, 0.91, ...]3、保存 chunk 元数据每个 chunk 不只是存一个向量通常还要保存doc_idchunk_idcontentsection_titlefile_namepathtagspermission其他业务字段4、建立向量索引向量索引是一种专门为“相似度检索”设计的数据结构。它的作用不是存向量本身而是帮你更快找到“和 query 最像的向量”避免每次都把全库向量挨个比一遍常见的向量索引有HNSWIVFFlat严格说是无索引或暴力搜索AnnoyPQ / OPQ 等压缩索引其中最常见的是 HNSW因为它适合做近似最近邻搜索速度快召回效果也不错。5、持久化最后把这些数据和索引结构落盘。6、用户查询1把问题也向量化用同一个 embedding 模型把 query 编成向量。2到向量索引里检索拿 query vector 去找最近的 TopK chunk。这里通常有两种模式近似检索用 HNSW 等 ANN 结构速度快适合生产精确检索扫描所有候选算精确距离适合小数据或精确评分3【可选】过滤可以先按元数据过滤例如只查某个知识库只查某个租户只查某个权限范围只查某个时间范围4【可选】重排序向量召回通常是“先找近”但不一定“最适合回答”。所以生产里经常会再接一层 rerank。5返回 chunk 内容给大模型最后把最相关的 chunk 原文回填给 LLM。二、主流向量数据库名称类型特点许可证/免费情况FAISS向量索引库经典、快、功能全适合做 ANNMIT免费开源hnswlib向量索引库轻量主打 HNSWApache-2.0免费开源Annoy向量索引库轻量、支持 mmap适合只读索引Apache-2.0免费开源ScaNN向量索引库Google 的高性能 ANN 库Google Research 开源仓库Apache-2.0pgvectorPostgres 扩展直接把向量存在 PostgreSQL 里PostgreSQL license免费开源Milvus向量数据库生产级、可扩展Apache-2.0免费开源Qdrant向量数据库轻量、好用、工程体验好Apache-2.0免费开源Weaviate向量数据库支持混合检索、结构化过滤BSD-3-Clause免费开源OpenSearch k-NN搜索引擎 / 向量检索同时适合关键词向量混合检索Apache-2.0免费开源1. QdrantQdrant 明确支持 payload而且 payload 可以是 JSON 结构。这意味着你可以把原文文本标题来源标签任何结构化信息一起存进去。Qdrant 还区分InMemory payload storageOnDisk payload storage官方也提到payload 很大时放 on-disk 更合适。2. WeaviateWeaviate 的 property 支持多种数据类型包括textblobintnumberbooleanobject所以它也可以把原文或文本字段直接存为对象属性。如果是文本类原文通常用 text如果是 Base64 编码数据也可以用 blob。3. MilvusMilvus 支持 scalar fields比如VarCharBooleanIntFloatDouble它官方文档里也明确说了scalar fields 可以存 metadata。对于文本字段可以用 VARCHAR。但要注意VARCHAR 有长度上限最大可到 65535 字节超大的原文一般不建议硬塞进去。4. PineconePinecone 支持向量metadata集成 embedding 下的 raw text官方文档里也写得很清楚文本字段可以转成向量而其他字段会作为 metadata 存储。也就是说它也支持“向量 文本/元数据”的组合。三、demo