如何创建和查询向量数据库
信息
前往 集成 查看有关与向量数据库提供商的内置集成的文档。
存储和搜索非结构化数据的最常见方法之一是嵌入它并存储生成的嵌入向量,然后在查询时嵌入非结构化查询并检索与嵌入查询“最相似”的嵌入向量。向量数据库负责为您存储嵌入数据并执行向量搜索。
本演练使用名为 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。
下一步
您现在已经学习了如何将数据加载到向量存储中。
接下来,请查看 检索增强生成完整教程。