Skip to content

自动维护聊天记录

上一节我们体验了“手动维护聊天记录”,每次都要:

await history.addMessage(new HumanMessage(input))
await history.addMessage(fullRes)

虽然原理简单,但实际开发中太过繁琐。尤其在构建多轮对话 Agent 时,这种手动维护非常不优雅。所以这一节,我们引入 LangChain.js 提供的“自动加记忆”工具 —— RunnableWithMessageHistory

快速上手#

前面我们有介绍过 Runnable 相关的接口,例如

这里的 RunnableWithMessageHistory 也属于 Runnable 家族的一员。在实例化的时候,接收一个配置对象:

new RunnableWithMessageHistory({
runnable: baseChain, // 原始链
getMessageHistory: (sessionId) => chatHistory, // 指定聊天记录
inputMessagesKey: 'input', // 用户输入字段名
historyMessagesKey: 'chat_history', // Prompt 中历史记录占位符
})

配置对象通常需要配置这几个参数:

课堂演示

快速上手示例

stream() 方法,方法签名如下:

stream(
input: Input,
options?: RunnableConfig
): AsyncGenerator<StreamEvent<Output>>

1. 输入参数 (input)

类型:Input

invoke() 方法保持一致:

换句话说,input 的类型由具体的 Runnable 实例 决定。

2. 配置参数

类型:RunnableConfig(可选) 常见字段包括:

实战案例#

把上节课的对话练习改为 RunnableWithMessageHistory