iT邦幫忙

5

有辦法提升chatgpt的記憶力嗎?

  • 分享至 

  • xImage

似乎有改版?感覺現在chatgpt記憶力變很差,只能記住一兩輪問答的內容,更之前的內容就記不住了,有沒有辦法提升他的記憶力?
我用的是免費的網頁板,不知道用api會不會比較好?希望有用過api的人能分享

wolfwang iT邦研究生 4 級 ‧ 2023-03-10 08:26:59 檢舉
聽過有人這樣建議但沒試過,討論到一個段落請他總結。之後再用這個總結的內容當新的起點往下討論
ccutmis iT邦高手 2 級 ‧ 2023-03-10 09:59:53 檢舉
但是這個方式並不會讓它記得總結之前說過什麼,chatgpt機器人聊天的原理好像是文字接龍,如果沒有上下文的記憶,它其實就是看你當下打了什麼prompt,然後根據他訓練過的模型裡面去找它認為最可能是輸入prompt者要的內容,現在的v4/3.5turbo是有針對回覆方式優化過的,比較感覺不出來,如果是用更早前的模型有時候打的內容他會給出很奇爬的回覆,例如輸入 Hello 它直接吐出一段帶有 Hello 的代碼,而不是給你人性化的回覆
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
12
Ray
iT邦大神 1 級 ‧ 2023-03-09 12:50:25
最佳解答

首先要認知:
ChatGPT 目前只是個玩具的性質, 不是真正已商業化的工具.
(雖然它可以提升某些商業生產力)
ChatGPT API 只是讓你繞過 Web 限制的方法, 無法繞過後端的系統.

根據原廠 OpenAI 的說法:
ChatGPT 的記憶力, 只能向前回溯 3,000+ 個 Word (或 4,000 個 Token).
而且僅限於這次交談的 Session, 關掉 Session 就沒了.
他無法存取以前的 Session 內容, 除非你自己重新貼給他 (但有 4,000 token 的限制)
https://help.openai.com/en/articles/6787051-does-chatgpt-remember-what-happened-earlier-in-the-conversation

要突破這些, 只有向 OpenAI 買訓練好的語言模型, 但是自己開發後端, 自刻一個可以具有長期記憶能力的機器人.

看更多先前的回應...收起先前的回應...
mathewkl iT邦高手 1 級 ‧ 2023-03-09 14:29:33 檢舉

那就不能改正ChatGPT的支言支語了,質量來質量去的頭很痛

AI_Hero iT邦新手 4 級 ‧ 2023-03-09 15:33:06 檢舉

好詳細的回答!感謝您!

ccutmis iT邦高手 2 級 ‧ 2023-03-09 15:38:54 檢舉

那就不能改正ChatGPT的支言支語了,質量來質量去的頭很痛

習慣就好... /images/emoticon/emoticon48.gif

22089634 iT邦新手 5 級 ‧ 2023-03-09 16:22:42 檢舉

請問一下那API有記憶功能嗎
跟WEB的依樣

Ray iT邦大神 1 級 ‧ 2023-03-09 20:55:30 檢舉

一樣沒有....
要先理解, 所謂的記憶是怎麼來的?

最暴力的做法, 就是把以前餵過的內容, 在每次回答前, 重新餵一次給他, 讓他過目一次之後, 他才會完成調教.

這個動作誰來做?

  1. 你自己做, 但限制是最多只能餵 4,000 個 Token
  2. 他自己做, 但限制也是最多只能 4,000 個 Token

所以下一個問題就是:
為何每次都要重新餵? 難道他不能真正的記住嗎?

這就是 AI 跟一般的文件檔案, 或者資料庫不一樣的地方. 叫 AI 記住一件事情, 並不是像我們把一段敘述存起來寫進去就可以了.

對 AI 學習模型而言, 要永久性的記住一件事情, 唯一的辦法, 就是把這些資料當成學習樣本, 重新餵給他跑訓練流程, 等他跑完之後, 就會永遠記住了.

