如何创建和查询向量存储
信息
前往 集成 查看有关与向量存储提供商的内置集成的文档。
存储和搜索非结构化数据最常见的方法之一是嵌入它并存储生成的嵌入向量,然后在查询时嵌入非结构化查询并检索与嵌入查询“最相似”的嵌入向量。向量存储负责存储嵌入数据并为您执行向量搜索。
本演练使用一个基本的、未优化的实现,称为 MemoryVectorStore
,它在内存中存储嵌入,并对最相似的嵌入执行精确的线性搜索。 LangChain 包含许多内置集成 - 有关更多信息,请参阅此部分,或完整集成列表。
创建新索引
大多数时候,您需要加载和准备要搜索的数据。这是一个从文件加载最近演讲的示例
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
import { TextLoader } from "langchain/document_loaders/fs/text";
// Create docs with a loader
const loader = new TextLoader("src/document_loaders/example_data/example.txt");
const docs = await loader.load();
// Load the docs into the vector store
const vectorStore = await MemoryVectorStore.fromDocuments(
docs,
new OpenAIEmbeddings()
);
// Search for the most similar document
const resultOne = await vectorStore.similaritySearch("hello world", 1);
console.log(resultOne);
/*
[
Document {
pageContent: "Hello world",
metadata: { id: 2 }
}
]
*/
API 参考
- MemoryVectorStore 来自
langchain/vectorstores/memory
- OpenAIEmbeddings 来自
@langchain/openai
- TextLoader 来自
langchain/document_loaders/fs/text
大多数时候,您需要分割加载的文本作为准备步骤。请参阅此部分,以了解有关文本分割器的更多信息。
从文本创建新索引
如果您已经准备好要搜索的数据,您可以直接从文本块初始化向量存储
提示
有关安装集成包的通用说明,请参阅此部分。
- npm
- Yarn
- pnpm
npm install @langchain/openai @langchain/core
yarn add @langchain/openai @langchain/core
pnpm add @langchain/openai @langchain/core
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
const vectorStore = await MemoryVectorStore.fromTexts(
["Hello world", "Bye bye", "hello nice world"],
[{ id: 2 }, { id: 1 }, { id: 3 }],
new OpenAIEmbeddings()
);
const resultOne = await vectorStore.similaritySearch("hello world", 1);
console.log(resultOne);
/*
[
Document {
pageContent: "Hello world",
metadata: { id: 2 }
}
]
*/
API 参考
- MemoryVectorStore 来自
langchain/vectorstores/memory
- OpenAIEmbeddings 来自
@langchain/openai
选择哪个?
这是一个快速指南,可帮助您为您的用例选择合适的向量存储
- 如果您想要一些可以在您的 Node.js 应用程序中、在内存中运行,而无需任何其他服务器来启动的东西,那么请选择 HNSWLib、Faiss、LanceDB 或 CloseVector
- 如果您正在寻找可以在类似浏览器的环境中内存中运行的东西,那么请选择 MemoryVectorStore 或 CloseVector
- 如果您来自 Python 并且您正在寻找类似于 FAISS 的东西,请尝试 HNSWLib 或 Faiss
- 如果您正在寻找可以本地在 docker 容器中运行的开源全功能向量数据库,那么请选择 Chroma
- 如果您正在寻找提供低延迟、本地文档嵌入并支持边缘应用程序的开源向量数据库,那么请选择 Zep
- 如果您正在寻找可以本地(在 docker 容器中)运行或在云中托管的开源生产就绪型向量数据库,那么请选择 Weaviate。
- 如果您已经在使用 Supabase,那么请查看 Supabase 向量存储,以便将相同的 Postgres 数据库也用于您的嵌入
- 如果您正在寻找无需担心自己托管的生产就绪型向量存储,那么请选择 Pinecone
- 如果您已经在使用 SingleStore,或者如果您发现自己需要分布式、高性能数据库,您可能需要考虑 SingleStore 向量存储。
- 如果您正在寻找在线 MPP(大规模并行处理)数据仓库服务,您可能需要考虑 AnalyticDB 向量存储。
- 如果您正在寻找一种经济高效的向量数据库,允许使用 SQL 运行向量搜索,那么 MyScale 就是您的不二之选。
- 如果您正在寻找可以从浏览器和服务器端加载的向量数据库,请查看 CloseVector。它是一个旨在跨平台的向量数据库。
- 如果您正在寻找可扩展的开源列式数据库,并且在分析查询方面具有出色的性能,那么请考虑 ClickHouse。
下一步
您现在已经学习了如何将数据加载到向量存储中。
接下来,查看关于检索增强生成的完整教程。