聊天机器人和虚拟助手正变得越来越普遍,在对话中保持上下文和连续性的能力很重要。想象一下,你正在与聊天机器人进行有趣的对话,结果对方却在对话中完全忘记了上下文,不过不要害怕,LangChain的内存管理功能为您提供了支持。内存管理允许对话式 AI 应用程序保留和回忆过去的交互,从而实现无缝和连贯的对话。LangChain提供不同类型的内存类型,每种类型都是为满足特定需求和优化性能而量身定制的。
①人工智能/大模型学习路线
②AI产品经理入门指南
③大模型方向必读书籍PDF版
④超详细海量大模型实战项目
⑤LLM大模型系统学习教程
⑥640套-AI大模型报告合集
⑦从0-1入门大模型教程视频
⑧AGI大模型技术公开课名额
一、内存类型
LangChain提供了多种内存类型,每种内存类型都旨在处理不同的用例和场景。让我们来探讨一些最常用的类型:
1. ConversationBufferMemory
ConversationBufferMemory 按原样存储整个对话历史记录,无需任何更改,使其成为聊天机器人和其他需要准确上下文的应用程序的有用工具。想象一下,您正在为客户支持聊天机器人构建一个虚拟助手。借助 ConversationBufferMemory,您的聊天机器人可以回忆起以前的交互,从而根据用户的特定查询或问题提供个性化且相关的响应。
下面是一个简单的示例来说明其用法:
from langchain_openai import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
# Set up the LLM and memory
llm_model = "gpt-3.5-turbo"
llm = ChatOpenAI(temperature=0.0, model=llm_model)
memory = ConversationBufferMemory()
# Create the conversation chain
conversation = ConversationChain(llm=llm, memory=memory, verbose=True)
# Start the conversation
response = conversation.predict(input="Hi, my name is Rutam")
print(response)
# Output: Hello Rutam! It's nice to meet you. How can I assist you today?
response = conversation.predict(input="What is 1 + 1")
print(response)
# Output: 1 + 1 equals 2. Is there anything else you would like to know?
response = conversation.predict(input="Whats my name?")
print(response)
# Output: Your name is Rutam. Is there anything else you would like to know or discuss?
如您所见,ConversationBufferMemory 允许聊天机器人记住用户的名称并在后续响应中引用它,从而创建更自然和个性化的对话流程。
2. ConversationBufferWindowMemory
虽然 ConversationBufferMemory 存储整个会话历史记录,但在某些情况下,您可能希望将内存限制为最近交换的固定窗口。当您不希望内存无限增长时,此内存类型特别有用。假设您正在为一个简单的天气应用程序构建一个聊天机器人。您可能只需要记住用户在当前对话中的位置,然后将其丢弃。
下面介绍如何使用 ConversationBufferWindowMemory 实现此目的:
from langchain.memory import ConversationBufferWindowMemory
# Set the window size to 1 (remember only the most recent exchange)
memory = ConversationBufferWindowMemory(k=1)
# ... (continue with setting up the LLM and conversation chain as before)
# Start the conversation
response = conversation.predict(input="What's the weather like in New York today?")
print(response)
# Output: I'm sorry, I don't have enough context to provide the weather for New York. Could you please provide your location?
response = conversation.predict(input="New York City")
print(response)
# Output: Here's the current weather forecast for New York City: ...
在此示例中,k=1 的 ConversationBufferWindowMemory 会忘记用户之前的输入(“今天纽约的天气怎么样?”),迫使聊天机器人再次询问位置。一旦用户提供了位置,聊天机器人就可以做出相应的响应。
3. ConversationTokenBufferMemory
使用语言模型时,关键考虑因素之一是令牌使用和成本优化。LLM(大型语言模型)通常根据处理的令牌数量收费,因此有效管理内存至关重要。ConversationTokenBufferMemory:一种内存类型,用于根据令牌数限制存储的对话。此功能与许多 LLM 的定价模型完全一致,允许您在保持对话上下文的同时控制成本。假设您正在为产品推荐系统构建一个聊天机器人。您希望将对话集中在当前正在讨论的产品上,而不会从以前的交互中积累不必要的令牌使用。
下面介绍如何使用 ConversationTokenBufferMemory:
from langchain.memory import ConversationTokenBufferMemory
# Set the maximum token limit
memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=100)
# ... (continue with setting up the LLM and conversation chain as before)
# Start the conversation
response = conversation.predict(input="I'm looking for a new laptop")
print(response)
# Output: Okay, great! What are your main priorities for the new laptop? (e.g., portability, performance, battery life)
response = conversation.predict(input="Portability and long battery life are important to me")
print(response)
# Output: Got it. Based on your priorities, I'd recommend checking out the [laptop model] ...
在此示例中,ConversationSummaryBufferMemory 汇总了对话详细信息,允许虚拟助手在保持指定令牌限制的同时维护整体上下文,从而确保高效且经济实惠的内存管理。
二、其他类型
虽然我们已经探索了LangChain中一些最常用的内存类型,该库提供了其他几个选项来满足不同的用例。
矢量数据内存:如果您熟悉单词嵌入和文本嵌入,则此存储器类型存储对话的矢量表示,从而可以使用矢量相似度计算高效检索相关上下文。
实体内存:当您需要在对话上下文中记住有关实体(如人、地点或对象)的特定详细信息时,此内存类型特别有用。例如,如果您的聊天机器人正在讨论特定的朋友或同事,实体记忆可以存储和回忆有关该人的重要事实,从而确保更加个性化和上下文对话。
from langchain.chains import ConversationChain
from langchain.memory import ConversationEntityMemory
from langchain.memory.prompt import ENTITY_MEMORY_CONVERSATION_TEMPLATE
from pydantic import BaseModel
from typing import List, Dict, Any
conversation = ConversationChain(
llm=llm,
verbose=True,
prompt=ENTITY_MEMORY_CONVERSATION_TEMPLATE,
memory=ConversationEntityMemory(llm=llm)
)
conversation.predict(input="Deven & Sam are working on a hackathon project")
# Output: That sounds like a great project! What kind of project are they working on?
conversation.memory.entity_store.store
# Output: {'Deven': 'Deven is working on a hackathon project with Sam, which they are entering into a hackathon.',
# 'Sam': 'Sam is working on a hackathon project with Deven.'}
conversation.predict(input="They are trying to add more complex memory structures to Langchain")
# Output: That sounds like an interesting project! What kind of memory structures are they trying to add?
conversation.predict(input="They are adding in a key-value store for entities mentioned so far in the conversation.")
# Output: That sounds like a great idea! How will the key-value store help with the project?
conversation.predict(input="What do you know about Deven & Sam?")
# Output: Deven and Sam are working on a hackathon project together, trying to add more complex memory structures to Langchain, including a key-value store for entities mentioned so far in the conversation. They seem to be working hard on this project and have a great idea for how the key-value store can help.
三、组合多种内存类型
LangChain的一个强大方面是能够组合多种内存类型,以创建更全面和量身定制的解决方案。例如,可以使用 ConversationBufferMemory 或 ConversationSummaryBufferMemory 来维护整体对话上下文,同时还可以利用实体内存来存储和调用有关对话中提到的个人或对象的特定详细信息。这种方法使您能够在捕获对话流程和保留特定于实体的重要信息之间取得完美平衡,使您的聊天机器人或虚拟助手能够提供更明智和个性化的响应。
四、集成数据库
虽然LangChain的内置内存类型提供了强大的功能来管理会话上下文,但在某些情况下,您可能需要存储整个会话历史记录,以便进行审计、分析或将来的参考。在这种情况下,您可以将LangChain与传统数据库(例如键值存储或SQL数据库)无缝集成。这种方法允许您利用LangChain内存管理的优势,同时保持所有对话的持久性和可访问性记录。
例如,您可以将每个对话交换存储在数据库表中,其中包含用于用户输入、聊天机器人响应和其他元数据。这种全面的记录对下面场景非常有用:
- 对话审核:回顾过去的对话,以确定需要改进的领域或确保符合法规要求。
- 对话数据分析:分析对话模式、情绪和用户行为,以获得洞察力并改善整体聊天机器人体验。
- 个性化和上下文丰富:通过引用过去的对话,您可以为回访用户提供更加个性化和上下文化的体验,从而提高参与度和客户满意度。
小节
今天我们学习的是LangChain的内存管理模块,通过将LangChain的内存管理功能与强大的数据库解决方案相结合,您可以创建一个强大的对话式AI系统,该系统不仅可以在实时交互期间维护上下文,还可以保留全面的记录,以供将来的分析和优化。
无论您是处理通用文本、Markdown 文档、代码片段还是其他类型的内容,LangChain 的文本拆分器都提供了灵活性和自定义选项,可以有效地拆分您的文档。通过了解文档拆分中涉及的细微差别和注意事项,可以优化语言模型和下游任务的性能和准确性。
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段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 总结与展望
- L2.1 API接口
阶段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 其他大模型介绍
- L3.1 Agent模型框架
阶段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%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