趋近智
大多数通过API与大型语言模型(LLM)的交互本质上是无状态的。每次API调用都被独立处理,不会记住之前的任何交流。这对于独立任务来说是高效的,但当构建需要记住正在进行的交互上下文的对话式应用(例如聊天机器人或助手)时,这会成为一个很大的局限。如果没有记忆功能,LLM无法回顾对话的早期部分,导致回应支离破碎且重复。
像LangChain这样的LLM框架提供了专门的组件,通常称为“记忆”模块,以应对这一难题。这些模块存储有关过往交互的信息,并在后续调用时将其作为上下文的一部分提供给LLM。这使得模型能够保持对话连贯性。
框架通常提供几种记忆机制,每种都有不同的策略来存储和检索对话历史。让我们来看一下LangChain中常见的几种类型:
这是最简单的记忆形式。它逐字逐句地保留对话消息的历史记录,并在每次新查询时将所有这些消息包含在发送给LLM的上下文中。
这里是一个示例,说明如何将其集成到LangChain链中(假设llm和prompt_template已定义):
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI # 或您偏好的LLM提供商
# 初始化LLM(替换为您的实际模型设置)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
# 初始化记忆
memory = ConversationBufferMemory()
# 创建对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True # 设置为True可查看发送的完整提示
)
# 第一次交互
response1 = conversation.predict(input="Hi there! My name is Bob.")
print(response1)
# 示例输出: Hello Bob! It's nice to meet you. How can I help you today?
# 第二次交互 - 记忆提供上下文
response2 = conversation.predict(input="What is my name?")
print(response2)
# 示例输出: Your name is Bob.
如果verbose=True,您会看到记忆如何将前一轮对话(“Human: Hi there! My name is Bob.\nAI: Hello Bob! ...”)注入到第二次调用的提示中。
为了减轻ConversationBufferMemory的上下文长度限制,此变体只保留最后次交互。
您通过指定k来配置它:
from langchain.memory import ConversationBufferWindowMemory
# 只保留最后3次交互(用户消息 + AI回应 = 1次交互)
window_memory = ConversationBufferWindowMemory(k=3)
# 在创建ConversationChain时使用此记忆实例
conversation_window = ConversationChain(
llm=llm,
memory=window_memory,
verbose=True
)
# 示例交互...
# conversation_window.predict(input="Turn 1: User message")
# conversation_window.predict(input="Turn 2: User message")
# conversation_window.predict(input="Turn 3: User message")
# conversation_window.predict(input="Turn 4: User message") # 第一轮将被丢弃
对于非常长的对话,即使是窗口记忆也不足时,可以采用摘要技术。
ConversationBufferMemory),但也维护了较旧交互的摘要。一旦缓冲区超过某个Token限制,缓冲区中最旧的交互将被摘要并添加到主摘要中。
选择合适的记忆类型取决于应用的需求:对话的预期长度、保留旧细节的重要性,以及对成本和延迟的容忍度。
在像LangChain这样的框架中,记忆模块设计为可以顺畅地集成到Chains或Agents中。正如示例所示,您通常会初始化一个记忆对象并将其传递给链的构造函数。然后,链会在调用LLM之前自动处理从记忆中加载相关上下文,并在调用后将最新的交互保存回记忆中。
此图示了记忆模块在对话轮次期间如何在应用链中进行交互的流程。
通过纳入适当的记忆模块,您可以将无状态的LLM交互转换为有状态、连贯的对话,大幅提升聊天机器人、助手以及其他使用框架构建的多轮应用的用户体验。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造