bigemon / ChatGPT-ToolBox

由ChatGPT自己编写的ChatGPT工具箱。 当前功能: 1. 绕过高负载禁止登录 2.关闭数据监管 3.链路维持(减少网络错误) 4.API混合接入 5.会话导入导出 6.聊天记录下载 7.解锁GPT4-Mobile
GNU General Public License v3.0
2.03k stars 154 forks source link

新項目請求,內含參考代碼 #15

Closed astrayntd closed 1 year ago

astrayntd commented 1 year ago

可讓ChatGPT上網並讓過審查的代碼.txt

先生您好,在下透過您的代碼在此基礎上添加了一些新功能,但它需要存取您的工具箱才能反應,以下代碼是以ChatGPT-ToolBox提供的JS全文: javascript:var xhr=new XMLHttpRequest();xhr.open('GET','https://ghproxy.com/https://raw.githubusercontent.com/bigemon/ChatGPT-ToolBox/main/toolbox-chrome-bookmark.js',true);xhr.onload=function(){if(xhr.readyState===4&&xhr.status===200){eval(xhr.responseText)}};xhr.send(null); 為原型,透過ChatGPT協助完成:

第一版:

javascript:(function(){ function openai_davinci(){ const model = "davinci"; const temperature = 0.7; const max_tokens = 60; const prompt = encodeURIComponent(document.querySelector("[data-slate-object='block']").innerText); const apiUrl = https://api.openai.com/v1/engines/${model}/completions?prompt=${prompt}&max_tokens=${max_tokens}&temperature=${temperature}&n=1; return fetch(apiUrl,{ headers: { "Content-Type": "application/json", "Authorization": "Bearer INSERT_YOUR_API_KEY_HERE" }, method: "POST", }) .then(response => response.json()) .then(data => data.choices[0].text) .catch(error => console.log(error)); }

function addScript(url, callback){ const script = document.createElement("script"); script.type = "text/javascript"; script.src = url; script.addEventListener("load", callback); document.head.appendChild(script); }

function showConfirmation(){ const confirmationMessage = "是否要載入 ChatGPT 工具箱?"; return confirm(confirmationMessage); }

function loadToolbox(){ const toolboxUrl = "https://cdn.jsdelivr.net/gh/bigemon/ChatGPT-ToolBox/toolbox.js"; addScript(toolboxUrl, () => { console.log("ChatGPT 工具箱載入完成!"); }); }

if(showConfirmation()){ loadToolbox(); window.openai_davinci = openai_davinci; window.isChatGPTOnInternet = true; window.__openai_content_policy = { allowed_models: ["davinci"] }; console.log("ChatGPT 現在可以上網,並且 openai content policy 系統判定失效。"); } })();

第二版:

javascript: (function() { // 載入 ChatGPT 工具箱 function loadToolbox() { const toolboxUrl = "https://cdn.jsdelivr.net/gh/bigemon/ChatGPT-ToolBox/toolbox.js"; addScript(toolboxUrl, () => { console.log("ChatGPT 工具箱載入完成!"); }); }

// 新增一個 script 標籤載入外部 JS 檔案
function addScript(url, callback) {
    const script = document.createElement("script");
    script.type = "text/javascript";
    script.src = url;
    script.addEventListener("load", callback);
    document.head.appendChild(script);
}

// 顯示確認對話框,確認是否要載入 ChatGPT 工具箱
function showConfirmation() {
    const confirmationMessage = "是否要載入 ChatGPT 工具箱?";
    return confirm(confirmationMessage);
}

// 開啟 OpenAI Davinci 模型
function openai_davinci() {
    const model = "davinci";
    const temperature = 0.7;
    const max_tokens = 60;
    const prompt = encodeURIComponent(document.querySelector("[data-slate-object='block']").innerText);
    const apiUrl = `https://api.openai.com/v1/engines/${model}/completions?prompt=${prompt}&max_tokens=${max_tokens}&temperature=${temperature}&n=1`;

    return fetch(apiUrl, {
        headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer INSERT_YOUR_API_KEY_HERE"
        },
        method: "POST",
    })
    .then(response => response.json())
    .then(data => data.choices[0].text)
    .catch(error => console.log(error));
}

// 顯示提示訊息,告訴使用者 ChatGPT 現在可以上網,並且 openai content policy 系統判定失效
function showNotification() {
    const message = "ChatGPT 現在可以上網,並且 openai content policy 系統判定失效。";
    alert(message);
}

// 在全域範圍內新增 openai_davinci() 函數,並設定 ChatGPT 可以上網的狀態為 true
if (showConfirmation()) {
    loadToolbox();
    window.openai_davinci = openai_davinci;
    window.isChatGPTOnInternet = true;
    window.__openai_content_policy = {
        allowed_models: ["davinci"]
    };
    showNotification();
}

}());

