以编程方式使用文档

Qdrant 是一个向量相似度搜索引擎。它提供一个可投入生产的服务,具有方便的 API 来存储、搜索和管理点(带有额外载荷的向量)。

本指南提供了快速入门 Qdrant 向量存储的概述。对于所有 QdrantVectorStore 功能和配置的详细文档,请参阅 API 参考.

概述

集成详情

PY 支持下载版本
QdrantVectorStore@langchain/qdrant!NPM - 下载量!NPM - 版本

设置

要使用 Qdrant 向量存储,请设置 Qdrant 实例并安装 @langchain/qdrant@langchain/core。该 @langchain/qdrant 包捆绑了 Qdrant REST 客户端(@qdrant/js-client-rest).

本指南使用 OpenAI 嵌入 作为示例。您可以使用 其他支持的嵌入模型 instead.

npm install @langchain/qdrant @langchain/core @langchain/openai
yarn add @langchain/qdrant @langchain/core @langchain/openai
pnpm add @langchain/qdrant @langchain/core @langchain/openai

安装所需依赖后,按照 Qdrant 设置说明使用 Docker 在您的计算机上运行 Qdrant 实例。请记下容器运行的 URL。

凭证

设置一个 QDRANT_URL 环境变量:

// e.g. http://localhost:6333
process.env.QDRANT_URL = "your-qdrant-url"

如果您在本指南中使用 OpenAI 嵌入,请同时设置您的 OpenAI 密钥:

process.env.OPENAI_API_KEY = "YOUR_API_KEY";

如果您想自动追踪模型调用,还可以通过取消下面注释来设置您的 LangSmith API 密钥:

// process.env.LANGSMITH_TRACING="true"
// process.env.LANGSMITH_API_KEY="your-api-key"

实例化

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

const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
  url: process.env.QDRANT_URL,
  collectionName: "langchainjs-testing",
});

管理向量存储

向向量存储添加项目

const document1: Document = {
  pageContent: "The powerhouse of the cell is the mitochondria",
  metadata: { source: "https://example.com" }
};

const document2: Document = {
  pageContent: "Buildings are made out of brick",
  metadata: { source: "https://example.com" }
};

const document3: Document = {
  pageContent: "Mitochondria are made out of lipids",
  metadata: { source: "https://example.com" }
};

const document4: Document = {
  pageContent: "The 2024 Olympics are in Paris",
  metadata: { source: "https://example.com" }
}

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

await vectorStore.addDocuments(documents);

目前不支持顶层文档 ID 和删除功能。

查询向量存储

一旦您的向量存储创建完成并添加了相关文档,您很可能希望在链或代理运行期间对其进行查询。

直接查询

执行简单相似度搜索可以如下进行:

const filter = {
  "must": [
      { "key": "metadata.source", "match": { "value": "https://example.com" } },
  ]
};

const similaritySearchResults = await vectorStore.similaritySearch("biology", 2, filter);

for (const doc of similaritySearchResults) {
  console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
* The powerhouse of the cell is the mitochondria [{"source":"https://example.com"}]
* Mitochondria are made out of lipids [{"source":"https://example.com"}]

参见 此页面 了解更多 Qdrant 过滤语法。请注意,所有值必须带有 metadata.

如果您想执行相似度搜索并获取相应的分数,可以运行:

const similaritySearchWithScoreResults = await vectorStore.similaritySearchWithScore("biology", 2, filter)

for (const [doc, score] of similaritySearchWithScoreResults) {
  console.log(`* [SIM=${score.toFixed(3)}] ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`);
}
* [SIM=0.165] The powerhouse of the cell is the mitochondria [{"source":"https://example.com"}]
* [SIM=0.148] Mitochondria are made out of lipids [{"source":"https://example.com"}]

转换为检索器进行查询

您还可以将向量存储转换为 检索器 便于在链中更轻松地使用。

const retriever = vectorStore.asRetriever({
  // Optional filter
  filter: filter,
  k: 2,
});
await retriever.invoke("biology");
[
  Document {
    pageContent: 'The powerhouse of the cell is the mitochondria',
    metadata: { source: 'https://example.com' },
    id: undefined
  },
  Document {
    pageContent: 'Mitochondria are made out of lipids',
    metadata: { source: 'https://example.com' },
    id: undefined
  }
]

检索增强生成的使用方法

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

API 参考

有关所有 QdrantVectorStore 功能和配置的详细文档,请访问 API 参考.