Redis 支持的聊天记忆
为了在聊天会话之间实现更长期的持久性,您可以将默认的内存中 chatHistory
(它支持 BufferMemory
等聊天记忆类)替换为 Redis 实例。
设置
您需要在项目中安装 node-redis
提示
请参阅 有关安装集成包的一般说明的本节。
- npm
- Yarn
- pnpm
npm install @langchain/openai @langchain/community @langchain/core redis
yarn add @langchain/openai @langchain/community @langchain/core redis
pnpm add @langchain/openai @langchain/community @langchain/core redis
您还需要一个 Redis 实例来连接。有关在本地运行服务器的说明,请参阅 Redis 官方网站。
用法
存储在 Redis 中的每个聊天历史会话都必须具有唯一的 ID。您可以提供一个可选的 sessionTTL
,以使会话在给定的秒数后过期。config
参数直接传递到 node-redis 的 createClient
方法,并接受所有相同的参数。
import { BufferMemory } from "langchain/memory";
import { RedisChatMessageHistory } from "@langchain/redis";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
const memory = new BufferMemory({
chatHistory: new RedisChatMessageHistory({
sessionId: new Date().toISOString(), // Or some other unique identifier for the conversation
sessionTTL: 300, // 5 minutes, omit this parameter to make sessions never expire
}),
});
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 参考
- BufferMemory 来自
langchain/memory
- RedisChatMessageHistory 来自
@langchain/redis
- ChatOpenAI 来自
@langchain/openai
- ConversationChain 来自
langchain/chains
高级用法
您也可以直接传入一个以前创建的 node-redis 客户端实例
import { Redis } from "ioredis";
import { BufferMemory } from "langchain/memory";
import { RedisChatMessageHistory } from "@langchain/community/stores/message/ioredis";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
const client = new Redis("redis://localhost:6379");
const memory = new BufferMemory({
chatHistory: new RedisChatMessageHistory({
sessionId: new Date().toISOString(),
sessionTTL: 300,
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 参考
- BufferMemory 来自
langchain/memory
- RedisChatMessageHistory 来自
@langchain/community/stores/message/ioredis
- ChatOpenAI 来自
@langchain/openai
- ConversationChain 来自
langchain/chains
Redis Sentinel 支持
您可以使用 ioredis 启用 Redis Sentinel 支持的缓存。
这将需要在项目中安装 ioredis。
- npm
- Yarn
- pnpm
npm install ioredis
yarn add ioredis
pnpm add ioredis
import { Redis } from "ioredis";
import { BufferMemory } from "langchain/memory";
import { RedisChatMessageHistory } from "@langchain/community/stores/message/ioredis";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
// Uses ioredis to facilitate Sentinel Connections see their docs for details on setting up more complex Sentinels: https://github.com/redis/ioredis#sentinel
const client = new Redis({
sentinels: [
{ host: "localhost", port: 26379 },
{ host: "localhost", port: 26380 },
],
name: "mymaster",
});
const memory = new BufferMemory({
chatHistory: new RedisChatMessageHistory({
sessionId: new Date().toISOString(),
sessionTTL: 300,
client,
}),
});
const model = new ChatOpenAI({ temperature: 0.5 });
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 参考
- BufferMemory 来自
langchain/memory
- RedisChatMessageHistory 来自
@langchain/community/stores/message/ioredis
- ChatOpenAI 来自
@langchain/openai
- ConversationChain 来自
langchain/chains