Skip to main content
Turso 是基于 libSQL(SQLite 的开放贡献分支)构建的与 SQLite 兼容的数据库。向量相似性搜索作为本机数据类型内置于 Turso 和 libSQL 中,使您可以直接在数据库中存储和查询向量。 LangChain.js 支持使用本地 libSQL 或远程 Turso 数据库作为向量存储,并提供简单的 API 与其交互。 本指南提供了 libSQL 向量存储入门的快速概述。有关所有 libSQL 功能和配置的详细文档,请参阅 API 参考。

概述

集成细节

ClassPackagePY supportVersion
LibSQLVectorStore@langchain/communitynpm version

设置

要使用 libSQL 向量存储,您需要创建 Turso 帐户或设置本地 SQLite 数据库,并安装 @langchain/community 集成包。 本指南还将使用 OpenAI 嵌入,这需要您安装 @langchain/openai 集成包。如果您愿意,也可以使用 其他支持的嵌入模型 在使用 libSQL 向量存储时,您可以使用本地 SQLite,也可以使用托管的 Turso 数据库。
请参阅 此部分 以获取有关安装 LangChain 包的一般说明。
npm
npm install @libsql/client @langchain/openai @langchain/community
现在是时候创建一个数据库了。您可以在本地创建一个,也可以使用托管的 Turso 数据库。

本地 libSQL

创建一个新的本地 SQLite 文件并连接到 shell:
sqlite3 file.db

托管 turso

访问 sqlite.new 创建新数据库,为其命名,并创建数据库身份验证令牌。 确保复制数据库身份验证令牌和数据库 URL,它应该类似于:
libsql://[database-name]-[your-username].turso.io

设置表和索引

执行以下 SQL 命令以创建新表或将嵌入列添加到现有表。 确保修改 SQL 的以下部分:
  • TABLE_NAME 是您要创建的表的名称。
  • content 用于存储 Document.pageContent 值。
  • metadata 用于存储 Document.metadata 对象。
  • EMBEDDING_COLUMN 用于存储向量值,使用您计划使用的模型所使用的维度大小(OpenAI 为 1536)。
CREATE TABLE IF NOT EXISTS TABLE_NAME (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    content TEXT,
    metadata TEXT,
    EMBEDDING_COLUMN F32_BLOB(1536) -- 1536-dimensional f32 vector for OpenAI
);
现在在 EMBEDDING_COLUMN 列上创建索引 - 索引名称很重要!:
CREATE INDEX IF NOT EXISTS idx_TABLE_NAME_EMBEDDING_COLUMN ON TABLE_NAME(libsql_vector_idx(EMBEDDING_COLUMN));
确保将 TABLE_NAMEEMBEDDING_COLUMN 替换为您在上一步中使用的值。

实例化

要初始化新的 LibSQL 向量存储,您需要在远程工作时提供数据库 URL 和身份验证令牌,或者为本地 SQLite 传递文件名。
import { LibSQLVectorStore } from "@langchain/community/vectorstores/libsql";
import { OpenAIEmbeddings } from "@langchain/openai";
import { createClient } from "@libsql/client";

const embeddings = new OpenAIEmbeddings({
  model: "text-embedding-3-small",
});

const libsqlClient = createClient({
  url: "libsql://[database-name]-[your-username].turso.io",
  authToken: "...",
});

// Local instantiation
// const libsqlClient = createClient({
//  url: "file:./dev.db",
// });

const vectorStore = new LibSQLVectorStore(embeddings, {
  db: libsqlClient,
  table: "TABLE_NAME",
  column: "EMBEDDING_COLUMN",
});

管理向量存储

向向量存储添加项目

import type { Document } from "@langchain/core/documents";

const documents: Document[] = [
  { pageContent: "Hello", metadata: { topic: "greeting" } },
  { pageContent: "Bye bye", metadata: { topic: "greeting" } },
];

await vectorStore.addDocuments(documents);

从向量存储删除项目

await vectorStore.deleteDocuments({ ids: [1, 2] });

查询向量存储

插入文档后,您可以查询向量存储。

直接查询

执行简单的相似性搜索可以按如下方式完成:
const resultOne = await vectorStore.similaritySearch("hola", 1);

for (const doc of similaritySearchResults) {
  console.log(`${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
对于带有分数的相似性搜索:
const similaritySearchWithScoreResults =
  await vectorStore.similaritySearchWithScore("hola", 1);

for (const [doc, score] of similaritySearchWithScoreResults) {
  console.log(
    `${score.toFixed(3)} ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`
  );
}

API 参考

有关所有 LibSQLVectorStore 功能和配置的详细文档,请参阅 API 参考。

相关