> YDB 是一个多功能的开源分布式 SQL 数据库,将高可用性和可扩展性与强一致性和 ACID 事务相结合。它同时支持事务性 (OLTP)、分析性 (OLAP) 和流式工作负载。
本指南提供快速入门 YDBVectorStore 向量存储的快速概览。要获取所有功能和配置的详细文档,请参阅 YDB LangChain.js 指南.
设置
使用 Docker 设置本地 YDB 实例:
docker run -d -p 2136:2136 --name ydb-langchain -e YDB_USE_IN_MEMORY_PDISKS=true -h localhost ydbplatform/local-ydb:trunk
安装 @ydbjs/langchain 和 @langchain/core 以使用此集成。
本指南使用 OpenAI 嵌入 作为示例。您可以使用 其他支持的嵌入模型 instead.
npm install @ydbjs/langchain @langchain/openai @langchain/core
yarn add @ydbjs/langchain @langchain/openai @langchain/core
pnpm add @ydbjs/langchain @langchain/openai @langchain/core
凭证
本地 YDB 实例不需要凭证。请确保您已安装上面显示的包。
如果您在本指南中使用 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",
});
await using vectorStore = new YDBVectorStore(embeddings, {
connectionString: "grpc://localhost:2136/local",
});
该 await using 语法会在变量超出范围时自动释放存储并关闭其驱动程序。如果你不使用 await using,请调用 close() 在完成时手动调用:
const vectorStore = new YDBVectorStore(embeddings, {
connectionString: "grpc://localhost:2136/local",
});
// ...
vectorStore.close();
管理向量存储
向向量存储添加项目
使用 addDocuments 方法添加文档。没有 ID 的文档会收到自动生成的 UUID,重新插入具有现有 ID 的文档会替换它。
const document1 = new Document({
pageContent: "The powerhouse of the cell is the mitochondria",
metadata: { source: "https://example.com" },
});
const document2 = new Document({
pageContent: "Buildings are made out of brick",
metadata: { source: "https://example.com" },
});
const document3 = new Document({
pageContent: "Mitochondria are made out of lipids",
metadata: { source: "https://example.com" },
});
const documents = [document1, document2, document3];
const ids = await vectorStore.addDocuments(documents);
从向量存储删除项目
按 ID 删除特定文档:
await vectorStore.delete({ ids: [ids[ids.length - 1]] });
查询向量存储
一旦您的向量存储已创建并且相关文档已添加,您很可能希望在链或代理运行期间对其进行查询。
直接查询
执行简单的相似性搜索如下:
const results = await vectorStore.similaritySearch("biology", 2);
for (const doc of results) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`);
}
要执行相似性搜索并接收相应的分数,请运行:
const resultsWithScore = await vectorStore.similaritySearchWithScore("biology", 2);
for (const [doc, score] of resultsWithScore) {
console.log(`* [SIM=${score.toFixed(3)}] ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`);
}
您还可以按元数据过滤结果。过滤器作为键值对传递,并与 AND logic:
const filteredResults = await vectorStore.similaritySearch("biology", 2, {
source: "https://example.com",
});
通过转换为检索器进行查询
您还可以将向量存储转换为 检索器 以便在您的链中更轻松地使用:
const retriever = vectorStore.asRetriever({
k: 2,
});
await retriever.invoke("biology");
用于检索增强生成
有关如何使用此向量存储进行检索增强生成 (RAG) 的指南,请参阅以下部分:
API 参考
有关所有功能的详细文档 YDBVectorStore 功能和配置(包括搜索策略、近似最近邻索引和列自定义),请参阅 YDB LangChain.js 指南.