精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产欧美另类丝袜| 国产一区二区在线观看免费| 亚洲视频国产视频| 久久6免费视频| 丁香高清在线观看完整电影视频| av在线不卡网| 国产精品视频网址| 久久久久亚洲av无码专区| 首页亚洲中字| 欧美一区2区视频在线观看| 九色自拍视频在线观看| 97最新国自产拍视频在线完整在线看| 国产麻豆精品一区二区| 国产成人精品视频在线观看| 麻豆changesxxx国产| 精品久久久久中文字幕小说 | 久久久九九九九| 91精品国产高清久久久久久91裸体 | 视色视频在线观看| 国模精品视频| 一区二区三区四区中文字幕| 午夜精品短视频| 水莓100国产免费av在线播放| 国产在线播放一区三区四| 欧美在线视频一区二区| 欧美黄色一级网站| 99久久精品国产亚洲精品| 亚洲欧美精品一区| 欧美xxxxx精品| 秋霞一区二区| 91精品国产综合久久精品图片| 波多野结衣作品集| 成人av观看| 亚洲高清免费观看高清完整版在线观看| 一级黄色免费在线观看| h视频网站在线观看| 久久婷婷综合激情| 精品国产一二| 国产91久久久| 懂色av一区二区在线播放| 亚洲a中文字幕| 91一区二区视频| 另类综合日韩欧美亚洲| 国产精品高潮呻吟久久av野狼| www.国产高清| 99pao成人国产永久免费视频| 久久91精品国产91久久久| 91香蕉视频在线播放| 99精品一区| 日韩在线视频中文字幕| 国产成人免费在线观看视频| 成人精品久久| 中文字幕亚洲欧美一区二区三区| 国产精品1000部啪视频| 久久99国内| 国产亚洲精品91在线| 日本精品在线观看视频| 欧美在线电影| 久久在线免费观看视频| 91视频综合网| 激情另类综合| 欧亚精品在线观看| 久久夜色精品国产噜噜亚洲av| 三级一区在线视频先锋 | 日韩中文字幕在线| 登山的目的在线| 欧美激情91| 国模私拍视频一区| 国产无套丰满白嫩对白| 日韩国产精品久久久| 成人激情视频网| 午夜精品小视频| 99天天综合性| 色播五月综合| 性欧美猛交videos| 亚洲亚洲精品在线观看| 999精品网站| 国产精品一区二区三区四区在线观看| 欧美一区二区三区精品| 亚洲熟女乱综合一区二区三区| 香蕉久久精品日日躁夜夜躁| 中文字幕欧美国内| 亚洲欧美一区二区三区四区五区| 亚洲福利精品| 国产精品美女主播在线观看纯欲| 国产熟女一区二区丰满| 99国产精品99久久久久久| 日韩一区免费观看| 午夜小视频在线观看| 欧美午夜精品伦理| 亚洲综合123| 天堂av一区二区三区在线播放 | 日韩欧美一区在线| 玖玖爱在线精品视频| 日韩理论电影大全| 91精品国产91| 国产欧美日韩成人| 久久久久国产免费免费| 日本三日本三级少妇三级66| 色综合亚洲图丝熟| 91精品国产综合久久福利| 国产乱了高清露脸对白| 国产精品久久久久久| 777午夜精品福利在线观看| 亚洲网站在线免费观看| 不卡一区二区中文字幕| 中文字幕综合在线观看| 五月天av在线| 日韩欧美国产电影| 一级片黄色录像| 国产精品久久久久久久久久妞妞| 国产免费一区二区三区在线能观看| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 97超碰人人看人人| 在线视频91p| 欧美色视频日本版| 亚洲精品久久一区二区三区777 | 久久亚洲精品国产精品紫薇| 成年人三级视频| 欧美日韩尤物久久| 日韩av综合中文字幕| 欧美日韩精品在线观看视频| 久久99九九99精品| 神马一区二区影院| 久久毛片亚洲| 日韩av在线网址| 美国精品一区二区| 男女激情视频一区| 欧美一区二区综合| 黄频免费在线观看| 亚洲精品在线免费观看视频| 日本黄色小说视频| 激情综合五月婷婷| 偷拍视频一区二区| 自拍偷自拍亚洲精品被多人伦好爽 | 99久精品视频在线观看视频| 国产精品稀缺呦系列在线 | 九九热视频这里只有精品| 中文字幕乱码人妻无码久久 | 久草国产在线观看| 国产麻豆精品95视频| 亚洲午夜久久久影院伊人| 一区二区视频免费完整版观看| 亚洲男子天堂网| caoporn国产| 久久精品一区二区三区不卡| 成人一区二区三| 欧美日韩在线网站| 国产精品亚洲自拍| 毛片网站在线免费观看| 欧美放荡的少妇| 少妇aaaaa| 国产成人精品免费看| 男人添女人下部视频免费| 中文在线综合| 久久久久久久久电影| 无码国产精品一区二区色情男同 | 亚洲欧美国产三级| 一本之道在线视频| 国内精品久久久久久久影视蜜臀| 国产精品区二区三区日本| 菠萝蜜视频在线观看www入口| 精品国产乱码91久久久久久网站| 圆产精品久久久久久久久久久| 久久一区二区视频| 久久久久国产一区| 亚洲精品电影| 国内精品**久久毛片app| 九色porny丨首页入口在线| 日韩精品视频免费| 无码人妻久久一区二区三区不卡| 国产精品素人视频| 宇都宫紫苑在线播放| 亚洲国产精品第一区二区| 欧美性xxxx69| 成人污污www网站免费丝瓜| 欧美激情视频在线免费观看 欧美视频免费一| www天堂在线| 色综合色综合色综合色综合色综合 | 91精品尤物| 日本乱人伦a精品| 免费不卡视频| 亚洲韩国青草视频| 中文字幕在线播放不卡| 依依成人精品视频| 亚洲专区区免费| 久久97超碰国产精品超碰| 2019日韩中文字幕mv| 国产精品片aa在线观看| 亚洲一区二区三区视频| 少妇视频在线观看| 久久久999精品视频| 午夜一区在线观看| 4438x成人网最大色成网站| 少妇一级淫片免费放中国| 国产精品乱码一区二区三区软件| 亚洲自拍偷拍精品| 看片的网站亚洲| 国产91在线视频观看| 婷婷亚洲综合| 欧美一区二区综合| 成功精品影院| 成人免费观看网址| 朝桐光一区二区| 欧美激情亚洲国产| 欧美69xxxx| 国产午夜精品全部视频在线播放| www男人的天堂| 欧美高清hd18日本| 9i精品福利一区二区三区| 亚洲一区二区三区四区五区黄| 性爱在线免费视频| 久久精品人人做| 亚洲天堂av网站| 国产成人精品三级| 91女神在线观看| 日韩黄色片在线观看| 欧美三级在线观看视频| 欧美精品激情| 国产成人三级视频| 91久久夜色精品国产按摩| 日本一区视频在线观看| 日韩欧美国产大片| 国产亚洲精品久久飘花| 凹凸成人在线| 999久久久| 久久三级中文| 91麻豆国产语对白在线观看| 国产情侣一区二区三区| 国产精品高清在线观看| 久久人体大尺度| 日韩av手机在线观看| 国模精品视频| 91av视频在线| 中文字幕在线免费观看视频| 久久久综合av| 久久男人av资源站| 91成品人片a无限观看| 九色porny自拍视频在线播放| 97国产精品免费视频| 国产精品xx| 国产91成人video| 黄色aa久久| 日本成熟性欧美| 国产精品扒开腿做爽爽爽视频软件| 欧美亚洲在线视频| 日韩新的三级电影| 国产精品久久一| 日日夜夜亚洲| 1卡2卡3卡精品视频| 日本一区精品视频| 国产精品区二区三区日本| 欧美黑人做爰爽爽爽| 久久另类ts人妖一区二区| 国产精品一线天粉嫩av| 日韩欧美精品一区二区| 日本高清免费电影一区| 午夜啪啪免费视频| 国产一区清纯| 国产免费一区二区三区视频| 日韩中文字幕一区二区三区| 五月天婷婷激情视频| 久久er精品视频| 在线成人免费av| 成人av资源站| 少妇无套高潮一二三区| 国产精品电影院| 全程偷拍露脸中年夫妇| 精品国产户外野外| 国产日韩在线免费观看| 欧美一区二区三区免费观看视频| 蜜桃av中文字幕| 亚洲欧洲美洲在线综合| 日本高清在线观看wwwww色| 欧美大片免费观看在线观看网站推荐| а√天堂8资源在线| 国产精品久久久久秋霞鲁丝| 日韩在线网址| 欧美精品一区二区三区在线四季 | 亚洲欧美激情网| 国产精品综合一区二区| 特级西西人体wwwww| 亚洲欧洲国产日韩| 国产成人无码精品亚洲| 欧美日韩一区三区四区| 亚洲国产精品18久久久久久| 亚洲色图狂野欧美| 香蕉久久aⅴ一区二区三区| 日本欧美爱爱爱| 欧洲精品99毛片免费高清观看| 欧美性色黄大片人与善| 伊人久久大香线| 国产成人无码一二三区视频| 国产一区二三区| 亚洲天堂岛国片| 亚洲成人高清在线| ,一级淫片a看免费| 亚洲欧美中文字幕| 欧美人与牲禽动交com| 国产精品99一区| 久久99精品国产自在现线| 一区不卡字幕| 久久亚洲视频| 国产人成视频在线观看| 日韩理论片一区二区| 91丝袜一区二区三区| 欧美精品一区二区三区四区| 免费在线毛片网站| 国产成人精品视频在线| 欧美a一欧美| 久艹在线免费观看| 激情成人午夜视频| 少妇精品无码一区二区免费视频| 亚洲国产成人精品视频| 国产日韩欧美视频在线观看| 伊人精品在线观看| 综合在线影院| 狠狠干一区二区| 国产综合网站| 日本少妇xxx| 中文字幕日韩欧美一区二区三区| 久久久蜜桃一区二区| 日韩av综合中文字幕| 波多野结衣在线观看| av在线不卡观看| 88国产精品视频一区二区三区| 天天色综合社区| 亚洲国产精品精华液ab| aaaaaa毛片| 亚洲欧美制服另类日韩| 性欧美freesex顶级少妇| 国产免费一区| 在线播放亚洲| 污片免费在线观看| 亚洲18女电影在线观看| 亚洲免费成人网| 九九九久久国产免费| jazzjazz国产精品久久| 国产精品无码免费专区午夜| 国产成人av电影在线| 青青草原免费观看| 欧美大片在线观看| 黄页网站在线| 国产在线一区二区三区四区| 亚洲大胆视频| 欧美成人三级伦在线观看| 日韩欧美aⅴ综合网站发布| 亚洲av成人无码久久精品老人 | 天天做天天爱夜夜爽| 日韩国产欧美精品一区二区三区| 五月天av在线| 视频一区视频二区视频三区视频四区国产| 视频一区二区三区入口| 卡一卡二卡三在线观看| 欧美精品久久久久久久多人混战| 好了av在线| 国产精品日韩二区| 亚洲在线黄色| 日本黄色激情视频| 欧美一级理论片| 国产极品人妖在线观看| 久久精品国产精品国产精品污 | 免费成人av资源网| 国产探花在线视频| 日韩欧美成人激情| 韩国成人二区| 亚洲欧美综合一区| 国产精品影视在线观看| 国产无遮挡aaa片爽爽| 亚洲欧洲高清在线| 亚洲视频资源| 国产精品久久久久9999爆乳| 久久久久久久网| 国产永久免费视频| 韩日欧美一区二区| 教室别恋欧美无删减版| www激情五月| 狠狠干狠狠久久| 天堂а√在线资源在线| 国产精品乱码视频| 男女性色大片免费观看一区二区 | 免费网站免费进入在线| 动漫3d精品一区二区三区| 爽爽淫人综合网网站| 五月婷婷一区二区| 亚洲欧美国产精品久久久久久久| 色999久久久精品人人澡69| 精品国产一区二区三区无码| 国产亚洲污的网站| 亚洲va天堂va欧美ⅴa在线| 国产精品96久久久久久| 很黄很黄激情成人| 亚洲午夜精品久久久久久高潮| 日韩免费看网站| 成人不卡视频| 国产h视频在线播放| 日韩一区中文字幕| 久久99久久| av一区二区三区免费| 蜜桃一区二区三区在线观看|