這裡有個關鍵: 要重跑訓練流程, 才能永久記住.

重跑訓練流程的代價是甚麼? 就是要動用 GPU 運算. 以 ChatGPT 公布的成本來看, 她每跑一小時的訓練, 就要花掉 $87 美金.

但又有另外一個問題:
記住一件事情, 需要訓練多久?

答案是: 不知道.
就像你問: 礦機多久可以挖出一顆比特幣? 不一定, 有時候很快, 有時候很慢. AI 訓練也一樣, 你無法預料一件事情要花多久時間去訓練, 他才能記得住? 你只能等他跑完.

所以, 如果她為了記住你的一個指令, 結果要花 1,000 小時的訓練時間才跑完(我們事先不知道要多久), 請問那這 1,000 小時的成本 ($87,000美金=$2,610萬台幣), 要由誰來支付?

如果你不付錢, 他幹嘛要幫你記住?


好, 那麼現在:
我中彩券了, 有很多錢, 我願意付錢, 要怎麼叫他記住?

方法是:
買下他先前已經訓練好的模型 (就是已經訓練到 2021 年的那一大堆), 放在你自己家裡的伺服器上, 再把你要記住的資料餵給他, 讓他去跑訓練學習, 等他學完了, 你家裡的這個模型, 就是可以記住你指令的這套.

以後只要對你家裡的這套模型發問, 他就會記得你先前訓練過的資料.

喔, 別忘了, 每次新發問的資料都還要再丟給她重新訓練喔!! 不然他馬上又忘記了...還有, GPU 消耗的電費要記得去繳....

下一個問題:
為什麼不能叫他用現在 ChatGPT 的那個模型來重新訓練記住?

答案是:
他(ChatGPT)並不想記你自己個人的觀點或看法啊! 他怕你的資料會汙染了 ChatGPT 現在已經訓練好的模型, 萬一當 ChatGPT 給別人問的時候, 結果答出了一些都是你觀點的答案, 這樣就不客觀了, 而且別人也可能無法接受.

你想要形塑一個有自己觀點的 AI, 請你買回家去自己訓練, 不要依賴 ChatGPT. 或者你買不起那麼多伺服器, 也可以租用微軟的 Azure OpenAI 平台, 自己餵資料給他, 訓練出屬於自己的 ChatGPT-XXX, -YYY, -ABC....:
https://azure.microsoft.com/zh-tw/products/cognitive-services/openai-service
(但是 ChatGPT 就是不會讓你去隨便亂訓練他現在的模型)

ccutmis iT邦高手 2 級 ‧ 2023-03-10 11:31:50 檢舉

謝謝 raytracy大神 分享ChatGPT相關科普,我在這邊補充一下昨天的測試記錄。


