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

NextJS 14项目Pinecone调用报错:this.pineconeIndex.namespace is not a function

解决PineconeStore报错:this.pineconeIndex.namespace is not a function

这个错误的核心原因是Pinecone SDK版本与LangChain的PineconeStore实现不兼容:旧版Pinecone SDK(v1.x)的Index对象提供namespace()方法,而新版SDK(v2.x)已经移除了这个方法,改用index.namespace("namespace-name")的方式获取命名空间对象。

方案一:降级Pinecone SDK到兼容版本(最快解决)

如果不想改动现有代码,可以直接降级到Pinecone v1.x SDK:

  1. 卸载当前SDK:
npm uninstall @pinecone-database/pinecone
  1. 安装v1.x兼容版本:
npm install @pinecone-database/pinecone@1.1.0

降级后,你的现有代码(包括pinecone.ts和API路由)无需修改,即可正常运行。

方案二:升级到Pinecone v2 SDK并适配代码(推荐长期方案)

如果想使用最新版Pinecone SDK,需要同步调整代码:

1. 更新依赖

确保安装最新版的LangChain相关包和Pinecone v2 SDK:

npm update @langchain/community @langchain/openai @langchain/core
npm install @pinecone-database/pinecone

2. 修改pinecone.ts初始化代码

新版Pinecone SDK不再需要指定environment,API密钥已包含环境信息:

import { Pinecone } from "@pinecone-database/pinecone";

const getPineconeClient = async () => {
  const pinecone = new Pinecone({
    apiKey: process.env.PINECONE_API_KEY!,
  });

  return pinecone;
};

export default getPineconeClient;

3. 调整API路由中的PineconeStore调用

在创建索引对象时直接指定命名空间,不再将namespace作为参数传给fromDocuments:

/* eslint-disable import/prefer-default-export, @typescript-eslint/no-unused-vars */

import { PDFLoader } from "langchain/document_loaders/fs/pdf"
import { NextRequest, NextResponse } from "next/server"
import { OpenAIEmbeddings } from "@langchain/openai"
// 确保从@langchain/community导入PineconeStore
import { PineconeStore } from "@langchain/community/vectorstores/pinecone"
import getPineconeClient from "@/lib/pinecone"

async function streamToArrayBuffer(stream: ReadableStream) {
  return new Uint8Array(await new Response(stream).arrayBuffer())
}

export async function POST(request: NextRequest) {
  const data = await request.body

  if (!data) return NextResponse.json({ success: false })
  const arrayBuffer = await streamToArrayBuffer(data)
  const blob = new Blob([arrayBuffer])
  const loader = new PDFLoader(blob)
  const pageLevelDocs = await loader.load()
  const pagesAmt = pageLevelDocs.length

  // Vectorize and index document
  const pinecone = await getPineconeClient()
  // 直接获取带命名空间的索引对象
  const pineconeIndex = pinecone.Index("poco").namespace("pdf")
  const embeddings = new OpenAIEmbeddings({
    openAIApiKey: process.env.OPENAI_API_KEY,
  })
  // 不再传递namespace参数
  await PineconeStore.fromDocuments(pageLevelDocs, embeddings, {
    pineconeIndex,
  })

  return NextResponse.json({ success: true, pages: pagesAmt })
}

内容的提问来源于stack exchange,提问作者Ubiquitous Ubuntu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:23:15