PlanetScale 聊天记忆
由于 PlanetScale 通过 REST API 工作,你可以将它与 Vercel Edge、Cloudflare Workers 和其他无服务器环境一起使用。
如果你希望在多个聊天会话之间实现更长期的持久化存储,可以用 PlanetScale Database 实例替换默认的内存型 chatHistory,例如用于 BufferMemory 类等聊天记忆类的数据存储。
安装设置
你需要在项目中安装 @planetscale/database:
:::提示 请参阅安装集成包的一般说明部分。 :::
- npm
- Yarn
- pnpm
npm install @langchain/openai @planetscale/database @langchain/community @langchain/core
yarn add @langchain/openai @planetscale/database @langchain/community @langchain/core
pnpm add @langchain/openai @planetscale/database @langchain/community @langchain/core
你还需要一个 PlanetScale 账号以及一个可以连接的数据库。关于如何创建 HTTP 客户端,请参阅 PlanetScale 文档。
使用方法
每个存储在 PlanetScale 数据库中的聊天会话历史必须具有唯一的 ID。
config 参数会被直接传入 @planetscale/database 的 new Client() 构造函数中,并接受所有相同的参数。
import { BufferMemory } from "langchain/memory";
import { PlanetScaleChatMessageHistory } from "@langchain/community/stores/message/planetscale";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
const memory = new BufferMemory({
chatHistory: new PlanetScaleChatMessageHistory({
tableName: "stored_message",
sessionId: "lc-example",
config: {
url: "ADD_YOURS_HERE", // Override with your own database instance's URL
},
}),
});
const model = new ChatOpenAI({
model: "gpt-4o-mini",
});
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 - PlanetScaleChatMessageHistory from
@langchain/community/stores/message/planetscale - ChatOpenAI from
@langchain/openai - ConversationChain from
langchain/chains
高级用法
你也可以直接传入一个之前创建好的 @planetscale/database 客户端实例:
import { BufferMemory } from "langchain/memory";
import { PlanetScaleChatMessageHistory } from "@langchain/community/stores/message/planetscale";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
import { Client } from "@planetscale/database";
// Create your own Planetscale database client
const client = new Client({
url: "ADD_YOURS_HERE", // Override with your own database instance's URL
});
const memory = new BufferMemory({
chatHistory: new PlanetScaleChatMessageHistory({
tableName: "stored_message",
sessionId: "lc-example",
client, // You can reuse your existing database client
}),
});
const model = new ChatOpenAI({
model: "gpt-4o-mini",
});
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 - PlanetScaleChatMessageHistory from
@langchain/community/stores/message/planetscale - ChatOpenAI from
@langchain/openai - ConversationChain from
langchain/chains