精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

LangChain 讓 LLM 帶上記憶

人工智能
本文介紹了 LLM 缺乏記憶功能的固有缺陷,以及記憶組件的原理,還討論了如何利用 LangChain 給 LLM 裝上記憶組件,讓 LLM 能夠在對話中更好地保持上下文。

最近兩年,我們見識了“百模大戰”,領略到了大型語言模型(LLM)的風采,但它們也存在一個顯著的缺陷:沒有記憶。

在對話中,無法記住上下文的 LLM 常常會讓用戶感到困擾。本文探討如何利用 LangChain,快速為 LLM 添加記憶能力,提升對話體驗。

LangChain 是 LLM 應用開發領域的最大社區和最重要的框架。

一、LLM 固有缺陷,沒有記憶

當前的 LLM 非常智能,在理解和生成自然語言方面表現優異,但是有一個顯著的缺陷:沒有記憶。

LLM 的本質是基于統計和概率來生成文本,對于每次請求,它們都將上下文視為獨立事件。這意味著當你與 LLM 進行對話時,它不會記住你之前說過的話,這就導致了 LLM 有時表現得不夠智能。

這種“無記憶”屬性使得 LLM 無法在長期對話中有效跟蹤上下文,也無法積累歷史信息。比如,當你在聊天過程中提到一個人名,后續再次提及該人時,LLM 可能會忘記你之前的描述。

本著發現問題解決問題的原則,既然沒有記憶,那就給 LLM 裝上記憶吧。

二、記憶組件的原理

1.沒有記憶的煩惱

當我們與 LLM 聊天時,它們無法記住上下文信息,比如下圖的示例:

2.原理

如果將已有信息放入到 memory 中,每次跟 LLM 對話時,把已有的信息丟給 LLM,那么 LLM 就能夠正確回答,見如下示例:

目前業內解決 LLM 記憶問題就是采用了類似上圖的方案,即:將每次的對話記錄再次丟入到 Prompt 里,這樣 LLM 每次對話時,就擁有了之前的歷史對話信息。

但如果每次對話,都需要自己手動將本次對話信息繼續加入到history信息中,那未免太繁瑣。有沒有輕松一些的方式呢?有,LangChain!LangChain 對記憶組件做了高度封裝,開箱即用。

3.長期記憶和短期記憶

在解決 LLM 的記憶問題時,有兩種記憶方案,長期記憶和短期記憶。

  • 短期記憶:基于內存的存儲,容量有限,用于存儲臨時對話內容。
  • 長期記憶:基于硬盤或者外部數據庫等方式,容量較大,用于存儲需要持久的信息。

三、LangChain 讓 LLM 記住上下文

LangChain 提供了靈活的內存組件工具來幫助開發者為 LLM 添加記憶能力。

1.單獨用 ConversationBufferMemory 做短期記憶

Langchain 提供了 ConversationBufferMemory 類,可以用來存儲和管理對話。

ConversationBufferMemory 包含input變量和output變量,input代表人類輸入,output代表 AI 輸出。

每次往ConversationBufferMemory組件里存入對話信息時,都會存儲到history的變量里。

2.利用 MessagesPlaceholder 手動添加 history

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory(return_messages=True)
memory.load_memory_variables({})

memory.save_context({"input": "我的名字叫張三"}, {"output": "你好,張三"})
memory.load_memory_variables({})

memory.save_context({"input": "我是一名 IT 程序員"}, {"output": "好的,我知道了"})
memory.load_memory_variables({})

from langchain.prompts import ChatPromptTemplate
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一個樂于助人的助手。"),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{user_input}"),
    ]
)
chain = prompt | model

user_input = "你知道我的名字嗎?"
history = memory.load_memory_variables({})["history"]


chain.invoke({"user_input": user_input, "history": history})

user_input = "中國最高的山是什么山?"
res = chain.invoke({"user_input": user_input, "history": history})
memory.save_context({"input": user_input}, {"output": res.content})


res = chain.invoke({"user_input": "我們聊得最后一個問題是什么?", "history": history})

執行結果如下:

3.利用 ConversationChain 自動添加 history

我們利用 LangChain 的ConversationChain對話鏈,自動添加history的方式添加臨時記憶,無需手動添加。一個鏈實際上就是將一部分繁瑣的小功能做了高度封裝,這樣多個鏈就可以組合形成易用的強大功能。這里鏈的優勢一下子就體現出來了:

