Pinecone 向量数据库手册
Pinecone 向量数据库手册
适用版本:Serverless(On-Demand)架构 + Python SDK v10.3.0(对应 2026-07 API,核实于 2026-11) 许可与形态:闭源 SaaS 商业托管;全托管 Serverless(另有 Dedicated Read Nodes / BYOC) 一句话定位:买的是运维责任转移 —— 不建集群、不管分片副本与索引重建,按用量付费,并接受 SDK 与 API version 绑定 约定:
$普通用户、#root 或 sudo、<xxx>为占位符;标 ⚠️ 的是高危操作。 更新时间:2026-11(版本与 API 变化快,执行前请以官方文档复核)
目录
1. 它是什么、什么时候选它
1.1 定位与架构
Pinecone 是闭源 SaaS 全托管向量数据库,当前架构是 Serverless(On-Demand),pod-based 已是 legacy。你没有服务器、没有容器、没有索引文件,只有一个 API key 和一个控制面域名。
| 层 | 谁负责 | 说明 |
|---|---|---|
| 集群 / 分片 / 副本 / 调度 | Pinecone | 用户不可见、不可配 |
| 索引构建、持久化、恢复、扩容 | Pinecone | Serverless 自动 |
| 控制面 | Pinecone | api.pinecone.io;创建 / 描述 / 删除索引 |
| 数据面 | Pinecone | pc.index() 拿到索引句柄后读写文档 |
| 计量与账单 | Pinecone | 存储 / WU / RU / Egress 四维度 |
| API key、SDK 版本、成本、合规 | 调用方 | 责任仍在自己 |
| 源数据、备份副本、RAG 编排 | 调用方 | 不因托管而消失 |
形态补充:另有 Dedicated Read Nodes 与 BYOC(2026-08-25 GA);存量 pod 索引仍可 describe / configure / delete,但新签 Standard / Enterprise 自 2025-08-18 起不能创建 pod 索引,API version 2026-07 的 SDK 创建 pod 索引直接返回 400。
1.2 核心命题:托管服务买的是运维责任转移
| 你不再负责 | 你仍然负责 |
|---|---|
| 搭集群、装依赖、调内核参数 | API key 的申请、分发、轮换与泄露处置 |
| 分片 / 副本 / 高可用 / 多可用区 | 源数据留存与可导出性 |
| 索引重建、容量估算、磁盘与 OOM | 账单:读 / 写 / 存储 / Egress 四维监控 |
| 版本升级、补丁、跨版本迁移 | SDK 版本与 API version 的锁定、回归测试 |
| 备份恢复底座、监控端点 | 数据出境合规评估、网络出口放行 |
| 服务化(REST/gRPC)与 SLA 底座 | 配额上限、40KB 文档上限、异步可见性 |
避坑:「托管」不等于「零运维」。责任只是从「集群运维」转成「凭证、成本、合规、SDK 生命周期」四件事,第 7 章全部围绕这四件展开,而不是教你自己搭集群。
1.3 与自建 / 其他云托管的本质差别
与自建 Milvus / Qdrant 相比,Pinecone 不暴露服务端版本(只有 API version)、用专有 SDK 而非 pymilvus / 标准协议、按四维用量计费、数据落在厂商境外 region;与 03 分册的索引库相比,它是完整托管服务而非进程内库。
1.4 适合 / 不适合
适合:不想养向量库运维团队;流量波动大、需要弹性;RAG / 推荐 / 语义检索快速上线;能接受海外 region 与按量账单;团队用 Python 3.10+。
不适合:数据不得出境或有强合规 / 等保要求且无法用 BYOC 解决;需要自建多可用区与自定义内核调优;强依赖标准协议(pymilvus / SQL)以便随时迁出;预算固定、读量极大且 Egress 敏感;需要本地私有化部署。
1.5 规模与链路位置(经验值,非官方承诺)
官方资料未给出 QPS / 条数 / 延迟的官方承诺值,容量与性能以控制台与实测为准;示例用 3~4 维,实际常见 768 / 1024 / 1536。在线链路:业务侧做 embedding → index.documents.upsert → 等待异步索引 → index.documents.search 取回文档与 metadata → 重排 / 拼 prompt。文档管理、权限、审计仍在调用方。
1.6 计费维度、额度与限制
| 计费维度 | 单价 / 额度 | 备注 |
|---|---|---|
| 套餐 | Starter 免费 / Builder $20 月 / Standard 最低 $50 月 / Enterprise 最低 $500 月 | 闭源 SaaS 分层 |
| 存储 | $0.33/GB/月 | 按量 |
| Write Units | $4–4.5/百万 | 写入计量 |
| Read Units | $16–18/百万 | 读取计量 |
| Egress | $0.10/GB | 2026-09-01 起开始计量,用尽会阻断读 |
| Bulk import credit | 新 Standard / Enterprise 不再赠 $250 | 变更提醒 |
| 限制项 | 值 / 事实 |
|---|---|
| 每文档大小 | 上限 40KB |
metric 可选值 |
仅 cosine / dotproduct / euclidean |
| Python 版本 | 3.10+ |
| 文档可见性 | 异步索引,需等待 |
| pod 索引 | 新签不能创建;2026-07 API 创建返回 400;存量可 describe / configure / delete |
1.7 网络与合规(数据出境)
Pinecone 是海外 SaaS,数据落在厂商 region;中国企业把数据写进去即构成数据出境,需自行评估《个人信息保护法》《数据安全法》相关的出境路径与合规义务(经验性表述,非法律结论,以法务与官方合规文档为准)。
- 网络:控制面
api.pinecone.io走公网 HTTPS,企业出口需放行;v10.3.0 起 gRPCproxy_url只接受http://。 - 缓解:BYOC(2026-08-25 GA)把部署放到自有云账号,可缓解部分合规诉求;具体能力与区域清单官方资料未给出,以官方文档为准。
- 混合架构:若同时使用国内云向量库(见
国内云向量数据库.md),要划清「哪些数据出境、哪些留境内」的边界。
1.8 SDK 绑定与迁移成本
| 绑定点 | 说明 | 迁出代价 |
|---|---|---|
pc.indexes.* 资源式控制面 |
Pinecone 专有 | 索引创建 / 描述代码重写 |
SchemaBuilder + schema |
专有 schema 构造 | 换成目标库的字段定义 |
index.documents.upsert/search |
专有 Documents API | 数据接入层全部重写 |
score_by / include_fields |
专有检索参数 | 查询构造重写 |
pc.index()(非 pc.Index()) |
只有它才能访问 index.documents |
调用点全改 |
| metadata 存非 schema 字段 | 与 Pinecone 存储模型绑定 | 导出后重新建模 |
避坑:Pinecone 没有 pymilvus / SQL 这类行业标准协议,迁出成本主要不在数据(可导出),而在接入层与运维脚本全部重写。选型时把「未来能不能走」算进成本。
2. 版本、许可与官方入口
2.1 版本状态表(版本号分属多条线,不可混用)
| 线 | 版本 | 时间 | 状态 / 备注 |
|---|---|---|---|
| 架构 | Serverless(On-Demand) | 当前 | pod-based 已 legacy |
| API version | 2026-07 | 当前 | SDK v10 对应 |
| Python SDK | v10.3.0 | 2026-11-03 | 最新;v10.3.0 起 gRPC proxy_url 只接受 http:// |
| Python SDK | v10.0.0 | 官方未标注日期 | 对应 2026-07 API,Documents API 毕业到主客户端 |
| Python SDK | v9.0.0 | 官方未标注日期 | total rewrite:一个包覆盖 REST/async/gRPC,Python 3.10+,资源式 pc.indexes |
| BYOC | GA | 2026-08-25 | 形态补充 |
| 计量变更 | egress 开始计量 | 2026-09-01 | 用尽阻断读 |
| pod 限制 | 新签不能建 pod | 2025-08-18 | Standard / Enterprise |
2.2 许可与商业边界
闭源 SaaS;SDK 自 v3.0.0 起为 Apache-2.0(仅客户端 SDK,不是服务端许可)。分层:Starter 免费 / Builder / Standard / Enterprise。企业特性与 SLA 条款以官方为准。
2.3 官方入口表
| 类型 | 地址 |
|---|---|
| 官网 | https://www.pinecone.io |
| 文档 | https://docs.pinecone.io |
| SDK(GitHub / Releases) | https://github.com/pinecone-io/pinecone-python-client |
| 定价 | https://www.pinecone.io/pricing/ |
| Release Notes | https://www.pinecone.io/docs/release-notes |
| 控制面 | api.pinecone.io |
2.4 版本识别命令
没有服务端版本号,只能识别客户端:
$ pip show pinecone
$ python -c "import os, pinecone; print(pinecone.__version__ if hasattr(pinecone, '__version__') else 'see pip show')"
服务端版本 / 集群引擎版本不对外暴露,见 2.5。
2.5 「没有版本号、只有 API version」的运维含义
| 含义 | 对运维的实际影响 |
|---|---|
无 SELECT version()、无集群引擎版本 |
无法做服务端灰度 / 回滚,只能回滚你自己的 SDK 版本 |
你锁定的是 pinecone==x.y.z + API version |
升级 = 换 SDK / 切 API version,必须跑回归 |
| 变更窗口由厂商决定 | 要盯 Release Notes 与 pricing 页;变更不需要你点确认 |
| 静默生效的变更确有先例 | 2026-09-01 起计量 egress、用尽阻断读;新套餐不再赠 credit |
| 行为差异按 API version 分界 | 2026-07 API 下创建 pod 索引返回 400 |
| 故障定界更依赖厂商 | 服务端无版本可比,只能靠 pc.indexes.describe(...).status.ready 与工单 |
避坑:把 SDK 版本当「服务端版本」写进变更单是错的。生产要同时 pin SDK 版本、记录 API version、订阅 release notes,并把 SDK 升级纳入回归测试范围。
2.6 近两年重要变更与弃用提醒
版本差异:
pinecone.init()→Pinecone();pc.Index()→pc.index();2026-07 API 用SchemaBuilder+index.documents.*;pod-based 已 legacy;v10.0.0 把 Documents API 毕业到主客户端;v10.3.0 起 gRPCproxy_url只接受http://;老的create_index(..., spec=ServerlessSpec(...))在 v10 仍可用且未弃用。
3. 安装与启动
3.1 前置条件
Python 3.10+;一个 Pinecone 账号与 API key;企业网络出口放行 api.pinecone.io 的 HTTPS。无本地服务、无容器、无端口监听。
3.2 方式一:pip 安装客户端(完整命令)
$ python -m pip install --upgrade pinecone
$ export PINECONE_API_KEY="<YOUR_API_KEY>"
$ python -c "import os; print('key set:', bool(os.environ.get('PINECONE_API_KEY')))"
避开:不要把 API key 写进代码或提交到仓库;用环境变量 / 密钥管理服务注入。
3.3 方式二:云控制台创建索引 + 客户端连通
控制台侧在 Web UI 创建 Serverless 索引(无本地命令,操作步骤以控制台为准),客户端侧用 pc.indexes.describe 验证就绪与连通:
$ python -c "import os; from pinecone import Pinecone; pc = Pinecone(api_key=os.environ['PINECONE_API_KEY']); print(pc.indexes.describe(name='<INDEX_NAME>').status.ready)"
避坑:索引刚创建时
status.ready可能为 False,必须轮询等待;文档 upsert 后也是异步索引,要再等一段时间才查得到。
3.4 方式三:Docker / Helm
不适用:全托管 SaaS,没有官方自托管镜像。若需要 Docker / Helm,说明应选自建产品(见 03 分册或 Milvus 分册)。
3.5 目录与端口表 / 健康检查 / 生产最小配置
| 项 | 值 / 做法 |
|---|---|
| 本地监听端口 | 无 |
| 控制面 | api.pinecone.io(HTTPS,通用默认 443) |
| 本地数据目录 | 无;源数据由调用方自己留 |
| 默认 namespace | __default__ |
| 健康检查 | pc.indexes.describe(name=...).status.ready |
| 认证 | API key(PINECONE_API_KEY),无本地账号体系 |
| 生产最小配置 | 固定 pinecone== 版本、API key 走密钥管理、出口白名单、开启成本告警 |
| 日志 | 客户端日志 + 云控制台;无本地日志文件 |
4. 核心概念与数据模型
4.1 术语对照表
| Pinecone 术语 | 通用术语 | 关系型类比 | 说明 |
|---|---|---|---|
| Organization / Project | 租户 | 实例 / 库 | 计费与隔离边界 |
| Index | 索引 / 集合 | 一张表 | Serverless 当前架构 |
| Namespace | 分区 | schema / 分区 | 示例 __default__ |
| Document | 文档 / 记录 | 一行 | 有 _id,上限 40KB |
| Schema / dense vector field | 向量字段 | 向量列 | SchemaBuilder 构造 |
| Metadata | 标量字段 | 普通列 | 非 schema 字段存这里 |
| Read Unit / Write Unit | 读 / 写计量 | 计费单位 | 按百万计价 |
| Egress | 出向流量 | 计费单位 | 2026-09-01 起计量 |
| API version | 接口版本 | 协议版本 | 替代服务端版本号 |
4.2 数据模型层级与字段
组织 / 项目 → Index(SchemaBuilder 定义 schema)→ Namespace → Document(_id + dense vector 字段 + 其余字段进 metadata)。官方 Quickstart 的 SchemaBuilder().add_dense_vector_field(name="embedding", dimension=1024, metric="cosine") 定义 dense 向量字段;非 schema 字段(如 text)自动进 metadata。
| 项 | 约束 |
|---|---|
| 向量字段 | dense;dimension 与写入向量长度一致(官方 Quickstart 用 1024,本篇示例用 4 维便于运行) |
metric |
仅 cosine / dotproduct / euclidean |
| 文档大小 | 每文档 40KB 上限 |
| 业务 ID | _id 字段 |
4.3 距离度量与方向
官方资料未给出
cosine/dotproduct/euclidean的打分方向与取值范围。经验上 cosine / dotproduct 类相似度越大越相似、euclidean 类距离越小越相似,但分数语义与阈值以官方文档为准,不要照搬其他库的阈值。
4.4 索引类型与关键参数表
| 类型 / 参数 | 状态 / 值 | 说明 |
|---|---|---|
| Serverless(On-Demand) | 当前架构 | 默认,无需配 pod 规格 |
| pod-based | legacy | 新签不能创建;2026-07 API 创建返回 400;存量可 describe / configure / delete |
| Dedicated Read Nodes | 形态补充 | 官方资料未给参数 |
| BYOC | 2026-08-25 GA | 官方资料未给参数 |
name |
索引名 | pc.indexes.create(name=..., schema=...) |
schema |
SchemaBuilder().build() |
定义 dense 字段 |
namespace |
__default__ |
读写都要带 |
top_k |
检索条数 | search 参数 |
score_by |
稠密检索打分 | 官方 Quickstart 用 [{"type":"dense_vector", ...}] |
include_fields |
返回字段 | ["*"] 取全部 |
4.5 写入 → 建索引 → 可检索的生命周期
pc.indexes.create(name=..., schema=schema) 建索引异步就绪,需轮询 status.ready;index = pc.index(name=...) 拿句柄;index.documents.upsert(...) 写文档异步索引(官方 Quickstart 用 time.sleep(5) 等待);之后 index.documents.search(...) 才稳定可检索;更新为同 _id 再 upsert,同样异步;清理为删除索引(方法名见第 11 章)。
4.6 一致性模型
文档写入为异步索引,存在「写完立刻查不到」的窗口;官方 Quickstart 用固定 time.sleep(5) 等待,生产应改为轮询 / 重试而非死等固定秒数。读己之写的一致性级别官方资料未明确,以官方文档为准。
5. 快速上手:完整 CRUD 示例
说明:以下按官方 Quickstart(2026-07 API,Bring your own vectors)的当前写法给出,import 齐全、变量有定义。示例用 4 维向量便于直接运行;官方 Quickstart 用
dimension=1024,实际常见 768 / 1024 / 1536。
5.1 完整可运行示例(Python 3.10+)
import os
import time
from pinecone import Pinecone, SchemaBuilder
pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"])
INDEX_NAME, NS = "byo-vectors", "__default__"
# C:创建集合(schema 定义 dense 向量字段)
schema = (SchemaBuilder()
.add_dense_vector_field(name="embedding", dimension=4, metric="cosine")
.build())
if not pc.indexes.exists(name=INDEX_NAME):
pc.indexes.create(name=INDEX_NAME, schema=schema)
while not pc.indexes.describe(name=INDEX_NAME).status.ready:
time.sleep(2)
index = pc.index(name=INDEX_NAME) # 用 pc.index(),不是 pc.Index()
# U/C:插入文档(非 schema 字段 text / category 进 metadata)
q = [0.1, 0.2, 0.3, 0.45]
index.documents.upsert(namespace=NS, documents=[
{"_id": "1", "embedding": [0.1, 0.2, 0.3, 0.4], "text": "三国演义", "category": "history"},
{"_id": "2", "embedding": [0.9, 0.1, 0.2, 0.1], "text": "三体", "category": "scifi"},
])
time.sleep(5) # 文档异步索引,需等待
# R:相似度检索
resp = index.documents.search(
namespace=NS, top_k=3,
score_by=[{"type": "dense_vector", "fields": ["embedding"], "values": q}],
include_fields=["*"])
print("命中 =", resp)
# 带标量过滤检索:服务端过滤参数名未查到官方明确说明,此处演示客户端后过滤兜底
hits = getattr(resp, "result", None) or getattr(resp, "documents", None) or []
print("过滤命中 =", [d for d in hits if isinstance(getattr(d, "fields", None), dict)
and d.fields.get("category") == "history"])
# U:更新(upsert 语义,同 _id 再写一次即覆盖)
index.documents.upsert(namespace=NS, documents=[
{"_id": "1", "embedding": [0.1, 0.2, 0.3, 0.4], "text": "三国演义(修订)", "category": "history"}])
time.sleep(5)
# D:单文档删除方法名官方未明确,以官方为准;此处用删除索引做清理
# 清理(与 pc.indexes.create 对称的资源式操作,方法名以官方文档为准,见第 11 章)
pc.indexes.delete(name=INDEX_NAME)
print("已请求删除索引", INDEX_NAME)
避坑:旧教程会写成
import pinecone; pinecone.init(api_key=..., environment=...),然后pc.Index("...")再index.upsert(vectors=[...]) / index.query(...)。当前正确写法是Pinecone()构造客户端、pc.index()取句柄、index.documents.upsert/search;2026-07 API 还要先用SchemaBuilder定义 schema。pc.index()才能访问index.documents,pc.Index()不行。老的create_index(..., spec=ServerlessSpec(...))在 v10 仍可用且未弃用,但新项目建议按官方 Quickstart 走pc.indexes.create。
5.2 输出怎么读
search 返回命中文档集合;score_by 决定打分字段,include_fields=["*"] 取回全部字段(含 metadata 里的 text / category)。分数语义与阈值以官方文档为准(第 4.3 节);_id 是业务主键,不是行下标。
⚠️ 危险:
time.sleep(5)只是官方 Quickstart 的演示写法,不是可见性保证。生产必须轮询或重试,否则会出现「写入成功但查不到」的偶发故障。
等价 REST / cURL 示例:官方资料未给出端点与请求体的逐字写法,为避免臆造 URL / 参数,以
https://docs.pinecone.io的 API Reference 为准,本篇不编造。
6. 索引与检索进阶
6.1 参数调优表
| 参数 | 默认 / 示例值 | 影响 | 建议 |
|---|---|---|---|
dimension |
官方 Quickstart 1024 | 与 embedding 维度一致 | 与模型输出一致,不可随意改 |
metric |
三选一 | 相似度口径 | cosine / dotproduct / euclidean,按模型选 |
top_k |
示例 3 | 返回条数、RU 消耗 | 从小到大压测,兼顾过滤后剩余量 |
score_by |
dense_vector | 打分字段与查询向量 | 字段名与 schema 一致 |
include_fields |
["*"] |
返回字段、Egress | 只取需要的字段以省 Egress |
namespace |
__default__ |
数据分区 | 按租户 / 业务隔离 |
| 文档大小 | 上限 40KB | 存储、WU、可存内容 | 大文本拆 chunk,别塞整篇 |
官方资料未给出各参数的默认值与推荐范围,除「每文档 40KB 上限」「metric 三选一」外均为经验性表述,以官方文档与实测为准。
6.2 召回 / 延迟 / 成本取舍
Serverless 的索引结构由厂商托管,用户侧主要可调 top_k、include_fields、namespace 与文档大小。调大 top_k 提升召回上限但同时抬升 Read Units 与返回体(Egress 自 2026-09-01 起计量);include_fields=["*"] 方便但费流量。没有统一最优值,用自己的 query 集压测召回与 p99,并同步看账单。
6.3 标量过滤的 pre/post-filter 行为
官方资料只明确「非 schema 字段存 metadata,每文档 40KB 上限」,未给出服务端过滤的参数名与 pre/post 行为。第 5 章演示的是客户端后过滤兜底:取回候选后按 metadata 过滤。
⚠️ 危险:后过滤会让返回条数变少,
top_k取小、过滤条件 Selective 时可能一条不剩,且白白消耗 Read Units / Egress。生产应优先使用服务端过滤(具体参数以官方文档为准),或放大top_k再截断。
6.4 混合检索 / 多向量 / 稀疏 / 重排 / 量化
官方资料未提供 Pinecone 的 BM25 / 稀疏 / RRF / 量化压缩逐字能力说明,均以官方文档为准,本篇不臆造方法名与参数。可确定的是:混合检索若需自建 BM25 侧,重排与融合逻辑仍在调用方,这属于「托管不转移」的部分。
6.5 容量估算:不估内存,估账单
托管服务不做内存 / 磁盘容量规划,改为计费容量估算:存储 = 总 GB × $0.33/GB/月(10 GB → $3.3/月);Write Units = 写入量(百万)× $4–4.5(2 百万 → $8–9);Read Units = 查询量(百万)× $16–18(1 百万 → $16–18);Egress = 返回流量 GB × $0.10/GB(50 GB → $5);文档数上限按「总容量 ÷ 单文档大小(≤40KB)」换算,以实测为准。
避坑:2026-09-01 起 Egress 用尽会阻断读,账单监控不是财务问题而是可用性问题(见第 7.5 节)。以上单价来自官方资料定价页,实际以官网为准。
7. 生产部署与运维
7.1 前提:不自己搭集群
本章不写「装集群 / 配副本 / 调分片」—— 那些是 Pinecone 的责任。你要运维的是四件事:凭证(API key 申请、分发、轮换、泄露处置)、成本(四维度计量监控与告警)、合规(数据出境评估、区域选择、BYOC 评估)、SDK 生命周期(pin 版本、记录 API version、订阅 release notes、升级回归)。
7.2 备份与恢复
| 项 | 做法 |
|---|---|
| 底座持久化 | 由 Pinecone 托管,用户不做快照 / 恢复 |
| 用户侧备份 | 保留源数据与可导出能力:定期把文档导出到自有存储,确保能重建索引 |
| 删除风险 | 删除索引前确认已导出;具体回收站 / 恢复能力官方资料未给出,以官方文档为准 |
| 恢复演练 | 定期用导出数据在空索引重建并跑召回校验 |
⚠️ 危险:托管不等于免备份。删索引 / 误覆盖前先导出,源数据不在自己手里等于没有兜底。
7.3 多可用区 / 高可用
高可用、多可用区、故障转移由 Serverless 架构与厂商负责;用户不配副本、不做跨区切换。需要更高等级时评估 Dedicated Read Nodes / BYOC,具体能力与区域清单以官方文档为准。健康检查用 pc.indexes.describe(name=...).status.ready 与云控制台状态页。
7.4 密钥轮换
| 步骤 | 做法 |
|---|---|
| 存储 | PINECONE_API_KEY 走环境变量 / 密钥管理服务,禁止入库入仓 |
| 轮换 | 生成新 key → 全量客户端灰度替换 → 观察无报错 → 吊销旧 key |
| 多环境 | 开发 / 预发 / 生产用不同 key,便于计量与隔离 |
| 泄露处置 | 立即吊销、轮换、审计调用量突增 |
| 权限 | RBAC / 项目级隔离能力以官方文档为准 |
⚠️ 危险:一次性全量替换 key 会造成线上瞬时鉴权失败,必须灰度并保留旧 key 直至新 key 全量生效。
7.5 成本监控(可用性级)
| 指标 | 告警阈值建议(经验值) | 为什么 |
|---|---|---|
| Egress GB / 余额 | 接近额度即告警 | 2026-09-01 起用尽会阻断读 |
| Read Units / 分钟 | 突增告警 | 可能被刷量或 top_k 失控 |
| Write Units / 分钟 | 突增告警 | 误导入 / 重试风暴 |
| 存储 GB | 增长趋势告警 | 成本与 40KB 上限相关 |
| 单文档大小 | 接近 40KB 告警 | 超限会写入失败 |
| 异步可见延迟 | 超阈值告警 | 索引积压 / 服务侧异常 |
| 账单环比 | 超预算告警 | 静默变更(如新增计量维度) |
7.6 升级与跨版本迁移
无服务端可升级。你要做的是:pin pinecone== 版本 → 记录 API version(2026-07)→ 订阅 Release Notes / pricing 页 → SDK 升级前在预发跑回归(重点覆盖 pc.indexes.* / index.documents.* 行为变化)→ 灰度发布。跨 API version 的行为差异(如 pod 索引创建返回 400)要写进回归用例。
版本差异:v9.0.0 total rewrite、v10.0.0 对应 2026-07 API、v10.3.0 gRPC
proxy_url只接受http://,这三次都可能让旧脚本报错。
7.7 安全基线 / 网络 / 日志
| 面 | 建议 |
|---|---|
| 认证 | API key,最小权限、分环境、定期轮换 |
| TLS | 走 HTTPS;gRPC proxy_url 仅 http://(v10.3.0 起,按官方约束) |
| 网络暴露面 | 出口白名单 api.pinecone.io;无需开放任何入站端口 |
| 数据合规 | 出境评估;敏感字段不入 metadata |
| 日志 | 客户端日志 + 云控制台;记录 SDK 版本、API version、请求量 |
系统级服务管理(systemd / 防火墙基础)属通用运维,见根目录手册,本篇不重复。
8. 高频故障与排障
| 症状 | 可能原因 | 定位命令 / 方法 | 处置 |
|---|---|---|---|
| 鉴权失败 / 401 | API key 错、未设环境变量、轮换后旧 key | python -c "import os; print(bool(os.environ.get('PINECONE_API_KEY')))" |
重新注入新 key,灰度替换后吊销旧 key |
| 连不上 / 超时 | 出口未放行 api.pinecone.io、代理配置错 |
查出口白名单 / 代理;v10.3.0 起 proxy_url 须 http:// |
放行 HTTPS、修正代理 |
| 索引不存在 | 名字写错、被删、还在创建 | pc.indexes.exists(name=...) |
等 status.ready 或重建 |
| 创建索引后立刻用报错 | 索引异步就绪 | pc.indexes.describe(name=...).status.ready |
轮询等待,别死等固定秒数 |
| 创建 pod 索引返回 400 | 2026-07 API 下 pod-based 已 legacy | 查 API version 与请求体 | 改用 Serverless;存量 pod 只做 describe / configure / delete |
| 写入失败 / 文档超限 | 单文档超 40KB | 检查 metadata / 文本长度 | 拆 chunk,压缩字段 |
| 写入成功但查不到 | 文档异步索引,等待不足 | 稍后重试 search |
改轮询 / 重试,别用一次 time.sleep 兜底 |
| 查不到 / 召回低 | top_k 太小、过滤后滤光、metric 与模型不匹配 |
放大 top_k;核对 metric 三选一 |
调整参数;服务端过滤以官方文档为准 |
| 查询慢 / RU 飙升 | top_k 过大、include_fields=["*"]、刷量 |
看控制台 RU / 账单 | 收敛返回字段与 top_k,加限流 |
| 读被阻断 | Egress 额度用尽(2026-09-01 起计量) | 查账单 / Egress 余额 | 补额度、降返回体、优化 include_fields |
| 版本升级后报错 | 用了 pinecone.init() / pc.Index() / 旧 query() |
pip show pinecone;查 Release Notes |
改 Pinecone() / pc.index() / index.documents.* |
| 过滤结果变少 | 客户端后过滤在 top_k 之后 |
打印过滤前后条数 | 放大 top_k;改用服务端过滤(以官方为准) |
9. 常见坑与避坑清单
- 现象:
pinecone.init(api_key=..., environment=...)报错。原因:v3.0.0 起被Pinecone()取代。怎么做:改pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"])。 - 现象:
pc.Index("...")拿不到index.documents。原因:只有pc.index()才能访问 Documents API。怎么做:统一用pc.index(name=...)。 - 现象:照旧教程
index.query(vector=..., top_k=...)失败。原因:2026-07 API 官方 Quickstart 走index.documents.search(namespace=..., top_k=..., score_by=[...])+SchemaBuilder。怎么做:按第 5 章当前写法重写。 - 现象:新项目想建 pod 索引被拒 400。原因:pod-based 已 legacy,2026-07 API 创建返回 400。怎么做:用 Serverless;存量 pod 只做 describe / configure / delete。
- 现象:文档写入后立刻查不到。原因:文档异步索引。怎么做:生产用轮询 / 重试,别把 Quickstart 的
time.sleep(5)当保证。 - 现象:大文档写入失败。原因:每文档 40KB 上限。怎么做:拆 chunk,别把整篇文本塞 metadata。
- 现象:
metric用了别的值报错。原因:仅cosine/dotproduct/euclidean。怎么做:三选一,且与 embedding 模型匹配。 - 现象:某天读请求突然全失败。原因:2026-09-01 起计量 Egress,用尽会阻断读。怎么做:把 Egress 余额纳入可用性告警(第 7.5 节),收敛
include_fields。 - 现象:账单超预期。原因:四维计量(存储 / WU / RU / Egress)叠加,新套餐不再赠 $250 bulk import credit。怎么做:四维度分别设预算告警。
- 现象:把 SDK 版本当服务端版本写进变更单。原因:没有版本号,只有 API version。怎么做:pin SDK + 记录 API version + 订阅 release notes(第 2.5 节)。
- 现象:SDK 升级后线上脚本报错。原因:v9 total rewrite、v10 API 变更、v10.3.0
proxy_url只接受http://。怎么做:升级前跑回归,灰度发布。 - 现象:以为
create_index(spec=ServerlessSpec(...))被弃用要改。原因:该写法在 v10 仍可用且未弃用。怎么做:不必强行迁移,但新项目按官方 Quickstart 走pc.indexes.create。
⚠️ 危险:第 8 条会直接造成线上读中断,第 9 / 7.2 节的备份缺失会让数据不可恢复;第 1、2、3、11 条属于旧教程误导的典型 API 变更,升级 / 迁移时必须专项回归。
10. 速查表
| 操作 | 命令 / 代码 | 说明 |
|---|---|---|
| 安装 SDK | python -m pip install --upgrade pinecone |
Python 3.10+ |
| 设密钥 | export PINECONE_API_KEY="<YOUR_API_KEY>" |
勿入库入仓 |
| 查 SDK 版本 | pip show pinecone |
无服务端版本命令 |
| 构造客户端 | pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"]) |
取代 pinecone.init() |
| 定义 schema | SchemaBuilder().add_dense_vector_field(name="embedding", dimension=4, metric="cosine").build() |
官方 Quickstart 用 1024 维 |
| 判索引存在 | pc.indexes.exists(name="byo-vectors") |
控制面 |
| 建索引 | pc.indexes.create(name="byo-vectors", schema=schema) |
异步就绪 |
| 等就绪 | pc.indexes.describe(name="byo-vectors").status.ready |
轮询而非死等 |
| 取句柄 | index = pc.index(name="byo-vectors") |
不是 pc.Index() |
| 写文档 | index.documents.upsert(namespace="__default__", documents=[...]) |
异步索引,需等待 |
| 检索 | index.documents.search(namespace=..., top_k=3, score_by=[...], include_fields=["*"]) |
Documents API |
| 更新 | 同 _id 再 index.documents.upsert(...) |
upsert 覆盖语义 |
| metric 取值 | cosine / dotproduct / euclidean |
仅此三个 |
| 文档大小 | ≤ 40KB | 超限写入失败 |
| 分区 | namespace="__default__" |
按租户隔离 |
| 老写法仍可用 | create_index(..., spec=ServerlessSpec(...)) |
v10 未弃用 |
| 删索引 | 资源式删除方法名以官方文档为准 | 见第 11 章 |
| 控成本 | 收敛 top_k / include_fields,盯 Egress |
2026-09-01 起计量 |
| 换自建 | 见 Milvus / Qdrant 分册 | 迁出要重写接入层 |
常用端口与路径小表
| 项 | 值 |
|---|---|
| 本地监听端口 | 无(全托管 SaaS) |
| 控制面 | api.pinecone.io(HTTPS,通用默认 443) |
| 默认 namespace | __default__ |
| API version | 2026-07 |
| 官方入口 | https://www.pinecone.io | https://docs.pinecone.io | https://github.com/pinecone-io/pinecone-python-client |
11. 参考与延伸
11.1 官方文档链接清单
| 内容 | 地址 |
|---|---|
| 官网 | https://www.pinecone.io |
| 文档 | https://docs.pinecone.io |
| 官方 Quickstart(Bring your own vectors) | https://docs.pinecone.io/guides/get-started/quickstart/bring-your-own-vectors |
| pod-based 说明 | https://docs.pinecone.io/guides/indexes/pods/understanding-pod-based-indexes |
| SDK / Releases | https://github.com/pinecone-io/pinecone-python-client |
| 定价 | https://www.pinecone.io/pricing/ |
| Release Notes | https://www.pinecone.io/docs/release-notes |
11.2 与本册其他产品的关系
- 同属「托管服务买的是运维责任转移」:
Zilliz-Cloud.md(全托管 Milvus,直接用 pymilvus)、国内云向量数据库.md(境内合规路线)。 - 想用标准协议降低迁移成本:自建 Milvus / Zilliz Cloud(pymilvus)、pgvector(SQL),见对应分册。
- 不想要托管、只想要索引内核:见 03 分册
Faiss.md、hnswlib-Annoy-ScaNN.md。
11.3 进阶阅读方向
Serverless 向量库的按量成本建模(WU/RU/Egress);异步索引可见性与幂等写入设计;API version 驱动的回归测试体系;数据出境合规与 BYOC 评估;从专有 SDK 迁往标准协议的改造路径。
11.4 本篇「未核实 / 以官方为准」事项
官方资料「六、明确未核实清单」8 条中没有 Pinecone 条目;本篇所引版本、API、单价、URL 均来自官方资料已核实内容。以下为执行前仍需以官方为准的事项,正文未写成确定结论:
| 事项 | 状态 |
|---|---|
index.documents 单文档删除 / 更新之外的方法名与参数 |
官方资料未逐字给出,第 5 章仅用同 _id upsert 表达更新,删除方法名以官方文档为准 |
pc.indexes.delete / configure 等资源式方法的逐字签名 |
官方资料仅说明「存量 pod 索引仍可 describe / configure / delete」,未给方法名,第 5 章清理处已标注 |
| 服务端标量过滤的参数名与 pre/post-filter 行为 | 官方资料未给出,第 5 / 6.3 节以客户端后过滤兜底并标注以官方为准 |
cosine / dotproduct / euclidean 的打分方向与阈值 |
官方资料未给出,第 4.3 节为经验性表述 |
| 混合检索 / 稀疏 / 量化 / 多向量能力 | 官方资料未提供逐字说明,以官方文档为准 |
| REST / cURL 端点与请求体 | 官方资料未给出,第 5.3 节不臆造,以 API Reference 为准 |
| 删除索引后的回收站 / 恢复能力、具体 SLA 与赔付条款、各区域可用区清单 | 官方资料未给出,以官方文档与合同为准 |
| SDK 补丁版本的具体行为差异 | 以 https://github.com/pinecone-io/pinecone-python-client/releases 为准 |