Skip to main content

Documentation Index

Fetch the complete documentation index at: https://langchain-zh.cn/llms.txt

Use this file to discover all available pages before exploring further.

Pinecone 是一个向量数据库,为全球顶尖公司的 AI 应用提供支持。 本指南提供了快速入门 Pinecone 向量存储 的概览。有关 PineconeStore 所有功能和配置的详细文档,请参阅 API 参考

概述

集成详情

设置

要使用 Pinecone 向量存储,你需要创建一个 Pinecone 账户、初始化一个索引,并安装 @langchain/pinecone 集成包。你还需要安装 官方 Pinecone SDK 来初始化一个客户端,以便传递给 PineconeStore 实例。 本指南还将使用 OpenAI 嵌入,这需要你安装 @langchain/openai 集成包。你也可以根据需要选择使用 其他支持的嵌入模型
npm install @langchain/pinecone @langchain/openai @langchain/core @pinecone-database/pinecone@5

凭证

注册一个 Pinecone 账户并创建一个索引。确保维度与你想要使用的嵌入模型匹配(OpenAI 的 text-embedding-3-small 默认维度为 1536)。完成这些后,设置 PINECONE_INDEXPINECONE_API_KEY 和(可选)PINECONE_ENVIRONMENT 环境变量:
process.env.PINECONE_API_KEY = "你的-pinecone-api-key";
process.env.PINECONE_INDEX = "你的-pinecone-index";

// 可选
process.env.PINECONE_ENVIRONMENT = "你的-pinecone-environment";
如果你在本指南中使用 OpenAI 嵌入,还需要设置你的 OpenAI 密钥:
process.env.OPENAI_API_KEY = "你的_API_KEY";
如果你想获取模型调用的自动追踪,也可以设置你的 LangSmith API 密钥,取消下面的注释即可:
// process.env.LANGSMITH_TRACING="true"
// process.env.LANGSMITH_API_KEY="你的-api-key"

实例化

import { PineconeStore } from "@langchain/pinecone";
import { OpenAIEmbeddings } from "@langchain/openai";

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

const embeddings = new OpenAIEmbeddings({
  model: "text-embedding-3-small",
});

const pinecone = new PineconeClient();
// 将自动读取 PINECONE_API_KEY 和 PINECONE_ENVIRONMENT 环境变量
const pineconeIndex = pinecone.Index(process.env.PINECONE_INDEX!);

const vectorStore = await PineconeStore.fromExistingIndex(
  embeddings,
  {
    pineconeIndex,
    // 允许同时进行的最大批处理请求数。每批包含 1000 个向量。
    maxConcurrency: 5,
    // 你也可以在这里传递命名空间
    // namespace: "foo",
  }
);

管理向量存储

向向量存储添加项目

import type { Document } from "@langchain/core/documents";

const document1: Document = {
  pageContent: "细胞的动力源是线粒体",
  metadata: { source: "https://example.com" }
};

const document2: Document = {
  pageContent: "建筑物由砖块构成",
  metadata: { source: "https://example.com" }
};

const document3: Document = {
  pageContent: "线粒体由脂质构成",
  metadata: { source: "https://example.com" }
};

const document4: Document = {
  pageContent: "2024 年奥运会在巴黎举行",
  metadata: { source: "https://example.com" }
}

const documents = [document1, document2, document3, document4];

await vectorStore.addDocuments(documents, { ids: ["1", "2", "3", "4"] });
[ '1', '2', '3', '4' ]
注意: 添加文档后,需要短暂延迟才能进行查询。

从向量存储删除项目

await vectorStore.delete({ ids: ["4"] });

查询向量存储

一旦你的向量存储创建完成并添加了相关文档,你很可能会在运行链或代理时查询它。

直接查询

执行简单的相似性搜索可以按如下方式进行:
// 可选过滤器
const filter = { source: "https://example.com" };

const similaritySearchResults = await vectorStore.similaritySearch("生物学", 2, filter);

for (const doc of similaritySearchResults) {
  console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
* 细胞的动力源是线粒体 [{"source":"https://example.com"}]
* 线粒体由脂质构成 [{"source":"https://example.com"}]
如果你想执行相似性搜索并获取相应的分数,可以运行:
const similaritySearchWithScoreResults = await vectorStore.similaritySearchWithScore("生物学", 2, filter)

for (const [doc, score] of similaritySearchWithScoreResults) {
  console.log(`* [相似度=${score.toFixed(3)}] ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`);
}
* [相似度=0.165] 细胞的动力源是线粒体 [{"source":"https://example.com"}]
* [相似度=0.148] 线粒体由脂质构成 [{"source":"https://example.com"}]

转换为检索器进行查询

你也可以将向量存储转换为 检索器,以便在链中更轻松地使用。
const retriever = vectorStore.asRetriever({
  // 可选过滤器
  filter: filter,
  k: 2,
});

await retriever.invoke("生物学");
[
  Document {
    pageContent: '细胞的动力源是线粒体',
    metadata: { source: 'https://example.com' },
    id: undefined
  },
  Document {
    pageContent: '线粒体由脂质构成',
    metadata: { source: 'https://example.com' },
    id: undefined
  }
]

用于检索增强生成

有关如何使用此向量存储进行检索增强生成(RAG)的指南,请参阅以下部分:

API 参考

有关 PineconeStore 所有功能和配置的详细文档,请参阅 API 参考