【LLM大模型】拆解LangChain的大模型记忆方案

简介: 之前我们聊过如何使用LangChain给LLM(大模型)装上记忆,里面提到对话链ConversationChain和MessagesPlaceholder,可以简化安装记忆的流程。下文来拆解基于LangChain的大模型记忆方案。

之前我们聊过如何使用LangChain给LLM(大模型)装上记忆,里面提到对话链ConversationChainMessagesPlaceholder,可以简化安装记忆的流程。下文来拆解基于LangChain的大模型记忆方案。

1. 安装记忆的原理

1.1. 核心步骤

给LLM安装记忆的核心步骤就3个:

  1. 在对话之前调取之前的历史消息。
  2. 将历史消息填充到Prompt里。
  3. 对话结束后,继续将历史消息保存到到memory记忆中。

在这里插入图片描述

1.2. 常规使用方法的弊端

了解这3个核心步骤后,在开发过程中,就需要手动写代码实现这3步,这也比较麻烦,不仅代码冗余,而且容易遗漏这些模板代码。

为了让开发者聚焦于业务实现,LangChain贴心地封装了这一整套实现。使用方式如下。

2. 记忆的种类

记忆分为 短时记忆 和 长时记忆。

在LangChain中使用ConversationBufferMemory作为短时记忆的组件,实际上就是以键值对的方式将消息存在内存中。

如果碰到较长的对话,一般使用ConversationSummaryMemory对上下文进行总结,再交给大模型。或者使用ConversationTokenBufferMemory基于固定的token数量进行内存刷新。

如果想对记忆进行长时间的存储,则可以使用向量数据库进行存储(比如FAISS、Chroma等),或者存储到Redis、Elasticsearch中。

下面以ConversationBufferMemory为例,对如何快速安装记忆做个实践。

3. 给LLM安装记忆 — 非MessagesPlaceholder

3.1. ConversationBufferMemory使用示例

使用ConversationBufferMemory进行记住上下文:

memory = ConversationBufferMemory()
memory.save_context(
    {"input": "你好,我的名字是半支烟,我是一个程序员"}, {"output": "你好,半支烟"}
)
memory.load_memory_variables({})

3.2. LLMChain+ConversationBufferMemory使用示例

# prompt模板
template = """
你是一个对话机器人,以下<history>标签中是AI与人类的历史对话记录,请你参考历史上下文,回答用户输入的问题。

历史对话:
<history>
{customize_chat_history}
</history>

人类:{human_input}
机器人:

"""

prompt = PromptTemplate(
    template=template,
    input_variables=["customize_chat_history", "human_input"],
)
memory = ConversationBufferMemory(
    memory_key="customize_chat_history",
)
model = ChatOpenAI(
    model="gpt-3.5-turbo",
)

chain = LLMChain(
    llm=model,
    memory=memory,
    prompt=prompt,
    verbose=True,
)

chain.predict(human_input="你知道我的名字吗?")

# chain.predict(human_input="我叫半支烟,我是一名程序员")

# chain.predict(human_input="你知道我的名字吗?")

此时,已经给LLM安装上记忆了,免去了我们写那3步核心的模板代码。

对于PromptTemplate使用以上方式,但ChatPromptTemplate因为有多角色,所以需要使用MessagesPlaceholder。具体使用方式如下。

4. 给LLM安装记忆 — MessagesPlaceholder

MessagesPlaceholder主要就是用于ChatPromptTemplate场景。ChatPromptTemplate模式下,需要有固定的格式。

4.1. PromptTemplate和ChatPromptTemplate区别

ChatPromptTemplate主要用于聊天场景。ChatPromptTemplate有多角色,第一个是System角色,后续的是Human与AI角色。因为需要有记忆,所以之前的历史消息要放在最新问题的上方。

在这里插入图片描述

4.2. 使用MessagesPlaceholder安装

最终的ChatPromptTemplate + MessagesPlaceholder代码如下:

chat_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个乐于助人的助手。"),
        MessagesPlaceholder(variable_name="customize_chat_history"),
        ("human", "{human_input}"),
    ]
)

memory = ConversationBufferMemory(
    memory_key="customize_chat_history",
    return_messages=True,
)
model = ChatOpenAI(
    model="gpt-3.5-turbo",
)

chain = LLMChain(
    llm=model,
    memory=memory,
    prompt=chat_prompt,
    verbose=True,
)

chain.predict(human_input="你好,我叫半支烟,我是一名程序员。")

至此,我们使用了ChatPromptTemplate简化了构建prompt的过程。

5. 使用对话链ConversationChain

如果连ChatPromptTemplate都懒得写了,那直接使用对话链ConversationChain,让一切变得更简单。实践代码如下:

memory = ConversationBufferMemory(
    memory_key="history",  # 此处的占位符必须是history
    return_messages=True,
)
model = ChatOpenAI(
    model="gpt-3.5-turbo",
)

chain = ConversationChain(
    llm=model,
    memory=memory,
    verbose=True,
)

chain.predict(input="你好,我叫半支烟,我是一名程序员。")  # 此处的变量必须是input

ConversationChain提供了包含AI角色和人类角色的对话摘要格式。ConversationChain实际上是对Memory和LLMChain和ChatPrompt进行了封装,简化了初始化Memory和构建ChatPromptTemplate的步骤。

6. ConversationBufferMemory

6.1. memory_key

ConversationBufferMemory有一个入参是memory_key,表示内存中存储的本轮对话的,后续可以根据找到对应的值。

6.2. 使用"chat_history"还是"history"

ConversationBufferMemorymemory_key,有些资料里是设置是memory_key="history",有些资料里是"chat_history"

这里有2个规则,如下:

  • 在使用MessagesPlaceholderConversationBufferMemory时,MessagesPlaceholdervariable_nameConversationBufferMemorymemory_key可以自定义,只要相同就可以。比如这样:
chat_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个乐于助人的助手。"),
        MessagesPlaceholder(variable_name="customize_chat_history"),
        ("human", "{input}"),
    ]
)

memory = ConversationBufferMemory(
    memory_key="customize_chat_history",  # 此处的占位符可以是自定义
    return_messages=True,
)
model = ChatOpenAI(
    model="gpt-3.5-turbo",
)

chain = ConversationChain(
    llm=model,
    memory=memory,
    prompt=chat_prompt,
    verbose=True,
)

chain.predict(input="你好,我叫半支烟,我是一名程序员。")  # 此处的变量必须是input
  • 如果只是使用ConversationChain又没有使用MessagesPlaceholder的场景下,ConversationBufferMemory的memory_key,必须用history

7. MessagesPlaceholder的使用场景

MessagesPlaceholder其实就是在与AI对话过程中的Prompt的一部分,它代表Prompt中的历史消息这部分。它提供了一种结构化和可配置的方式来处理这些消息列表,使得在构建复杂Prompt时更加灵活和高效。

说白了它就是个占位符,相当于把从memory读取的历史消息插入到这个占位符里了。

比如这样,就可以表示之前的历史对话消息:

chat_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个乐于助人的助手。"),
        MessagesPlaceholder(variable_name="customize_chat_history"),
        ("human", "{human_input}"),
    ]
)

是否需要使用MessagesPlaceholder,记住2个原则:

  • PromptTemplate类型的模板,无需使用MessagesPlaceholder

  • ChatPromptTemplate 类型的聊天模板,需要使用MessagesPlaceholder。但是在使用ConversationChain时,可以省去创建ChatPromptTemplate的过程(也可以不省去)。省去和不省去在输出过程中有些区别,如下:

    在这里插入图片描述

    在这里插入图片描述

8. 总结

本文主要聊了安装记忆的基本原理、快速给LLM安装记忆、ConversationBufferMemoryMessagesPlaceholder的使用、对话链ConversationChain的使用和原理。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值