汪图南
  • RAG

    • RAG
  • 快速入门
  • 高级技巧
前端面试之道
  • 打包工具

    • Webpack
    • Rollup
  • TypeScript

    • TypeScript基础
    • TypeScript类型挑战
  • CSS预编译器

    • SASS
  • 自动化测试

    • Vue应用测试
  • Vue2.0源码分析
  • Vue3.0源码分析
  • 数据结构和算法(基础)
  • LeetCode(刷题)
  • JavaScript书籍

    • 你不知道的JavaScript(上)
    • 你不知道的JavaScript(中下)
    • JavaScript数据结构和算法
    • JavaScript设计模式与开发实践
    • 深入理解ES6
  • Git书籍

    • 精通Git
Github
  • RAG

    • RAG
  • 快速入门
  • 高级技巧
前端面试之道
  • 打包工具

    • Webpack
    • Rollup
  • TypeScript

    • TypeScript基础
    • TypeScript类型挑战
  • CSS预编译器

    • SASS
  • 自动化测试

    • Vue应用测试
  • Vue2.0源码分析
  • Vue3.0源码分析
  • 数据结构和算法(基础)
  • LeetCode(刷题)
  • JavaScript书籍

    • 你不知道的JavaScript(上)
    • 你不知道的JavaScript(中下)
    • JavaScript数据结构和算法
    • JavaScript设计模式与开发实践
    • 深入理解ES6
  • Git书籍

    • 精通Git
Github
  • RAG基础

    • 介绍
  • 简易RAG

    • 前置准备
    • LangChain实现RAG
    • LangGraph实现RAG
    • LangChain vs LangGraph
  • 数据导入(Loader)

    • 介绍
    • Document类型
    • 简单文本导入
    • JSON
    • HTML网页数据
    • Markdown
    • CSV
    • OCR
    • PDF
    • DataBase
  • 文本切块(Chunking)

    • 介绍
    • 分块方法
  • 数据嵌入(Embedding)

    • 介绍
    • 向量相似度计算
    • 稀疏嵌入
    • 密集嵌入
    • 混合嵌入
  • 向量存储(VectorStore)

    • 介绍
    • Chroma
    • Milvus

介绍

向量

向量和标量

向量(Vector):是一个有方向和大小的量,常以一组有序的浮点数组来表示,例如:

vector = [0.1, 0.8, -0.3, ..., 0.05]

标量(Scalar):是一个只有大小,没有方向的量(例如,温度,质量)。

向量的分类

向量按存储内容可分为:

  • 数值向量:包含纯数字。
  • 特征向量:表示对象特征的数值。
  • 词向量:表示词语语义。

向量的运算

向量之间可以进行运算:

  • 加法:对应的分量相加,例如:[a1, a2] + [b1, b2] = [a1 + b1, a2 + b2]。
  • 数乘:标量乘以向量的每一个分量,例如:k * [v1, v2] = [v1 * k, v2 * k]。
  • 点积:两个向量中,对应的每一个分量相乘,最后求和,例如:[a1, a2] * [b1, b2] = a1 * b1 + a2 * b2。
  • 余弦相似度:求cos。
  • 欧氏距离:求d(a,b)。
import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
k = 2

# 向量的加法
print(a + b) # 输出[5 7 9]

# 数乘
print(k * a) # 输出[2 4 6]

# 点积
print(np.dot(a, b)) # 输出32

# 余弦相似度
cos_sim = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(cos_sim) # 输出0.9746318461970762

# 欧氏距离
euclidean_dist = np.linalg.norm(a - b)
print(euclidean_dist) # 输出5.196152422706632

向量数据库

向量数据库(Vector DB):是一种专门用于存储、索引和查询向量数据(高维数值数组)的数据库系统。与传统数据库基于精确匹配的查询方式不同,向量数据库通过计算向量之间的相似度来检索数据,这使得它特别适合处理非结构化数据(如图像、文本、音频等)的相似性搜索。

核心功能

其核心功能如下:

  • 向量操作:支持向量插入/更新/删除。
  • 近似最近邻(ANN)搜索:在精度和性能之间取得平衡的搜索算法。
  • 向量相似性搜索:基于余弦相似度、欧氏距离或内积等度量方式。
  • 索引构建与压缩:构建如 HNSW、IVF、PQ 等索引结构。
  • 高维数据处理:能够有效处理数百至数千维的数据。
  • 与结构化数据关联:支持元数据存储与联合查询。
  • 大规模数据处理:支持数十亿级别的向量高效检索。

主流向量数据库对比

提示

LangChain官方 向量存储方案对比
向量数据库Benchmark对比

向量数据库原生向量支持是否开源是否分布式特点/优势缺陷不足典型适用场景
Milvus是是是企业级、分布式、支持亿级数据量资源需求高,部署复杂图像搜索、推荐系统
Qdrant是是是REST/gRPC、支持过滤、异步搜索较新项目、生态不如 Milvus 全向量+元数据混合过滤
Weaviate是是是GraphQL 接口,支持嵌入生成和元数据联查容器部署稍重语义搜索、问答系统
Pinecone是否是商业实现,全托管、免维护、上线快付费、不可私有部署快速开发、MVP、原型验证
Faiss是是否高性能 ANN 算法库,支持多种索引,学术界流行无服务层、不分布式离线处理、研究、原型验证
Chroma是是否零配置、本地知识库友好不支持 ANN、大数据不适用轻量 RAG、个人项目
Redis7.0+支持是是极低延迟,实时向量搜索内存占用高、不适合超大规模实时推荐、个性化问答
MongoDB5.0+支持是是适合文档+语义联合搜索向量维度限制、功能有限文档搜索、轻量语义搜索
PGVector扩展形式是否原生 SQL 接口单机性能有限,写入慢企业集成、轻量向量搜索
Elasticsearch8.0+支持是是全文+向量混合检索向量维度低(768 默认)、性能中等多模态搜索、有 ES 基础场景
最后更新时间: 2025/5/31 04:26
贡献者: wangtunan
Next
Chroma