You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pinecone时持续触发RateLimitError,寻求解决办法

解决Pinecone嵌入时的RateLimitError方案
  • 拆分批次并添加固定延迟:将60份文档拆分成更小的批次(比如每10份一批),每处理完一批后暂停几秒,降低短时间内的请求密度。示例代码:
import time
from langchain.vectorstores import Pinecone

batch_size = 10
for idx in range(0, len(texts), batch_size):
    batch_texts = texts[idx:idx+batch_size]
    Pinecone.from_texts(
        [t.page_content for t in batch_texts], 
        embeddings, 
        index_name=index_name
    )
    time.sleep(2)  # 根据API限流阈值调整延迟时长
  • 实现指数退避重试:遇到RateLimitError时自动重试,且每次重试的等待时间指数级增长,避免持续触发限流规则。可以借助tenacity库实现:
from tenacity import retry, stop_after_attempt, wait_exponential
from langchain.vectorstores import Pinecone

@retry(
    stop=stop_after_attempt(5),  # 最多重试5次
    wait=wait_exponential(multiplier=1, min=2, max=10)  # 等待时间从2秒起步,上限10秒
)
def upsert_batch(texts_batch, embeddings, index_name):
    Pinecone.from_texts(
        [t.page_content for t in texts_batch], 
        embeddings, 
        index_name=index_name
    )

batch_size = 10
for idx in range(0, len(texts), batch_size):
    upsert_batch(texts[idx:idx+batch_size], embeddings, index_name)
  • 直接使用Pinecone原生SDK:绕过LangChain的封装,用Pinecone官方SDK更精细地控制请求流程,减少中间层可能带来的额外请求压力:
import pinecone
import time

pinecone.init(api_key="你的API密钥", environment="你的环境名")
index = pinecone.Index(index_name)

batch_size = 10
for idx in range(0, len(texts), batch_size):
    batch = texts[idx:idx+batch_size]
    # 生成嵌入向量
    vectors = embeddings.embed_documents([t.page_content for t in batch])
    # 构造Pinecone要求的数据格式
    records = [
        (f"doc-{idx+i}", vec, {"content": t.page_content})
        for i, (vec, t) in enumerate(zip(vectors, batch))
    ]
    index.upsert(vectors=records)
    time.sleep(2)
  • 检查API配额:确认你的Pinecone账号是否超出了当前的请求配额(免费版配额有限),如果是,考虑升级付费套餐或者联系官方调整配额。

内容的提问来源于stack exchange,提问作者Akash Kundu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:12:46