Cassandra KV
本示例演示如何使用 CassandraKVStore
BaseStore
集成设置聊天历史记录存储。请注意,有一个 CassandraChatMessageHistory
集成,它可能更易于用于聊天历史记录存储;如果你想要一个更通用的键值存储,并且键可以添加前缀,那么 CassandraKVStore
非常有用。
¥This example demonstrates how to setup chat history storage using the CassandraKVStore
BaseStore
integration. Note there is a CassandraChatMessageHistory
integration which may be easier to use for chat history storage; the CassandraKVStore
is useful if you want a more general-purpose key-value store with
prefixable keys.
设置
¥Setup
- npm
- Yarn
- pnpm
npm install @langchain/community @langchain/core cassandra-driver
yarn add @langchain/community @langchain/core cassandra-driver
pnpm add @langchain/community @langchain/core cassandra-driver
根据数据库提供商的不同,连接数据库的具体方法会有所不同。我们将创建一个文档 configConnection
,它将用作存储配置的一部分。
¥Depending on your database providers, the specifics of how to connect to the database will vary. We will create a document configConnection
which will be used as part of the store configuration.
Apache Cassandra ®
Apache Cassandra® 5.0 及更高版本支持存储附加索引(由 yieldKeys
使用)。你可以使用标准连接文档,例如:
¥Storage Attached Indexes (used by yieldKeys
) are supported in Apache Cassandra® 5.0 and above. You can use a standard connection document, for example:
const configConnection = {
contactPoints: ['h1', 'h2'],
localDataCenter: 'datacenter1',
credentials: {
username: <...> as string,
password: <...> as string,
},
};
Astra 数据库
¥Astra DB
Astra DB 是一个云原生的 Cassandra 即服务平台。
¥Astra DB is a cloud-native Cassandra-as-a-Service platform.
创建一个 Astra DB 账户。
¥Create an Astra DB account.
创建一个 支持向量的数据库。
¥Create a vector enabled database.
为你的数据库创建一个 token。
¥Create a token for your database.
const configConnection = {
serviceProviderArgs: {
astra: {
token: <...> as string,
endpoint: <...> as string,
},
},
};
你可以提供属性 datacenterID:
和可选的 regionName:
,而不是 endpoint:
。
¥Instead of endpoint:
, you many provide property datacenterID:
and optionally regionName:
.
用法
¥Usage
import { CassandraKVStore } from "@langchain/community/storage/cassandra";
import { AIMessage, HumanMessage } from "@langchain/core/messages";
// This document is the Cassandra driver connection document; the example is to AstraDB but
// any valid Cassandra connection can be used.
const configConnection = {
serviceProviderArgs: {
astra: {
token: "YOUR_TOKEN_OR_LOAD_FROM_ENV" as string,
endpoint: "YOUR_ENDPOINT_OR_LOAD_FROM_ENV" as string,
},
},
};
const store = new CassandraKVStore({
...configConnection,
keyspace: "test", // keyspace must exist
table: "test_kv", // table will be created if it does not exist
keyDelimiter: ":", // optional, default is "/"
});
// Define our encoder/decoder for converting between strings and Uint8Arrays
const encoder = new TextEncoder();
const decoder = new TextDecoder();
/**
* Here you would define your LLM and chat chain, call
* the LLM and eventually get a list of messages.
* For this example, we'll assume we already have a list.
*/
const messages = Array.from({ length: 5 }).map((_, index) => {
if (index % 2 === 0) {
return new AIMessage("ai stuff...");
}
return new HumanMessage("human stuff...");
});
// Set your messages in the store
// The key will be prefixed with `message:id:` and end
// with the index.
await store.mset(
messages.map((message, index) => [
`message:id:${index}`,
encoder.encode(JSON.stringify(message)),
])
);
// Now you can get your messages from the store
const retrievedMessages = await store.mget(["message:id:0", "message:id:1"]);
// Make sure to decode the values
console.log(retrievedMessages.map((v) => decoder.decode(v)));
/**
[
'{"id":["langchain","AIMessage"],"kwargs":{"content":"ai stuff..."}}',
'{"id":["langchain","HumanMessage"],"kwargs":{"content":"human stuff..."}}'
]
*/
// Or, if you want to get back all the keys you can call
// the `yieldKeys` method.
// Optionally, you can pass a key prefix to only get back
// keys which match that prefix.
const yieldedKeys = [];
for await (const key of store.yieldKeys("message:id:")) {
yieldedKeys.push(key);
}
// The keys are not encoded, so no decoding is necessary
console.log(yieldedKeys);
/**
[
'message:id:2',
'message:id:1',
'message:id:3',
'message:id:0',
'message:id:4'
]
*/
// Finally, let's delete the keys from the store
await store.mdelete(yieldedKeys);
API Reference:
- CassandraKVStore from
@langchain/community/storage/cassandra
- AIMessage from
@langchain/core/messages
- HumanMessage from
@langchain/core/messages
相关
¥Related