基于 Upstash Redis 的聊天记忆
由于 Upstash Redis 是通过 REST API 工作的,因此你可以将其与 Vercel Edge、Cloudflare Workers 以及其他 Serverless 环境一起使用。 该功能基于 Redis-Backed Chat Memory 实现。
为了在多个聊天会话之间实现更长期的持久化,你可以将默认的内存中 chatHistory(用于如 BufferMemory 等聊天记忆类)替换为一个 Upstash Redis 实例。
安装与配置
你需要在项目中安装 @upstash/redis:
:::提示 请参阅安装集成包的一般说明部分。 :::
- npm
- Yarn
- pnpm
npm install @langchain/openai @langchain/community @langchain/core @upstash/redis
yarn add @langchain/openai @langchain/community @langchain/core @upstash/redis
pnpm add @langchain/openai @langchain/community @langchain/core @upstash/redis
你还需要一个 Upstash 账户以及一个可供连接的 Redis 数据库。查看 Upstash 文档了解如何创建 HTTP 客户端。
使用方法
存储在 Redis 中的每个聊天历史会话都必须具有唯一的 ID。你可以提供一个可选的 sessionTTL 参数,以使会话在指定的秒数后过期。
config 参数会被直接传递给 @upstash/redis 中 new Redis() 构造函数,并接受所有相同的参数。
import { BufferMemory } from "langchain/memory";
import { UpstashRedisChatMessageHistory } from "@langchain/community/stores/message/upstash_redis";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
const memory = new BufferMemory({
chatHistory: new UpstashRedisChatMessageHistory({
sessionId: new Date().toISOString(), // Or some other unique identifier for the conversation
sessionTTL: 300, // 5 minutes, omit this parameter to make sessions never expire
config: {
url: "https://ADD_YOURS_HERE.upstash.io", // Override with your own instance's URL
token: "********", // Override with your own instance's token
},
}),
});
const model = new ChatOpenAI({
model: "gpt-3.5-turbo",
temperature: 0,
});
const chain = new ConversationChain({ llm: model, memory });
const res1 = await chain.invoke({ input: "Hi! I'm Jim." });
console.log({ res1 });
/*
{
res1: {
text: "Hello Jim! It's nice to meet you. My name is AI. How may I assist you today?"
}
}
*/
const res2 = await chain.invoke({ input: "What did I just say my name was?" });
console.log({ res2 });
/*
{
res1: {
text: "You said your name was Jim."
}
}
*/
API Reference:
- BufferMemory from
langchain/memory - UpstashRedisChatMessageHistory from
@langchain/community/stores/message/upstash_redis - ChatOpenAI from
@langchain/openai - ConversationChain from
langchain/chains
高级用法
你也可以直接传入一个之前创建的 @upstash/redis 客户端实例:
import { Redis } from "@upstash/redis";
import { BufferMemory } from "langchain/memory";
import { UpstashRedisChatMessageHistory } from "@langchain/community/stores/message/upstash_redis";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
// Create your own Redis client
const client = new Redis({
url: "https://ADD_YOURS_HERE.upstash.io",
token: "********",
});
const memory = new BufferMemory({
chatHistory: new UpstashRedisChatMessageHistory({
sessionId: new Date().toISOString(),
sessionTTL: 300,
client, // You can reuse your existing Redis client
}),
});
const model = new ChatOpenAI({
model: "gpt-3.5-turbo",
temperature: 0,
});
const chain = new ConversationChain({ llm: model, memory });
const res1 = await chain.invoke({ input: "Hi! I'm Jim." });
console.log({ res1 });
/*
{
res1: {
text: "Hello Jim! It's nice to meet you. My name is AI. How may I assist you today?"
}
}
*/
const res2 = await chain.invoke({ input: "What did I just say my name was?" });
console.log({ res2 });
/*
{
res1: {
text: "You said your name was Jim."
}
}
*/
API Reference:
- BufferMemory from
langchain/memory - UpstashRedisChatMessageHistory from
@langchain/community/stores/message/upstash_redis - ChatOpenAI from
@langchain/openai - ConversationChain from
langchain/chains