跳到主要内容
Turso 是一个与 SQLite 兼容的数据库,构建于 libSQL 之上,libSQL 是 SQLite 的开放贡献分支。向量相似度搜索作为原生数据类型内置于 Turso 和 libSQL 中,使您能够直接在数据库中存储和查询向量。 LangChain.js 支持使用本地 libSQL 或远程 Turso 数据库作为向量存储,并提供一个简单的 API 与之交互。 本指南提供了 libSQL 向量存储入门的快速概述。有关所有 libSQL 功能和配置的详细文档,请参阅 API 参考。

概览

集成详情

类别PY 支持版本
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 参考。
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.