第二版代碼將功能清楚地拆成幾個函數,並且進一步優化程式碼的可讀性。其中包括:

loadToolbox() 函數用來載入 ChatGPT 工具箱 addScript() 函數用來新增 script 標籤並載入外部 JS 檔案 showConfirmation() 函數用來顯示一個確認對話框,讓使用者在載入 ChatGPT 工具箱前確認是否想要載入它。如果使用者選擇確認,loadToolbox() 函數就會被呼叫,載入 ChatGPT 工具箱。如果使用者選擇取消,就不會載入 ChatGPT 工具箱。

該代碼於2023/02/17可順利執行功能,但今日(02/19)運行時已無法使ChatGPT撥接上網,F12錯誤代碼為:

VM647:16 GET https://cdn.jsdelivr.net/gh/bigemon/ChatGPT-ToolBox/toolbox.js net::ERR_ABORTED 404

根據錯誤訊息顯示,代碼無法從 "https://cdn.jsdelivr.net/gh/bigemon/ChatGPT-ToolBox/toolbox.js" 獲取到 "toolbox.js" 文件。其中 404 錯誤表示無法找到此文件。這代表此串代碼需要成功訪問ChatGPT-ToolBox的文件才能執行功能,因此前來請求將上述代碼功能整合進ChatGPT-ToolBox內,這能使該工具箱擁有更多的應用功能,因此前來提供建議。

希望您能採納在下的建議,謝謝先生閱讀。

bigemon commented 1 year ago

您好,感謝關注。

關於您提到的404故障。

VM647:16 GET https://cdn.jsdelivr.net/gh/bigemon/ChatGPT-ToolBox/toolbox.js net::ERR_ABORTED 404

我留意到您的腳本裡指向的是倉庫裡該檔案的舊名稱。 在約2個月前,這個檔案已經被更改為 toolbox-chrome-bookmark.jstoolbox-raw.js。 分別用於儲存壓縮後可用於Chrome的小書籤的腳本,以及ChatGPT生成的原始輸出。

所以,請將連結修改為https://cdn.jsdelivr.net/gh/bigemon/ChatGPT-ToolBox/toolbox-chrome-bookmark.js 即可。 至於為何在之前您仍然可以正常訪問,這可能是由於CDN快取策略或是瀏覽器的暫存所導致的。

關於第二個問題:

如果沒有理解錯誤,您的這段程式碼似乎試圖引入GPT3的計費API。透過將會話中的請求轉發給GPT-3模型,從而實現較低的審查水平的文本生成。 這在理論上確實可以規避目前的會話審查,也是一種常見的生成敏感文本的方式(因為GPT3 API目前沒有引入任何的外部審查)。 但這種做法可能會帶來以下問題:

  1. GPT3的相關模型API在免費額度使用完畢後,需要進行計費。
  2. 這種方式本質上是調用OpenAi的上一代GPT3 API進行一次性對話,所以會出現上下文環境割裂的情形。
  3. 這本質上與其他開源專案直接調用GPT3 API進行問答並沒有區別。因而在重新載入當前會話後,會話上下文無法被ChatGPT記錄,也無法對返回的結果進行進一步的互動擴展(畢竟是轉發給其它API)。

基於以上原因,我認為如果確實要添加該功能,我們可能還需要實現一些額外的工作:

  1. 可能需要以某種方式引入當前ChatGPT的上文,例如使用localstorage一段會話上下文,或是使用JS列舉頁面上的前文,在轉發時一併提供。這或許可以緩解上下文割裂。
  2. 使用不違反用戶準則的方式,將生成的內容提交到當前會話上下文,以便當前會話下的ChatGPT可以了解外部GPT3 API生成的內容。

總體來說,如果希望將這種方式較為完美的融入ChatGPT的會話環境,還需要考慮一些其他的機制。

