Skip to main content

Azure Cosmos DB Mongo vCore 聊天消息历史记录

¥Azure Cosmos DB Mongo vCore Chat Message History

AzureCosmosDBMongoChatMessageHistory 使用 Azure Cosmos DB Mongo vCore 存储聊天消息历史记录。为了在聊天会话中实现更长期的持久化,你可以将支持聊天内存类(如 BufferMemory)的默认内存 chatHistory 替换为 Upstash 实例。如果你没有 Azure 账户,可以使用 创建免费账户 开始使用。

¥The AzureCosmosDBMongoChatMessageHistory uses Azure Cosmos DB Mongo vCore to store chat message history. For longer-term persistence across chat sessions, you can swap out the default in-memory chatHistory that backs chat memory classes like BufferMemory. If you don't have an Azure account, you can create a free account to get started.

设置

¥Setup

你首先需要安装 @langchain/azure-cosmosdb 软件包:

¥You'll first need to install the @langchain/azure-cosmosdb package:

npm install @langchain/azure-cosmosdb @langchain/core
npm install @langchain/openai @langchain/community @langchain/core

你还需要运行一个 Azure Cosmos DB mongo vCore 实例。你可以按照 此指南 在 Azure 门户上免费部署一个版本。

¥You'll also need to have an Azure Cosmos DB mongo vCore instance running. You can deploy a free version on Azure Portal without any cost, following this guide.

实例运行后,请确保你拥有连接字符串。

¥Once you have your instance running, make sure you have the connection string.

用法

¥Usage

import { ChatOpenAI } from "@langchain/openai";
import {
AzureCosmosDBMongoChatMessageHistory,
AzureCosmosDBMongoChatHistoryDBConfig,
} from "@langchain/azure-cosmosdb";
import { RunnableWithMessageHistory } from "@langchain/core/runnables";
import { StringOutputParser } from "@langchain/core/output_parsers";
import {
ChatPromptTemplate,
MessagesPlaceholder,
} from "@langchain/core/prompts";

const model = new ChatOpenAI({
model: "gpt-3.5-turbo",
temperature: 0,
});

const prompt = ChatPromptTemplate.fromMessages([
[
"system",
"You are a helpful assistant. Answer all questions to the best of your ability.",
],
new MessagesPlaceholder("chat_history"),
["human", "{input}"],
]);

const chain = prompt.pipe(model).pipe(new StringOutputParser());

const dbcfg: AzureCosmosDBMongoChatHistoryDBConfig = {
connectionString: process.env.AZURE_COSMOSDB_MONGODB_CONNECTION_STRING,
databaseName: "langchain",
collectionName: "chathistory",
};

const chainWithHistory = new RunnableWithMessageHistory({
runnable: chain,
inputMessagesKey: "input",
historyMessagesKey: "chat_history",
getMessageHistory: async (sessionId) => {
const chatHistory = new AzureCosmosDBMongoChatMessageHistory(
dbcfg,
sessionId,
"user-id"
);
return chatHistory;
},
});

const res1 = await chainWithHistory.invoke(
{ input: "Hi! I'm Jim." },
{ configurable: { sessionId: "langchain-test-session" } }
);
console.log({ res1 });
/*
{ res1: 'Hi Jim! How can I assist you today?' }
*/

const res2 = await chainWithHistory.invoke(
{ input: "What did I just say my name was?" },
{ configurable: { sessionId: "langchain-test-session" } }
);
console.log({ res2 });
/*
{ res2: { response: 'You said your name was Jim.' }
*/

// Give this session a title
const chatHistory = (await chainWithHistory.getMessageHistory(
"langchain-test-session"
)) as AzureCosmosDBMongoChatMessageHistory;

await chatHistory.setContext({ title: "Introducing Jim" });

// List all session for the user
const sessions = await chatHistory.getAllSessions();

console.log(sessions);
/*
[
{
id: 'langchain-test-session',
user_id: 'user-id',
context: { title: 'Introducing Jim' }
}
]
*/

API Reference: