跳到主要内容

libSQL

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 数据库。

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 参考。


此页面是否对您有帮助?


您也可以留下详细的反馈 在 GitHub 上.