測試使用 Python 語言,參考 openai 官方文件寫一個 聊天程式,用while廻圈不斷輸入prompt及接收chatGPT回覆,聊天歷史的部份用 message 串列來處理之後,問答時 chatGPT是能記得前後文了(比如說你一開始輸入"早安,我是三重穿山甲",再問它一兩句不相關的之後再問它:"我是誰",它是能正確答覆的,但是每次發送 prompt 時是把 message串列整包發出去,記憶前一句是沒問題了,但是問愈多句,message會愈來愈大包,表示每次問答花的錢就更高了(用掉的token數可以在 https://platform.openai.com/account/usage 查詢)。

目前官方提供了web版跟API版,測試的結果:

  1. web版發送的 prompt 耗費的 tokens 不會列在 https://platform.openai.com/account/usage 裡面,不確定這是不是算免費使用。
  2. API版發送的 prompt 耗費的 tokens 會列在 https://platform.openai.com/account/usage 裡面。(官方給的額度是$18.USD 使用期限:2023/06/01 昨天測了一天花了$0.15)
  3. web版偶而會遇到叫你等半小時再問的情況,出現時把網頁刷新還是會叫你等。
  4. API版很少遇到叫你等半小時再問的情況,出現時把程式重新執行就可以繼續問了。
  5. API版經過實際測試,只要每次發送的 prompt 不超過官方說的4xxx tokens,message串列內容超過4xxx,還是可以發送 prompt 並取得 response 的。

以下是測試過程記錄:
1. 於Local time 10:04 發送: 早! (照官方說明應該是發送3個token以下,一個中文字是2個token)
2. 測試結果: 2023年3月9日 上午10:00 gpt-3.5-turbo-0301, 1 request (10 prompt + 6 completion = 16 tokens)
3. 於Local time 13:07:42 開啟 chatgpt_client 發送了"午安","沒事,只是上來測試一些東西","好的,謝謝您~","對了,我的名字是 aloha3307",得到制式的回覆,這次測試不關閉一兩小時後再發問,看它的反應,還有貼上大量文字後的情況。(預計15:07再發問)
4. 13:17 查詢結果: gpt-3.5-turbo-0301, 3 requests(153 prompt + 52 completion = 205 tokens)
5. 13:24 查詢結果: 又多了一筆! gpt-3.5-turbo-0301, 1 request(127 prompt + 58 completion = 185 tokens)
6. 15:25 對已開啟中的 chatgpt_client 發送了 "我回來了","還記得我的名字嗎",及請它幫我列出學習stable diffusion webui 使用 lora 訓練模型的項目,這邊 chatGPT 再度發揮其一本正經的胡說八道的本事,這裡它回覆的內容比較長,晚點來觀察platform網站查詢結果。
7. 15:45 查詢結果 共有兩筆:
* 下午3:20 gpt-3.5-turbo-0301, 2 requests (440 prompt + 56 completion = 496 tokens)
* 下午3:25 gpt-3.5-turbo-0301, 2 requests (1,214 prompt + 541 completion = 1,755 tokens)
8. 這裡看到 tokens 數量已經明顯爆增了一倍以上,而我做的只是打幾次招呼跟問了一個沒有正確答案的問題(可能是問了個蠢問題XD)
9. 16:20 對已開啟中的 chatgpt_client 發送了 "請用我的名字為主角說一個跟 ai 有關的寓言故事,長度在200字以內",它是正二八經的講了一個主角是我的故事...等等再觀察platform網站查詢結果。
10. 16:40 查詢結果: 下午4:20 gpt-3.5-turbo-0301, 2 requests(2,284 prompt + 375 completion = 2,659 tokens)
11. 16:45 對開啟中的 chatgpt_client 發送 "說一個關羽過五關斬六將的故事,用我的名字為主角,長度在300字以內" 它說了一個bad ending 我讓它改寫成 happy ending 基本上完成所求,等等再觀察 tokens的長度有沒有超過 4096
12. 查詢結果: 下午4:45 gpt-3.5-turbo-0301, 3 requests(5,818 prompt + 997 completion = 6,815 tokens)
13. tokens 數超過 4096了,再問一次二百字的笑話短文有取得回覆


補充一件自己做過很蠢的事,前幾天在技術文章那邊看到有位邦友發文分享 openai 新的 whisper 可以把語音轉文字,裡面提到其實現在 chatGPT的翻譯水準不輸google翻譯了,我想都沒想就把某本外文書的整章 copy and paste 按 Enter 送出,果然不出意外的話就要出意外了,它直接給了那個的 token 超出 4xxx 的錯誤,沒得到翻譯結果就算了,過了一會兒我進 platform 查看,被扣了一萬多的 tokens ...

AI_Hero iT邦新手 4 級 ‧ 2023-03-10 13:27:13 檢舉

@ccutmis 感謝實測!message串列那邊不太了解,message串列是指將問答紀錄做成類似.json檔的格式傳進chatgpt裡嗎?
第五點的:API版經過實際測試,只要每次發送的 prompt 不超過官方說的4xxx tokens,message串列內容超過4xxx,還是可以發送 prompt 並取得 response 的。
是指有辦法一次傳超過4xxx tokens的文字?
prompt和message串列的差異搞不懂了/images/emoticon/emoticon06.gif

ccutmis iT邦高手 2 級 ‧ 2023-03-10 15:05:14 檢舉

bighead89916
用 Python 串接 gpt-3.5-turbo API 的範例(可緩解 chatGPT 健忘症)
https://raw.githubusercontent.com/ccutmis/chatgpt_client/master/chatgpt_client_cmd.py

怎麼處理的都在範例裡面了,關鍵字:"conversation_history",它是一個串列,每次向 gpt 發送請求時夾帶的參數 messages 就是它,運作機制就是 RayTracy 大佬說的那樣。

測試步驟:

  1. 先確定電腦有裝Python3.x(推薦 3.10.10 版)
  2. 把 OPENAI_API_KEY 設為環境變數
  3. 在 "C:\Users\你的登入帳號" 底下建一個文字檔 並命名:"chatgpt_client.py",把上面範例的內容貼進去再存檔。
  4. 開啟 cmd (工作目錄預設應該是在"C:\Users\你的登入帳號"),先安裝 openai 的套件:pip install openai
  5. 接著執行 'Pytyon chatgpt_client.py' 就會看到文字版的聊天對話介面了...

註: 我有試著計算已使用 Token 數,但是直接用官方給的範例得到的值跟 platform 裡面查到的不一樣,大約都差一倍(例:本地端50Tokens,網站上顯示100Tokens 所以那個query_used_tokens()取得的值可以不用太採信),
結論 : 用這個方式提問,會比單個問題遂個提問花費更多!

4
Kailis
iT邦研究生 1 級 ‧ 2023-03-09 12:36:54

安裝chatgpt for google , chrome extersion ,
可以用來記錄在網頁中的曆史問答 ,隨時回到當下的記憶點,
看看是不是你要的

AI_Hero iT邦新手 4 級 ‧ 2023-03-09 15:35:32 檢舉

看起來很方便,但不是我要的,謝謝!

7
jeffeux
iT邦新手 4 級 ‧ 2023-03-10 00:55:51

推 raytracy 大佬的回答
你現在用的模型本身參數應該是固定住的(freezed),所以其實模型讓你覺得有記憶的原因可能是來自 in-context learning (詳細我正在查 paper⋯⋯)

不過附註幾點:

實際上比起讓 AI 模型「記住」某些東西,可能讓它「忘記」某些東西更困難

也就是 unlearning 的問題
unlearning 難的點隨便舉幾個:

  1. 怎麼定義「怎樣叫忘了」(搞不好模型本來就已經自己這麼覺得了,因為模型有推論的能力)
  2. 忘記「某項東西」的範圍很難定義(跟上面一樣,因為模型有推論的能力,所以要它忘記某項資料可能牽涉到的事情很廣,會一下忘記一大片資料然後反而讓整個模型動不起來)
    偏偏 unlearning 又可能很重要,不然某些敏感資料一旦曾經被訓練進去就去除不了了。

要「只修正某個東西」以現在類神經網路(NN)的特性來說尚且難以做到

(如果可以的話深度學習的模型大概也不會被說那麼黑箱子了)

AI_Hero iT邦新手 4 級 ‧ 2023-03-10 13:31:32 檢舉

感謝補充,學到新東西了!

感謝補充,學到新東西了!

4
I code so I am
iT邦高手 1 級 ‧ 2023-03-10 11:55:52

ChatGPT API 預設是 stateless, 但是可以利用【提示】(prompt)將上一題的提示與答案傳給下一題,利用ChatML格式很容易達成。

AI_Hero iT邦新手 4 級 ‧ 2023-03-10 13:43:33 檢舉

感謝回答!得到了新的切入點!
我有個問題,當我向chatgpt提問時,是我輸入的所有字都會變成prompt,還是他會先對我輸入的字做整理後,只選出幾個詞當作prompt生成答案?

所有字都會變成prompt,可參閱ChatML撰寫方式。

我要發表回答

立即登入回答