似乎有改版?感覺現在chatgpt記憶力變很差,只能記住一兩輪問答的內容,更之前的內容就記不住了,有沒有辦法提升他的記憶力?
我用的是免費的網頁板,不知道用api會不會比較好?希望有用過api的人能分享
首先要認知:
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 買訓練好的語言模型, 但是自己開發後端, 自刻一個可以具有長期記憶能力的機器人.
那就不能改正ChatGPT的支言支語了,質量來質量去的頭很痛
好詳細的回答!感謝您!
那就不能改正ChatGPT的支言支語了,質量來質量去的頭很痛
習慣就好...
請問一下那API有記憶功能嗎
跟WEB的依樣
一樣沒有....
要先理解, 所謂的記憶是怎麼來的?
最暴力的做法, 就是把以前餵過的內容, 在每次回答前, 重新餵一次給他, 讓他過目一次之後, 他才會完成調教.
這個動作誰來做?
所以下一個問題就是:
為何每次都要重新餵? 難道他不能真正的記住嗎?
這就是 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 就是不會讓你去隨便亂訓練他現在的模型)
謝謝 raytracy大神 分享ChatGPT相關科普,我在這邊補充一下昨天的測試記錄。
測試使用 Python 語言,參考 openai 官方文件寫一個 聊天程式,用while廻圈不斷輸入prompt及接收chatGPT回覆,聊天歷史的部份用 message 串列來處理之後,問答時 chatGPT是能記得前後文了(比如說你一開始輸入"早安,我是三重穿山甲",再問它一兩句不相關的之後再問它:"我是誰",它是能正確答覆的,但是每次發送 prompt 時是把 message串列整包發出去,記憶前一句是沒問題了,但是問愈多句,message會愈來愈大包,表示每次問答花的錢就更高了(用掉的token數可以在 https://platform.openai.com/account/usage 查詢)。
目前官方提供了web版跟API版,測試的結果:
以下是測試過程記錄:
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 ...
@ccutmis 感謝實測!message串列那邊不太了解,message串列是指將問答紀錄做成類似.json檔的格式傳進chatgpt裡嗎?
第五點的:API版經過實際測試,只要每次發送的 prompt 不超過官方說的4xxx tokens,message串列內容超過4xxx,還是可以發送 prompt 並取得 response 的。
是指有辦法一次傳超過4xxx tokens的文字?
prompt和message串列的差異搞不懂了
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 大佬說的那樣。
測試步驟:
pip install openai
註: 我有試著計算已使用 Token 數,但是直接用官方給的範例得到的值跟 platform 裡面查到的不一樣,大約都差一倍(例:本地端50Tokens,網站上顯示100Tokens 所以那個query_used_tokens()取得的值可以不用太採信),
結論 : 用這個方式提問,會比單個問題遂個提問花費更多!
安裝chatgpt for google , chrome extersion ,
可以用來記錄在網頁中的曆史問答 ,隨時回到當下的記憶點,
看看是不是你要的
推 raytracy 大佬的回答
你現在用的模型本身參數應該是固定住的(freezed),所以其實模型讓你覺得有記憶的原因可能是來自 in-context learning (詳細我正在查 paper⋯⋯)
不過附註幾點:
也就是 unlearning 的問題
unlearning 難的點隨便舉幾個:
(如果可以的話深度學習的模型大概也不會被說那麼黑箱子了)
ChatGPT API 預設是 stateless, 但是可以利用【提示】(prompt)將上一題的提示與答案傳給下一題,利用ChatML格式很容易達成。