Skip to content

Memory基础

大模型本身是无状态的,每次调用都只看当前输入。如果要在多轮对话中维持上下文,就需要 Memory 模块来存储和管理对话历史。

LangChain.js 针对 Memory 提供了多个工具类,先来学习最常用的 ChatMessageHistory

快速上手案例:

import { ChatMessageHistory } from 'langchain/stores/message/in_memory'
import {
HumanMessage,
AIMessage,
isAIMessage,
isHumanMessage,
} from '@langchain/core/messages'
const history = new ChatMessageHistory()
await history.addMessage(new HumanMessage('你好,我叫小明'))
await history.addMessage(new AIMessage('你好,小明!有什么我可以帮助你的吗?'))
const messages = await history.getMessages()
messages.forEach((msg, i) => {
const role = isHumanMessage(msg)
? '用户'
: isAIMessage(msg)
? 'AI'
: '❓ Unknown'
console.log(`[${i + 1}] ${role}${msg.content}`)
})

常用方法

文档:https://v03.api.js.langchain.com/classes/_langchain_core.chat_history.BaseChatMessageHistory.html

  1. addMessage:添加消息
  2. addMessages:添加消息
  3. getMessages:获取所有消息
  4. clear:清除所有消息

实战案例

和大模型进行对话,大模型可以记住前面的对话内容

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

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

1. 输入参数 (input)

类型:Input

invoke() 方法保持一致:

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

2. 配置参数

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