Convex 聊天记忆
为了在聊天会话间实现更长期的持久化存储,您可以将默认的内存型 chatHistory 替换为 Convex,后者为 BufferMemory 类似的聊天记忆类提供支持。
设置
创建项目
首先创建一个可用的 Convex 项目,例如使用如下命令:
npm create convex@latest
添加数据库访问器
在 convex/langchain/db.ts 中添加查询和变更辅助函数:
convex/langchain/db.ts
export * from "@langchain/community/utils/convex";
配置您的模式
设置您的模式(用于索引):
convex/schema.ts
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";
export default defineSchema({
messages: defineTable({
sessionId: v.string(),
message: v.object({
type: v.string(),
data: v.object({
content: v.string(),
role: v.optional(v.string()),
name: v.optional(v.string()),
additional_kwargs: v.optional(v.any()),
}),
}),
}).index("bySessionId", ["sessionId"]),
});
使用
存储在 Convex 中的每个聊天历史会话都必须具有唯一的会话 ID。
:::提示 请参阅安装集成包的一般说明部分。 :::
- npm
- Yarn
- pnpm
npm install @langchain/openai @langchain/community @langchain/core
yarn add @langchain/openai @langchain/community @langchain/core
pnpm add @langchain/openai @langchain/community @langchain/core
convex/myActions.ts
"use node";
import { v } from "convex/values";
import { BufferMemory } from "langchain/memory";
import { ChatOpenAI } from "@langchain/openai";
import { ConversationChain } from "langchain/chains";
import { ConvexChatMessageHistory } from "@langchain/community/stores/message/convex";
import { action } from "./_generated/server.js";
export const ask = action({
args: { sessionId: v.string() },
handler: async (ctx, args) => {
// pass in a sessionId string
const { sessionId } = args;
const memory = new BufferMemory({
chatHistory: new ConvexChatMessageHistory({ sessionId, ctx }),
});
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 });
/*
{
res2: {
text: "You said your name was Jim."
}
}
*/
// See the chat history in the Convex database
console.log(await memory.chatHistory.getMessages());
// clear chat history
await memory.chatHistory.clear();
},
});
API Reference:
- BufferMemory from
langchain/memory - ChatOpenAI from
@langchain/openai - ConversationChain from
langchain/chains - ConvexChatMessageHistory from
@langchain/community/stores/message/convex