基础概念 #
什么是向量? #
向量是 Pinecone 中最基本的数据单元。在数学上,向量是一个有序的数字列表,可以表示数据在多维空间中的位置。
向量的表示 #
text
┌─────────────────────────────────────────────────────────────┐
│ 向量的表示 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 一维向量(标量): │
│ [5] │
│ │
│ 二维向量: │
│ [3, 4] │
│ │
│ 三维向量: │
│ [1, 2, 3] │
│ │
│ 高维向量(如 OpenAI embeddings): │
│ [0.0023, -0.0156, 0.0089, ..., 0.0012] // 1536 维 │
│ │
│ 在 Pinecone 中: │
│ { │
│ "id": "doc-1", │
│ "values": [0.1, 0.2, 0.3, ...], │
│ "metadata": {"title": "Document 1"} │
│ } │
│ │
└─────────────────────────────────────────────────────────────┘
向量的维度 #
text
┌─────────────────────────────────────────────────────────────┐
│ 向量维度 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 维度 = 向量中数字的个数 │
│ │
│ 常见嵌入模型的维度: │
│ │
│ | 模型 | 维度 | │
│ |---------------------|---------| │
│ | OpenAI text-embedding-ada-002 | 1536 | │
│ | OpenAI text-embedding-3-small | 1536 | │
│ | OpenAI text-embedding-3-large | 3072 | │
│ | Cohere embed-english-v3.0 | 1024 | │
│ | Sentence-BERT | 768 | │
│ | Google Geck | 768 | │
│ │
│ 选择建议: │
│ - 维度越高,表达能力越强 │
│ - 维度越高,存储和计算成本越大 │
│ - 根据实际需求平衡选择 │
│ │
└─────────────────────────────────────────────────────────────┘
什么是嵌入(Embedding)? #
嵌入是将非结构化数据(文本、图像、音频等)转换为向量的过程。嵌入向量能够捕捉数据的语义信息。
嵌入的工作原理 #
text
┌─────────────────────────────────────────────────────────────┐
│ 嵌入过程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入数据 嵌入模型 向量输出 │
│ │
│ "猫是一种 OpenAI [0.12, -0.34, │
│ 小型哺乳动物" Embedding 0.56, ..., 0.23] │
│ │
│ 语义相似的内容 → 相似的向量 │
│ │
│ "猫咪是体型 OpenAI [0.11, -0.32, │
│ 较小的动物" Embedding 0.58, ..., 0.21] │
│ │
│ 两向量距离很近,因为语义相似 │
│ │
└─────────────────────────────────────────────────────────────┘
常见的嵌入模型 #
text
┌─────────────────────────────────────────────────────────────┐
│ 嵌入模型选择 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 文本嵌入: │
│ │
│ 1. OpenAI Embeddings │
│ - text-embedding-3-small(性价比高) │
│ - text-embedding-3-large(效果最好) │
│ - 需要 API Key │
│ │
│ 2. Cohere Embeddings │
│ - embed-english-v3.0 │
│ - embed-multilingual-v3.0 │
│ - 支持多语言 │
│ │
│ 3. 开源模型 │
│ - sentence-transformers │
│ - BGE embeddings │
│ - 可本地部署 │
│ │
│ 图像嵌入: │
│ - CLIP(OpenAI) │
│ - Vision Transformer │
│ - ResNet │
│ │
│ 音频嵌入: │
│ - Whisper │
│ - Wav2Vec │
│ │
└─────────────────────────────────────────────────────────────┘
使用 OpenAI 生成嵌入 #
python
from openai import OpenAI
client = OpenAI(api_key="your-api-key")
response = client.embeddings.create(
model="text-embedding-3-small",
input="这是一段需要嵌入的文本"
)
embedding = response.data[0].embedding
print(f"向量维度: {len(embedding)}")
print(f"前5个值: {embedding[:5]}")
什么是相似度度量? #
相似度度量用于计算两个向量之间的相似程度。Pinecone 支持多种相似度度量方式。
余弦相似度(Cosine Similarity) #
text
┌─────────────────────────────────────────────────────────────┐
│ 余弦相似度 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 公式: │
│ │
│ cos(θ) = (A · B) / (||A|| × ||B||) │
│ │
│ 其中: │
│ - A · B = 向量点积 │
│ - ||A|| = 向量 A 的模长 │
│ - ||B|| = 向量 B 的模长 │
│ │
│ 特点: │
│ - 值范围:[-1, 1] │
│ - 1 表示完全相同方向 │
│ - 0 表示正交(无关) │
│ - -1 表示完全相反方向 │
│ │
│ 优点: │
│ ✅ 不受向量长度影响 │
│ ✅ 关注向量方向 │
│ ✅ 适合文本相似度 │
│ │
└─────────────────────────────────────────────────────────────┘
欧几里得距离(Euclidean Distance) #
text
┌─────────────────────────────────────────────────────────────┐
│ 欧几里得距离 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 公式: │
│ │
│ d(A, B) = √(Σ(Ai - Bi)²) │
│ │
│ 特点: │
│ - 值范围:[0, +∞) │
│ - 0 表示完全相同 │
│ - 值越大表示越不相似 │
│ │
│ 优点: │
│ ✅ 直观理解 │
│ ✅ 考虑向量长度 │
│ ✅ 适合物理距离计算 │
│ │
│ 注意: │
│ Pinecone 返回的是距离的平方 │
│ │
└─────────────────────────────────────────────────────────────┘
点积(Dot Product) #
text
┌─────────────────────────────────────────────────────────────┐
│ 点积 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 公式: │
│ │
│ A · B = Σ(Ai × Bi) │
│ │
│ 特点: │
│ - 值范围:(-∞, +∞) │
│ - 受向量长度影响 │
│ - 计算速度最快 │
│ │
│ 优点: │
│ ✅ 计算效率高 │
│ ✅ 适合归一化向量 │
│ │
│ 注意: │
│ 如果向量已归一化,点积 = 余弦相似度 │
│ │
└─────────────────────────────────────────────────────────────┘
选择建议 #
text
┌─────────────────────────────────────────────────────────────┐
│ 相似度度量选择 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 使用余弦相似度的场景: │
│ ✅ 文本语义相似度(推荐) │
│ ✅ 向量长度不重要 │
│ ✅ 大多数 NLP 任务 │
│ │
│ 使用欧几里得距离的场景: │
│ ✅ 物理距离计算 │
│ ✅ 图像相似度 │
│ ✅ 需要考虑向量长度 │
│ │
│ 使用点积的场景: │
│ ✅ 向量已归一化 │
│ ✅ 需要最快计算速度 │
│ ✅ 推荐系统 │
│ │
└─────────────────────────────────────────────────────────────┘
什么是索引(Index)? #
索引是 Pinecone 中存储和搜索向量的基本单元。每个索引都有固定的维度和相似度度量方式。
索引的结构 #
text
┌─────────────────────────────────────────────────────────────┐
│ 索引结构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Index │
│ ├── 名称:my-index │
│ ├── 维度:1536 │
│ ├── 度量:cosine │
│ ├── 类型:Serverless / Pod-based │
│ │ │
│ └── 向量数据 │
│ ├── Vector 1 │
│ │ ├── id: "doc-1" │
│ │ ├── values: [0.1, 0.2, ...] │
│ │ └── metadata: {"title": "Doc 1"} │
│ │ │
│ ├── Vector 2 │
│ │ ├── id: "doc-2" │
│ │ ├── values: [0.3, 0.4, ...] │
│ │ └── metadata: {"title": "Doc 2"} │
│ │ │
│ └── ... │
│ │
└─────────────────────────────────────────────────────────────┘
索引类型 #
text
┌─────────────────────────────────────────────────────────────┐
│ 索引类型 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Serverless 索引(推荐) │
│ │
│ 特点: │
│ - 完全托管,自动扩展 │
│ - 按使用量付费 │
│ - 无需预配置资源 │
│ - 适合大多数场景 │
│ │
│ 创建: │
│ pc.create_index( │
│ name="my-index", │
│ dimension=1536, │
│ metric="cosine", │
│ spec=ServerlessSpec( │
│ cloud="aws", │
│ region="us-east-1" │
│ ) │
│ ) │
│ │
│ 2. Pod-based 索引 │
│ │
│ 特点: │
│ - 预配置资源 │
│ - 更高的控制度 │
│ - 适合高吞吐量场景 │
│ │
│ 创建: │
│ pc.create_index( │
│ name="my-index", │
│ dimension=1536, │
│ metric="cosine", │
│ spec=PodSpec( │
│ environment="production", │
│ pod_type="p1.x1" │
│ ) │
│ ) │
│ │
└─────────────────────────────────────────────────────────────┘
什么是命名空间(Namespace)? #
命名空间是索引内的逻辑分区,用于隔离不同类型的向量数据。
命名空间的作用 #
text
┌─────────────────────────────────────────────────────────────┐
│ 命名空间 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Index: my-index │
│ │ │
│ ├── Namespace: "products" │
│ │ ├── Vector: product-1 │
│ │ ├── Vector: product-2 │
│ │ └── ... │
│ │ │
│ ├── Namespace: "articles" │
│ │ ├── Vector: article-1 │
│ │ ├── Vector: article-2 │
│ │ └── ... │
│ │ │
│ └── Namespace: "users" │
│ ├── Vector: user-1 │
│ └── ... │
│ │
│ 特点: │
│ ✅ 逻辑隔离,互不影响 │
│ ✅ 共享索引资源 │
│ ✅ 支持多租户架构 │
│ ✅ 无需创建多个索引 │
│ │
└─────────────────────────────────────────────────────────────┘
使用命名空间 #
python
index.upsert(
vectors=[
("product-1", [0.1, 0.2, ...], {"name": "Product 1"})
],
namespace="products"
)
results = index.query(
vector=[0.1, 0.2, ...],
top_k=10,
namespace="products"
)
什么是元数据(Metadata)? #
元数据是附加在向量上的结构化信息,用于过滤和丰富搜索结果。
元数据的结构 #
text
┌─────────────────────────────────────────────────────────────┐
│ 元数据结构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 向量示例: │
│ { │
│ "id": "doc-1", │
│ "values": [0.1, 0.2, 0.3, ...], │
│ "metadata": { │
│ "title": "Pinecone 入门指南", │
│ "category": "技术文档", │
│ "author": "张三", │
│ "date": "2024-01-15", │
│ "tags": ["AI", "向量数据库"], │
│ "views": 1000, │
│ "rating": 4.5 │
│ } │
│ } │
│ │
│ 支持的数据类型: │
│ - 字符串(String) │
│ - 数字(Number:int, float) │
│ - 布尔值(Boolean) │
│ - 字符串列表(List of Strings) │
│ │
│ 限制: │
│ - 单个元数据最大 40KB │
│ - 字符串值最大 1000 字符 │
│ - 列表最多 1000 个元素 │
│ │
└─────────────────────────────────────────────────────────────┘
元数据过滤 #
python
results = index.query(
vector=query_vector,
top_k=10,
filter={
"category": {"$eq": "技术文档"},
"views": {"$gte": 500},
"tags": {"$in": ["AI"]}
}
)
核心概念总结 #
text
┌─────────────────────────────────────────────────────────────┐
│ 核心概念关系图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Pinecone Account │ │
│ │ ┌───────────────────────────────────────────────┐ │ │
│ │ │ Index │ │ │
│ │ │ - 名称、维度、度量 │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │
│ │ │ │ Namespace 1 │ │ Namespace 2 │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ │ │
│ │ │ │ │ Vector │ │ │ │ Vector │ │ │ │ │
│ │ │ │ │ - id │ │ │ │ - id │ │ │ │ │
│ │ │ │ │ - values│ │ │ │ - values│ │ │ │ │
│ │ │ │ │ - meta │ │ │ │ - meta │ │ │ │ │
│ │ │ │ └─────────┘ │ │ └─────────┘ │ │ │ │
│ │ │ └─────────────┘ └─────────────┘ │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
下一步 #
现在你已经了解了 Pinecone 的核心概念,接下来学习 安装与配置,开始动手实践!
最后更新:2026-04-04