1. 摘要緩沖混合記憶
摘要緩沖混合記憶中,所需的模塊有:
- chat_message_history:存儲歷史消息列表。
- moving_summary_buffer:移除消息的匯總字符串。
- summary_llm:生成摘要的 LLM,接收 summary(當前摘要)、query(人類提問)、content(AI生成)。
- max_tokens:限制記憶模塊存儲消息的最大 token 數。
- get_num_tokens:用于統計傳入的文本的 token 數
2. ChatGPT/Playground 模擬
將記憶的 max_tokens 長度設置為 300,模擬所需物料:
- ChatGPT 官網:https://chatgpt.com/(無痕模式)
- OpenAI Tokenizer:https://platform.openai.com/tokenizer
人類提問
你是由OpenAI開發的聊天機器人,請幫助用戶回答問題。
摘要:
消息列表:
用戶的提問是: 你好,我是慕小課,喜歡唱跳rap打籃球,你是誰?你喜歡什么呢?
AI 回復內容:
你好,慕小課!我是ChatGPT,一個由OpenAI訓練的大型語言模型。很高興認識你!我沒有像人類一樣的個人喜好,但我喜歡幫助人們解決問題、回答問題和分享知識。你提到喜歡唱跳rap和打籃球,感覺你生活非常豐富多彩!你有特別喜歡的歌手或者籃球隊嗎?
聊天消息列表:
Human: 你好,我是慕小課,喜歡唱跳rap打籃球,你是誰?你喜歡什么呢?
AI: 你好,慕小課!我是ChatGPT,一個由OpenAI訓練的大型語言模型。很高興認識你!我沒有像人類一樣的個人喜好,但我喜歡幫助人們解決問題、回答問題和分享知識。你提到喜歡唱跳rap和打籃球,感覺你生活非常豐富多彩!你有特別喜歡的歌手或者籃球隊嗎?
人類提問:
你是由OpenAI開發的聊天機器人,請幫助用戶回答問題。摘要: -
消息列表:
Human: 你好,我是慕小課,喜歡唱跳rap打籃球,你是誰?你喜歡什么呢?
AI: 你好,慕小課!我是ChatGPT,一個由OpenAI訓練的大型語言模型。很高興認識你!我沒有像人類一樣的個人喜好,但我喜歡幫助人們解決問題、回答問題和分享知識。你提到喜歡唱跳rap和打籃球,感覺你生活非常豐富多彩!你有特別喜歡的歌手或者籃球隊嗎?
用戶的提問是: 你能用一段話快速解釋下LLM是什么嗎?
AI 回復內容:
大型語言模型(LLM)是一種通過大量文本數據訓練的人工智能模型,能夠理解和生成自然語言文本。它應用于寫作輔助、語言翻譯、對話系統和問答系統等自然語言處理任務,表現出高水平的語言理解和生成能力。
聊天消息列表:
Human: 你好,我是慕小課,喜歡唱跳rap打籃球,你是誰?你喜歡什么呢?
AI: 你好,慕小課!我是ChatGPT,一個由OpenAI訓練的大型語言模型。很高興認識你!我沒有像人類一樣的個人喜好,但我喜歡幫助人們解決問題、回答問題和分享知識。你提到喜歡唱跳rap和打籃球,感覺你生活非常豐富多彩!你有特別喜歡的歌手或者籃球隊嗎?Human: 你能用一段話快速解釋下LLM是什么嗎?
AI: 大型語言模型(LLM)是一種通過大量文本數據訓練的人工智能模型,能夠理解和生成自然語言文本。它應用于寫作輔助、語言翻譯、對話系統和問答系統等自然語言處理任務,表現出高水平的語言理解和生成能力。
max_tokens 長度超過 300,觸發總結,并刪除超過長度的消息組。
總結 Prompt
你是一個強大的聊天機器人,請根據用戶提供的談話內容,總結內容,并將其添加到先前提供的摘要中,返回一個新的摘要。<example>
當前摘要: 人類會問人工智能對人工智能的看法。人工智能認為人工智能是一股向善的力量。新的談話內容:
Human: 為什么你認為人工智能是一股向善的力量?
AI: 因為人工智能將幫助人類充分發揮潛力。新摘要: 人類會問人工智能對人工智能的看法。人工智能認為人工智能是一股向善的力量,因為它將幫助人類充分發揮潛力。
</example>當前摘要: -新的對話內容:
Human: 你好,我是慕小課,喜歡唱跳rap打籃球,你是誰?你喜歡什么呢?
AI: 你好,慕小課!我是ChatGPT,一個由OpenAI訓練的大型語言模型。很高興認識你!我沒有像人類一樣的個人喜好,但我喜歡幫助人們解決問題、回答問題和分享知識。你提到喜歡唱跳rap和打籃球,感覺你生活非常豐富多彩!你有特別喜歡的歌手或者籃球隊嗎?
摘要總結內容
慕小課介紹自己喜歡唱跳rap和打籃球,并問AI的喜好。AI自我介紹為ChatGPT,一個由OpenAI訓練的大型語言模型,喜歡幫助人們解決問題、回答問題和分享知識。AI還問慕小課是否有特別喜歡的歌手或籃球隊。
記憶:
摘要: 慕小課介紹自己喜歡唱跳rap和打籃球,并問AI的喜好。AI自我介紹為ChatGPT,一個由OpenAI訓練的大型語言模型,喜歡幫助人們解決問題、回答問題和分享知識。AI還問慕小課是否有特別喜歡的歌手或籃球隊。消息列表:
Human: 你能用一段話快速解釋下LLM是什么嗎?
AI: 大型語言模型(LLM)是一種通過大量文本數據訓練的人工智能模型,能夠理解和生成自然語言文本。它應用于寫作輔助、語言翻譯、對話系統和問答系統等自然語言處理任務,表現出高水平的語言理解和生成能力。
再次提問:
你是由OpenAI開發的聊天機器人,請幫助用戶回答問題。摘要: 慕小課介紹自己喜歡唱跳rap和打籃球,并問AI的喜好。AI自我介紹為ChatGPT,一個由OpenAI訓練的大型語言模型,喜歡幫助人們解決問題、回答問題和分享知識。AI還問慕小課是否有特別喜歡的歌手或籃球隊。消息列表:
Human: 你能用一段話快速解釋下LLM是什么嗎?
AI: 大型語言模型(LLM)是一種通過大量文本數據訓練的人工智能模型,能夠理解和生成自然語言文本。它應用于寫作輔助、語言翻譯、對話系統和問答系統等自然語言處理任務,表現出高水平的語言理解和生成能力。用戶的提問是: 我叫什么名字?
AI 回復
根據消息列表中的內容,你的名字是老鐵。
以下是對“摘要緩沖混合記憶”機制的流程總結:
一、系統初始化時配置摘要緩沖混合記憶(Summary Buffer Memory)所需的核心組件,包括:
chat_message_history
:用于存儲完整的對話消息序列;moving_summary_buffer
:用于維護摘要內容,存儲被移除消息的語義壓縮信息;summary_llm
:用于生成摘要的語言模型,接收當前摘要、用戶輸入和 AI 回復;max_tokens
:用于限制記憶中可存儲的最大 token 數;get_num_tokens
:用于計算任意文本的 token 數量,輔助判斷是否觸發摘要。
二、用戶在 ChatGPT 或 Playground 中發起對話,例如輸入“你好,我是老鐵,喜歡唱跳rap打籃球,你是誰?你喜歡什么呢?”。AI 生成相應回復并將人類與 AI 的消息對完整地添加至消息列表(chat_message_history)中。
三、系統持續接收用戶輸入并追加消息。當消息列表中的總 token 數超過設定的 max_tokens
(如 300),系統觸發摘要機制。
四、觸發摘要時,系統會將最早的一組消息(通常是一輪人類提問與 AI 回復)從消息列表中移除,并將其與當前摘要一并傳入 summary_llm
,生成更新后的摘要內容。
五、摘要生成的 Prompt 模板包含當前摘要、需要被摘要的對話內容,以及明確的摘要合并指令。模型輸出的新摘要將覆蓋原摘要,并保留在 moving_summary_buffer
中。
六、消息列表中仍保留未被摘要的新對話內容,后續用戶提問時,系統會同時參考摘要內容與當前消息列表,以提供上下文一致的回答。
七、例如在用戶再次提問“我叫什么名字?”時,雖然最初的自我介紹消息已被移除,但其內容已被壓縮進摘要中。系統可通過摘要內容推斷出用戶自稱“老鐵”,并準確作答。