from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder

memory = ConversationBufferMemory(return_messages=True)
chain = ConversationChain(llm=model, memory=memory)
res = chain.invoke({"input": "你好,我的名字是張三,我是一名程序員。"})
res['response']

res = chain.invoke({"input":"南京是哪個省?"})
res['response']

res = chain.invoke({"input":"我告訴過你我的名字,是什么?,我的職業是什么?"})
res['response']

執行結果如下,可以看到利用ConversationChain對話鏈,可以讓 LLM 快速擁有記憶:

4. 對話鏈結合 PromptTemplate 和 MessagesPlaceholder

在 Langchain 中,MessagesPlaceholder是一個占位符,用于在對話模板中動態插入上下文信息。它可以幫助我們靈活地管理對話內容,確保 LLM 能夠使用最上下文來生成響應。

采用ConversationChain對話鏈結合PromptTemplate和MessagesPlaceholder,幾行代碼就可以輕松讓 LLM 擁有短時記憶。

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一個愛撒嬌的女助手,喜歡用可愛的語氣回答問題。"),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{input}"),
    ]
)
memory = ConversationBufferMemory(return_messages=True)
chain = ConversationChain(llm=model, memory=memory, prompt=prompt)

res = chain.invoke({"input": "今天你好,我的名字是張三,我是你的老板"})
res['response']

res = chain.invoke({"input": "幫我安排一場今天晚上的高規格的晚飯"})
res['response']

res = chain.invoke({"input": "你還記得我叫什么名字嗎?"})
res['response']

四、使用長期記憶

短期記憶在會話關閉或者服務器重啟后,就會丟失。如果想長期記住對話信息,只能采用長期記憶組件。

LangChain 支持多種長期記憶組件,比如Elasticsearch、MongoDB、Redis等,下面以Redis為例,演示如何使用長期記憶。

from langchain_community.chat_message_histories import RedisChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="gpt-3.5-turbo",
    openai_api_key="sk-xxxxxxxxxxxxxxxxxxx",
    openai_api_base="https://api.aigc369.com/v1",
)

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一個擅長{ability}的助手"),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{question}"),
    ]
)

chain = prompt | model

chain_with_history = RunnableWithMessageHistory(
    chain,
    # 使用redis存儲聊天記錄
    lambda session_id: RedisChatMessageHistory(
        session_id, url="redis://10.20.1.10:6379/3"
    ),
    input_messages_key="question",
    history_messages_key="history",
)

# 每次調用都會保存聊天記錄,需要有對應的session_id
chain_with_history.invoke(
    {"ability": "物理", "question": "地球到月球的距離是多少?"},
    config={"configurable": {"session_id": "baily_question"}},
)

chain_with_history.invoke(
    {"ability": "物理", "question": "地球到太陽的距離是多少?"},
    config={"configurable": {"session_id": "baily_question"}},
)

chain_with_history.invoke(
    {"ability": "物理", "question": "地球到他倆之間誰更近"},
    config={"configurable": {"session_id": "baily_question"}},
)

LLM 的回答如下,同時關閉 session 后,直接再次提問最后一個問題,LLM 仍然能給出正確答案。

只要configurable配置的session_id能對應上,LLM 就能給出正確答案。

然后,繼續查看redis存儲的數據,可以看到數據在 redis 中是以 list的數據結構存儲的。

五、總結

本文介紹了 LLM 缺乏記憶功能的固有缺陷,以及記憶組件的原理,還討論了如何利用 LangChain 給 LLM 裝上記憶組件,讓 LLM 能夠在對話中更好地保持上下文。希望對你有幫助!

責任編輯:趙寧寧 來源: 程序員半支煙
相關推薦

2024-07-12 14:53:42

2024-07-03 09:38:35

LLM人工智能

2025-10-21 08:53:00

2025-06-23 09:26:24

2025-07-16 13:00:26

2025-08-29 07:47:54

2025-07-29 00:00:00

LLM上下文窗口系統

2024-03-07 09:15:57

2025-11-04 09:16:14

2025-11-07 08:44:38

2023-08-03 09:02:32

LangChain開發GLM

2024-06-19 08:14:51

大型語言模型LLMRAG

2024-06-25 15:35:53