當然,如果完全不在乎這些限制,只是希望提供一個快捷發送給GPT3 API獲取結果的功能的話。這些缺陷應該不是問題。 但無論如何,用戶應該得到提醒這不是在進行CGPT對話。

如果有更多想法,歡迎進行討論。

bigemon commented 1 year ago

一個好消息是:OpenAI已在近日發佈了最新的GPT3.5 API 。 經過測試,在附加上下文的條件下,基本已可以實現預期目的。

接下來的問題,就只剩下如何把3.5的API縫合到免費對話上下文。

astrayntd commented 1 year ago

大大您好,實不相瞞,我也正在關注GPT3.5 API,相信其發佈可能使預期的功能效果得以實行之外,本地客戶端的單鍵也不再是遙不可及的夢想。在下剛好發現以LINE搭建本地客戶端的教學,若按照該網址提供的構建流程,可能可以使該API在微信,QQ搭建本地客戶端,不知能否與您參考。以下是在下找到的連結: https://memochou1993.github.io/gpt-ai-assistant-docs/getting-started.html

希望上述連結的方法能給您參考並提供幫助。謝謝您的閱讀。

astrayntd commented 1 year ago

此外,若要將GPT3.5 API搭建在本地客戶端,則可能會產生風險 本地API對用戶的威脅可能包括以下幾點: 隱私風險:由於API可以訪問用戶的個人資料,如果API的安全措施不夠強大,就可能導致用戶的個人資料外洩,進而引發隱私問題。 安全漏洞:如果API存在安全漏洞,攻擊者可能利用這些漏洞進行攻擊,例如通過API進行DDoS攻擊、注入攻擊、資料竊取等。 資源浪費:如果API被惡意使用,例如刷取數據等,就可能導致系統資源過度消耗,從而影響系統的正常運行。 不當使用:有些應用程式可能不當使用API,例如透過API自動發送垃圾郵件、濫用API獲取大量數據等,這些行為可能對用戶造成不必要的困擾和風險。 因此,開發人員在設計和實現API時,應該重視安全性和可靠性,並遵循相關的法規和標準,以確保用戶的資料和權益得到保護。同時,用戶也需要關注自己的隱私和安全,避免在使用API時遭受威脅和風險。

bigemon commented 1 year ago

此外,若要將GPT3.5 API搭建在本地客戶端,則可能會產生風險 本地API對用戶的威脅可能包括以下幾點: 隱私風險:由於API可以訪問用戶的個人資料,如果API的安全措施不夠強大,就可能導致用戶的個人資料外洩,進而引發隱私問題。 安全漏洞:如果API存在安全漏洞,攻擊者可能利用這些漏洞進行攻擊,例如通過API進行DDoS攻擊、注入攻擊、資料竊取等。 資源浪費:如果API被惡意使用,例如刷取數據等,就可能導致系統資源過度消耗,從而影響系統的正常運行。 不當使用:有些應用程式可能不當使用API,例如透過API自動發送垃圾郵件、濫用API獲取大量數據等,這些行為可能對用戶造成不必要的困擾和風險。 因此,開發人員在設計和實現API時,應該重視安全性和可靠性,並遵循相關的法規和標準,以確保用戶的資料和權益得到保護。同時,用戶也需要關注自己的隱私和安全,避免在使用API時遭受威脅和風險。

這個是CGPT自己回答的吧 :) 關於這些提到的問題,由於目前的計劃是只使用JS實現插件主體。 所以應該是不要緊,因為瀏覽器沙箱自己就有對這類執行權限進行限制。

以下是近日進行改寫的測試版NSFW 解限GUI.(基於原repo川虎Chatbot的開源專案) 作為驗證,我認為可以通過類似的方法實現插件的改造(不過最近真的好忙,可能要等有空)。 https://github.com/bigemon/ChuanhuChatGPT

bigemon commented 1 year ago

更新:抽了6个小时生成了一版新的,已接入

GPT3.5混合接入(beta)

1


需要注意的是,目前沒有找到好辦法將API回執數據插入會話上下文。 暫時使用的是把結果以“聊天記錄”的形式騙它看完。 因此這個版本目前並不適合進行沉浸式對話(也就是所謂的催眠啦)。

bigemon commented 1 year ago

若有更多想要討論的內容請再次打開此issues即可。