Skip to main content

本地文件存储

兼容性

仅适用于 Node.js。

这将帮助你快速开始使用 LocalFileStore。如需了解所有 LocalFileStore 功能和配置的详细文档,请前往 API 参考文档

概述

LocalFileStore 是对 fs 模块的封装,用于以键值对的形式存储数据。 每对键值都有自己的文件,嵌套在传递给 .fromPath 方法的目录中。 文件名是键,文件内容则是键的值。

info

传递给 .fromPath 的路径必须是一个目录,而不是一个文件。

danger

此文件存储可以在提供的目录及其子文件夹中修改任何文本文件。 请确保在初始化存储时指定的路径中没有其他文件。

集成详情

本地支持PY 支持包下载量最新包
LocalFileStorelangchainNPM - 下载量NPM - 版本

准备工作

安装

LangChain 的 LocalFileStore 集成位于 langchain 包中:

:::提示 请参阅安装集成包的一般说明部分。 :::

yarn add langchain @langchain/core

实例化

现在我们可以实例化我们的字节存储器:

import { LocalFileStore } from "langchain/storage/file_system";

const kvStore = await LocalFileStore.fromPath("./messages");

定义一个编码器和解码器,用于将数据转换为 Uint8Array 并还原:

const encoder = new TextEncoder();
const decoder = new TextDecoder();

用法

你可以使用 mset 方法将数据设置在键下,如下所示:

await kvStore.mset([
["key1", encoder.encode("value1")],
["key2", encoder.encode("value2")],
]);

const results = await kvStore.mget(["key1", "key2"]);
console.log(results.map((v) => decoder.decode(v)));
[ 'value1', 'value2' ]

并且你可以使用 mdelete 方法删除数据:

await kvStore.mdelete(["key1", "key2"]);

await kvStore.mget(["key1", "key2"]);
[ undefined, undefined ]

产出值

如果你想获取所有的键,可以调用 yieldKeys 方法。此外,你还可以选择性地传入一个键的前缀,以只获取匹配该前缀的键。

import { LocalFileStore } from "langchain/storage/file_system";

const kvStoreForYield = await LocalFileStore.fromPath("./messages");

const encoderForYield = new TextEncoder();

// Add some data to the store
await kvStoreForYield.mset([
["message:id:key1", encoderForYield.encode("value1")],
["message:id:key2", encoderForYield.encode("value2")],
]);

const yieldedKeys = [];
for await (const key of kvStoreForYield.yieldKeys("message:id:")) {
yieldedKeys.push(key);
}

console.log(yieldedKeys);
[ 'message:id:key1', 'message:id:key2' ]
import fs from "fs";

// Cleanup
await fs.promises.rm("./messages", { recursive: true, force: true });

API 参考

有关 LocalFileStore 所有功能和配置的详细文档,请访问 API 参考


Was this page helpful?


You can also leave detailed feedback on GitHub.