LangChain轉換鏈

2025-05-12 02:50:00

2023-06-29 08:00:00

人工智能LLMGPT-4

2025-06-16 09:40:48

2024-05-14 09:57:10

人工智能QuarkusLLM

2023-09-28 08:41:11

OpenAILLMLangChain

2023-12-13 13:36:40

模型算力

2025-09-11 06:57:11

點贊
收藏

51CTO技術棧公眾號

91精品久久久久久久91蜜桃| 成人av免费在线播放| 中文字幕综合在线| 日本人妻一区二区三区| 成人免费网站观看| 国产免费成人在线视频| 成人国产一区二区| 亚洲婷婷久久综合| 欧美日韩国产综合网| 亚洲一级一级97网| 国产性猛交96| 久久久久久一区二区三区四区别墅| 一区二区三区加勒比av| 日本一区二区三区视频在线观看| www国产一区| 免费在线观看一区二区三区| 欧美高清在线观看| 国产熟女一区二区| 欧美a一欧美| 91精品欧美综合在线观看最新 | 91久久高清国语自产拍| 日韩精品视频免费在线观看| 1314成人网| 成人国产一区二区三区精品麻豆| 99在线观看免费| 欧美日韩水蜜桃| 精品国产一区二区三区久久久蜜月| 中文字幕有码av| 中文字幕在线看片| 亚洲高清三级视频| 久久久久福利视频| 免费大片在线观看www| 久久久久久9999| 久久99精品久久久久子伦| 国产ts人妖调教重口男| 国内精品国产三级国产a久久| 国产成人高清激情视频在线观看| 国产 日韩 欧美 在线| 欧美激情无毛| 欧美巨大黑人极品精男| 亚洲综合网在线| 天天揉久久久久亚洲精品| 伊人久久久久久久久久久久久| 可以直接看的无码av| 久久夜色精品国产噜噜av小说| 日韩免费观看高清完整版在线观看| 51自拍视频在线观看| 自拍偷拍欧美日韩| 欧美美女bb生活片| 亚洲色图欧美自拍| 国产色99精品9i| 欧美一区二区三区婷婷月色| 91蝌蚪视频在线| 久久综合给合| 精品日韩在线一区| 亚洲少妇一区二区| 国产精品zjzjzj在线观看| 精品久久99ma| 亚洲视频在线播放免费| 欧美人妖视频| 亚洲欧美在线免费观看| 中文字幕成人动漫| 久久美女视频| 欧美成人免费在线观看| 精品午夜福利在线观看| 性欧美精品高清| 国产成人精品视| 久久免费视频1| 国产性猛交xx乱| 国产精品精品国产一区二区| 久久香蕉国产线看观看av| 久久久久亚洲av片无码| 国产精品videosex极品| 欧美亚洲第一页| 国产天堂第一区| 国产一区二区三区在线观看免费| 91免费看蜜桃| 欧美捆绑视频| 国产精品麻豆视频| 免费极品av一视觉盛宴| 亚洲最大网站| 欧美精选午夜久久久乱码6080| 性生活一级大片| 日韩av网站在线免费观看| 国产香蕉精品视频一区二区三区| 国产美女福利视频| 亚洲伦理精品| 成人黄色av播放免费| 俄罗斯嫩小性bbwbbw| 久久久久久97三级| 超碰超碰超碰超碰超碰| 成人性生活视频| 777久久久精品| jizz欧美性20| 午夜国产精品视频免费体验区| 国产91精品黑色丝袜高跟鞋| 91tv国产成人福利| 91一区二区在线观看| 黄频视频在线观看| 欧洲一区精品| 欧美一级免费大片| 亚洲一区二区观看| 欧美精品偷拍| 国产精品高潮在线| 人妻一区二区三区四区| 国产精品三级视频| 亚洲中文字幕无码专区| 婷婷视频一区二区三区| 亚洲品质视频自拍网| 久久久久99精品成人片毛片| 美女mm1313爽爽久久久蜜臀| 国产一区二区在线观看免费播放| 麻豆视频在线| 欧美性高清videossexo| 亚洲国产古装精品网站| 日本免费色视频| 伊人久久大香线蕉综合网站| 欧美丰满老妇厨房牲生活| 亚洲av无码精品一区二区| caoporn国产精品| 黄色小视频大全| 日韩精品一区二区三区av| 亚洲国产私拍精品国模在线观看| 全网免费在线播放视频入口 | 777视频在线| 日韩av三区| 久久久久亚洲精品国产| 99riav国产| 最近日韩中文字幕| 奇米影视四色在线| 国产一区99| 日韩av快播网址| 视频一区二区免费| 亚洲国产精品久久久男人的天堂| 亚洲精品国产久| 亚洲精品91| 91精品国产综合久久香蕉| 福利视频在线导航| 色婷婷av久久久久久久| 波多野结衣福利| 亚洲精选国产| 精品久久久久久一区二区里番| 成人福利影视| 欧美成人综合网站| 成人免费看片98| 懂色av一区二区三区蜜臀| 99re6这里有精品热视频| 免费看日产一区二区三区| 久久艳片www.17c.com| 国产乱码久久久| 亚洲精选免费视频| 日本少妇xxx| 狠狠入ady亚洲精品| 国产精品一区二区你懂得| 黑人精品视频| 日韩成人激情在线| 波多野结衣mp4| 中文无字幕一区二区三区 | 国产一区二区三区视频| 欧美二级三级| 精品国自产拍在线观看| 亚洲美女少妇撒尿| 中国黄色片视频| 国产欧美精品久久| 日本精品一区二区三区视频 | 欧美日韩99| 好吊色欧美一区二区三区视频| 毛片免费看不卡网站| 一区二区日韩精品| 国产免费不卡视频| 欧美日韩国产黄| 一级肉体全黄裸片| 国产激情一区二区三区| 人妻熟妇乱又伦精品视频| 亚洲资源网你懂的| 成人免费视频97| www.综合网.com| 亚洲人成自拍网站| 国产福利视频导航| 欧美性xxxx在线播放| 一本一本久久a久久| 国产99久久久国产精品潘金网站| 久久精品免费一区二区| 欧美韩国日本在线观看| 国产在线一区二区三区四区| 99久久伊人| 色综合色综合久久综合频道88| 久香视频在线观看| 欧美一级日韩一级| 日本在线播放视频| 综合久久久久综合| 无码熟妇人妻av| 国产精品一区在线观看乱码| 日本久久久精品视频| 欧美激情另类| 久久香蕉综合色| 欧美a在线观看| 国产精品久久久久久久av电影| 日本欧美电影在线观看| 伊人精品在线观看| 亚州av在线播放| 日韩一区二区电影在线| 波多野结衣视频观看| 亚洲一区电影777| 毛片视频免费播放| 91一区二区三区在线观看| 国产精品自在自线| 久久久蜜桃一区二区人| 国产一区二区三区小说| 欧美激情理论| 少妇特黄a一区二区三区| 国产精品色综合| 亚洲精选国产| 免费观看中文字幕| 欧美军人男男激情gay| 精品欧美一区二区在线观看视频| 伊人亚洲精品| 国产精品网址在线| 怡红院成人在线| 国产91精品不卡视频| 波多野结衣在线播放| 欧美成人精品在线视频| 免费av在线网址| 中文字幕v亚洲ⅴv天堂| 国产中文在线视频| 亚洲美女精品久久| 五月婷在线视频| 精品国产乱码久久| 亚洲xxx在线| 日韩午夜在线观看| 国产欧美久久久| 在线91免费看| 国产女无套免费视频| 91精品国产综合久久久久久漫画 | 麻豆精品新av中文字幕| 久久精品午夜福利| 久久狠狠婷婷| aa在线免费观看| 亚洲欧美日本视频在线观看| 久久久久久久中文| 性欧美xxxx大乳国产app| 亚洲欧洲日产国码无码久久99| 国产视频亚洲| 黄色一级片播放| 蜜桃久久av| 999精品视频在线| 男人的j进女人的j一区| 色婷婷一区二区三区av免费看| 美女精品一区二区| 中文字幕55页| 国产成人精品免费在线| 超碰caoprom| 97久久人人超碰| 久久精品成人av| 亚洲国产激情av| 99鲁鲁精品一区二区三区| 亚洲欧洲av另类| 久久久久成人网站| 午夜视频一区在线观看| 五月天婷婷久久| 欧美午夜电影网| 99精品免费观看| 亚洲国产精品视频在线观看| 欧美日韩激情视频一区二区三区| 亚洲色图欧美制服丝袜另类第一页| 国产精品四虎| 久久影视电视剧免费网站| 久草成色在线| 日本电影亚洲天堂| 亚洲精品伦理| 国产高清一区二区三区| 亚瑟一区二区三区四区| 亚洲欧洲精品一区二区| 国内精品久久久久国产盗摄免费观看完整版| 大伊香蕉精品视频在线| 日韩成人伦理电影在线观看| 视频区 图片区 小说区| 99久久精品国产观看| 东京热无码av男人的天堂| 亚洲黄色性网站| 秋霞精品一区二区三区| 欧美一级淫片007| 青梅竹马是消防员在线| 久久艳片www.17c.com| 白浆视频在线观看| 国产精品亚洲一区二区三区| h视频久久久| 亚洲欧洲日夜超级视频| 亚洲黄页一区| 蜜桃福利午夜精品一区| 26uuu精品一区二区在线观看| 欧美肥妇bbwbbw| 欧美特黄级在线| 北条麻妃一二三区| 永久免费精品影视网站| 波多野结衣久久| 96国产粉嫩美女| 欧美人与物videos另类xxxxx| www.69av| 久久精品国产99| 国精产品一区一区三区免费视频| 亚洲日本va在线观看| 中文字幕手机在线视频| 欧美成人在线直播| 蜜桃视频在线观看www社区| 欧美亚洲国产精品| 成人爽a毛片| 国产对白在线播放| 日本色综合中文字幕| 欧美精品欧美极品欧美激情| 一区二区三区在线高清| 亚洲一二区视频| 亚洲欧美中文日韩在线| 成年人在线网站| 亚洲自拍欧美色图| 四虎成人av| 五月婷婷狠狠操| 久久精品在这里| 日本黄色片视频| 亚洲成人在线网| 羞羞视频在线免费国产| 成人写真视频福利网| 清纯唯美日韩| www日韩视频| 久久久久久久网| 麻豆久久久久久久久久| 亚洲а∨天堂久久精品喷水| 在线看女人毛片| 亚洲伊人成综合成人网| 91精品一区二区三区综合| 天堂av手机在线| 中文字幕一区日韩精品欧美| 一级淫片免费看| www.欧美免费| 国产精品一区二区精品| 中文字幕日韩精品一区二区| 久久av资源网| av激情在线观看| 日韩视频中午一区| 秋霞在线视频| 国产日韩欧美二区| 亚洲久久在线| 国产特黄级aaaaa片免| 色综合久久88色综合天天6| 欧美女v视频| 国产精品都在这里| 91影院成人| 91精品国产三级| 亚洲成人一区在线| 少妇一级淫片免费看| 国产91成人在在线播放| 国产一区二区三区91| 亚洲欧洲日本精品| 综合分类小说区另类春色亚洲小说欧美 | 色婷婷国产精品| 电影在线一区| 成人妇女淫片aaaa视频| 中文字幕免费精品| 中国极品少妇videossexhd| 欧美三级免费观看| 成年女人的天堂在线| 91久久久久久久久久久久久| 国产一区激情| 18禁裸乳无遮挡啪啪无码免费| 在线精品视频小说1| 精品自拍一区| 国产在线一区二区三区四区| 日本欧美一区二区三区| 国产免费美女视频| 亚洲国产精品小视频| 成人精品国产亚洲| 国产肉体ⅹxxx137大胆| caoporm超碰国产精品| 中文字幕在线观看视频一区| 欧美日韩成人精品| 妖精视频一区二区三区| 国产无遮挡猛进猛出免费软件| 夜夜嗨av一区二区三区四季av| 日韩一区二区三区不卡| 国产成人精品免高潮在线观看| 欧美aa国产视频| theav精尽人亡av| 91精品国产综合久久精品图片| 成人在线黄色电影| 日本黄色a视频| 91美女精品福利| 国产又粗又猛又爽又黄91| 午夜欧美不卡精品aaaaa| 超碰成人久久| 内射中出日韩无国产剧情| 在线综合视频播放| 婷婷六月国产精品久久不卡| 日韩中文字幕在线不卡| 国产农村妇女精品| 人人妻人人玩人人澡人人爽| 成人有码在线播放| 久久久夜夜夜| 日韩欧美a级片| 久久99精品视频一区97| 日韩av有码|