如何创建和查询向量数据库
info
前往 集成 查看有关与向量数据库提供商的内置集成的文档。
存储和搜索非结构化数据的最常见方法之一是将其嵌入并存储结果嵌入向量,然后在查询时嵌入非结构化查询并检索与嵌入查询“最相似”的嵌入向量。向量数据库负责为您存储嵌入数据并执行向量搜索。
本演练使用一个称为 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
大多数情况下,您需要将加载的文本作为准备步骤进行分割。查看 此部分 了解有关文本分割器的更多信息。
从文本创建新的索引
如果您已经准备好了要搜索的数据,则可以直接从文本块初始化向量数据库
tip
- npm
- Yarn
- pnpm
npm install @langchain/openai
yarn add @langchain/openai
pnpm add @langchain/openai
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。
下一步
您现在已经学习了如何将数据加载到向量数据库中。
接下来,请查看 关于检索增强生成(RAG)的完整教程。