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)的指南,请参阅以下章节:
- - 使用 LangChain 构建 RAG 应用.
- - 代理式 RAG
- - 检索文档
API 参考
有关所有 QdrantVectorStore 功能和配置的详细文档,请访问 API 参考.