libSQL
Turso 是一个与 SQLite 兼容的数据库,构建于 libSQL 之上,libSQL 是 SQLite 的开放贡献分支。向量相似度搜索内置于 Turso 和 libSQL 中,作为原生数据类型,使您能够直接在数据库中存储和查询向量。
LangChain.js 支持使用本地 libSQL 或远程 Turso 数据库作为向量数据库,并提供简单的 API 与之交互。
本指南提供了 libSQL 向量数据库入门的快速概述。有关所有 libSQL 功能和配置的详细文档,请查阅 API 参考。
概述
集成细节
类 | 包 | PY 支持 | 最新包 |
---|---|---|---|
LibSQLVectorStore | @langchain/community | ❌ |
设置
要使用 libSQL 向量数据库,您需要创建一个 Turso 账户或设置本地 SQLite 数据库,并安装 @langchain/community
集成包。
本指南还将使用 OpenAI 嵌入,这需要您安装 @langchain/openai
集成包。如果您愿意,也可以使用其他受支持的嵌入模型。
当使用 libSQL 向量数据库时,您可以使用本地 SQLite,或者使用托管的 Turso 数据库。
- npm
- Yarn
- pnpm
npm install @libsql/client @langchain/openai @langchain/community
yarn add @libsql/client @langchain/openai @langchain/community
pnpm add @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_NAME
和 EMBEDDING_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 参考。