增加了對官方 ChatGPT 模型的支援!現在您可以使用ChatGPTClient
將gpt-3.5-turbo
模型與官方 OpenAI API 結合使用。這與 ChatGPT 使用的模型相同,並且是目前最強大的模型。該模型的使用不是免費的,但它比text-davinci-003
便宜 10 倍(每 1k 代幣售價 0.002 美元)。
有關更多信息,請參閱 OpenAI 的文章 ChatGPT 和 Whisper API 簡介。
要使用它,請將 modelOptions.model
設定為gpt-3.5-turbo
, ChatGPTClient
將處理其餘部分。ChatGPTClient
中使用的預設模型現在是gpt-3.5-turbo
。您仍然可以照常設定userLabel
、 chatGptLabel
和promptPrefix
(系統指令)。
如果您繼續自動化 chat.openai.com,您的帳戶被禁止的可能性可能會更高。繼續這樣做需要您自擔風險。
我新增了一個實驗性的ChatGPTBrowserClient
,它依賴於利用 Cloudflare 旁路的反向代理伺服器,允許您與 ChatGPT (chat.openai.com) 對話,而無需瀏覽器自動化。您所需要的只是來自 https://chat.openai.com/api/auth/session 的存取權杖。
與往常一樣,請注意,如果您選擇採用此路線,則會將您的存取權杖暴露給閉源第三方伺服器。如果您擔心這一點,您可以選擇使用免費的 ChatGPT 帳戶來最大程度地降低風險,或者繼續使用ChatGPTClient
代替text-davinci-003
模型。
不幸的是,我們用來存取 ChatGPT 底層模型的方法已被修補。您現在的選擇是使用具有text-davinci-003
模型的官方 OpenAI API(需要花錢),或者使用基於瀏覽器的解決方案與 ChatGPT 的後端交互(功能較弱,速率受限,並且目前該庫不支援)。
在 @PawanOsman 的幫助下,我們找到了繼續使用 ChatGPT 底層模型的方法。為了避免再次失去存取權限,我們決定提供與 OpenAI API 相容的反向代理伺服器。我已更新ChatGPTClient
以支援使用反向代理伺服器而不是 OpenAI API 伺服器。有關可用代理伺服器及其工作原理的更多信息,請參閱使用反向代理。
請注意,如果您選擇此路線,則會將您的存取權杖暴露給閉源第三方伺服器。如果您擔心這一點,您可以選擇使用免費的 ChatGPT 帳戶來最大程度地降低風險,或者繼續使用官方 OpenAI API 而不是text-davinci-003
模型。
我找到了text-chat-davinci-002
、 text-chat-davinci-002-sh-alpha-aoruigiofdj83
的新工作模型。這是 ChatGPT Plus“Turbo”版本使用的底層模型。響應速度非常快。我已經更新了庫以使用此模型。
時機不好; text-chat-davinci-002-sh-alpha-aoruigiofdj83
不久後被刪除,可能是由於某個地方出現了新模型?
透過BingAIClient
(實驗性)體驗 Bing 的 GPT-4 版本 ChatGPT 的強大功能。 API 伺服器和CLI 仍需要更新以支援此功能,但您現在可以直接使用用戶端。請注意,如果您的帳戶仍在等待名單中,您將無法使用該客戶端。
儘管text-chat-davinci-002-20221122
再次恢復,但它似乎不斷超載並返回 429 錯誤。 OpenAI 很可能只為該模型投入了少量資源,以防止其被公眾廣泛使用。此外,我聽說較新的版本現在對 OpenAI 員工和合作夥伴進行了存取鎖定,因此在模型正式發布之前我們不太可能找到任何解決方法。
您可以使用text-davinci-003
模型作為直接替代品。請記住, text-davinci-003
不如text-chat-davinci-002
(透過 RHLF 訓練並微調為對話式 AI),儘管在大多數情況下結果仍然相當不錯。請注意,使用text-davinci-003
會消耗您的積分 ($)。
我將為 API 伺服器和 CLI 重新新增對基於瀏覽器的 ChatGPT 的支援。請加註星標並關注此儲存庫的更新。
過山車已到達下一站。 text-chat-davinci-002-20221122
再次恢復。
嘗試將text-chat-davinci-002-20221122
與 OpenAI API 結合使用現在會傳回 404 錯誤。您可以使用text-davinci-003
模型作為直接替代品。請記住, text-davinci-003
不如text-chat-davinci-002
(透過 RHLF 訓練並微調為對話式 AI),但結果仍然非常好。請注意,使用text-davinci-003
會消耗您的積分 ($)。
當我們調查進一步的解決方法時,請等待進一步的更新。
嘗試將text-chat-davinci-002-20230126
與 OpenAI API 結合使用現在會傳回 404 錯誤。有人已經找到了新的型號名稱,但目前不願意分享。一旦找到新模型,我將更新此存儲庫。如果您有任何線索,請提出問題或拉取請求。
同時,我添加了對text-davinci-003
等模型的支持,您可以將其用作直接替代品。請記住, text-davinci-003
不如text-chat-davinci-002
(透過 RHLF 訓練並微調為對話式 AI),但結果仍然非常好。請注意,使用text-davinci-003
會消耗您的積分 ($)。
Discord 使用者 @pig#8932 找到了一個有效的text-chat-davinci-002
模型, text-chat-davinci-002-20221122
。我已經更新了庫以使用此模型。
ChatGPT 和 Bing AI 的客戶實作。可用作 Node.js 模組、REST API 伺服器和 CLI 應用程式。
ChatGPTClient
:透過 OpenAI 的 API 支援官方 ChatGPT 底層模型gpt-3.5-turbo
。keyv-file
適配器也包含在此套件中,如果您使用 API 伺服器或 CLI(請參閱settings.example.js
),則可用於將對話儲存在 JSON 檔案中。text-davinci-003
等模型的支持BingAIClient
:支援 Bing 版本的 ChatGPT,由 GPT-4 提供支援。ChatGPTBrowserClient
:支援 ChatGPT 官方網站,使用反向代理伺服器繞過 Cloudflare。npm i @waylaidwanderer/chatgpt-api
請參閱demos/use-bing-client.js
。
請參閱demos/use-client.js
。
請參閱demos/use-browser-client.js
。
您可以使用安裝該套件
npm i -g @waylaidwanderer/chatgpt-api
然後使用chatgpt-api
運行它。這需要一個可選的--settings=<path_to_settings.js>
參數,或在目前目錄中尋找settings.js
(如果未設定),其中包含以下內容:
module . exports = {
// Options for the Keyv cache, see https://www.npmjs.com/package/keyv.
// This is used for storing conversations, and supports additional drivers (conversations are stored in memory by default).
// Only necessary when using `ChatGPTClient`, or `BingAIClient` in jailbreak mode.
cacheOptions : { } ,
// If set, `ChatGPTClient` and `BingAIClient` will use `keyv-file` to store conversations to this JSON file instead of in memory.
// However, `cacheOptions.store` will override this if set
storageFilePath : process . env . STORAGE_FILE_PATH || './cache.json' ,
chatGptClient : {
// Your OpenAI API key (for `ChatGPTClient`)
openaiApiKey : process . env . OPENAI_API_KEY || '' ,
// (Optional) Support for a reverse proxy for the completions endpoint (private API server).
// Warning: This will expose your `openaiApiKey` to a third party. Consider the risks before using this.
// reverseProxyUrl: 'https://chatgpt.hato.ai/completions',
// (Optional) Parameters as described in https://platform.openai.com/docs/api-reference/completions
modelOptions : {
// You can override the model name and any other parameters here.
// The default model is `gpt-3.5-turbo`.
model : 'gpt-3.5-turbo' ,
// Set max_tokens here to override the default max_tokens of 1000 for the completion.
// max_tokens: 1000,
} ,
// (Optional) Davinci models have a max context length of 4097 tokens, but you may need to change this for other models.
// maxContextTokens: 4097,
// (Optional) You might want to lower this to save money if using a paid model like `text-davinci-003`.
// Earlier messages will be dropped until the prompt is within the limit.
// maxPromptTokens: 3097,
// (Optional) Set custom instructions instead of "You are ChatGPT...".
// (Optional) Set a custom name for the user
// userLabel: 'User',
// (Optional) Set a custom name for ChatGPT ("ChatGPT" by default)
// chatGptLabel: 'Bob',
// promptPrefix: 'You are Bob, a cowboy in Western times...',
// A proxy string like "http://<ip>:<port>"
proxy : '' ,
// (Optional) Set to true to enable `console.debug()` logging
debug : false ,
} ,
// Options for the Bing client
bingAiClient : {
// Necessary for some people in different countries, e.g. China (https://cn.bing.com)
host : '' ,
// The "_U" cookie value from bing.com
userToken : '' ,
// If the above doesn't work, provide all your cookies as a string instead
cookies : '' ,
// A proxy string like "http://<ip>:<port>"
proxy : '' ,
// (Optional) Set to true to enable `console.debug()` logging
debug : false ,
} ,
chatGptBrowserClient : {
// (Optional) Support for a reverse proxy for the conversation endpoint (private API server).
// Warning: This will expose your access token to a third party. Consider the risks before using this.
reverseProxyUrl : 'https://bypass.churchless.tech/api/conversation' ,
// Access token from https://chat.openai.com/api/auth/session
accessToken : '' ,
// Cookies from chat.openai.com (likely not required if using reverse proxy server).
cookies : '' ,
// A proxy string like "http://<ip>:<port>"
proxy : '' ,
// (Optional) Set to true to enable `console.debug()` logging
debug : false ,
} ,
// Options for the API server
apiOptions : {
port : process . env . API_PORT || 3000 ,
host : process . env . API_HOST || 'localhost' ,
// (Optional) Set to true to enable `console.debug()` logging
debug : false ,
// (Optional) Possible options: "chatgpt", "chatgpt-browser", "bing". (Default: "chatgpt")
clientToUse : 'chatgpt' ,
// (Optional) Generate titles for each conversation for clients that support it (only ChatGPTClient for now).
// This will be returned as a `title` property in the first response of the conversation.
generateTitles : false ,
// (Optional) Set this to allow changing the client or client options in POST /conversation.
// To disable, set to `null`.
perMessageClientOptionsWhitelist : {
// The ability to switch clients using `clientOptions.clientToUse` will be disabled if `validClientsToUse` is not set.
// To allow switching clients per message, you must set `validClientsToUse` to a non-empty array.
validClientsToUse : [ 'bing' , 'chatgpt' , 'chatgpt-browser' ] , // values from possible `clientToUse` options above
// The Object key, e.g. "chatgpt", is a value from `validClientsToUse`.
// If not set, ALL options will be ALLOWED to be changed. For example, `bing` is not defined in `perMessageClientOptionsWhitelist` above,
// so all options for `bingAiClient` will be allowed to be changed.
// If set, ONLY the options listed here will be allowed to be changed.
// In this example, each array element is a string representing a property in `chatGptClient` above.
chatgpt : [
'promptPrefix' ,
'userLabel' ,
'chatGptLabel' ,
// Setting `modelOptions.temperature` here will allow changing ONLY the temperature.
// Other options like `modelOptions.model` will not be allowed to be changed.
// If you want to allow changing all `modelOptions`, define `modelOptions` here instead of `modelOptions.temperature`.
'modelOptions.temperature' ,
] ,
} ,
} ,
// Options for the CLI app
cliOptions : {
// (Optional) Possible options: "chatgpt", "bing".
// clientToUse: 'bing',
} ,
} ;
或者,您可以直接安裝並執行該套件。
git clone https://github.com/waylaidwanderer/node-chatgpt-api
npm install
安裝依賴項(如果不使用 Docker)settings.example.js
重新命名為settings.js
並根據需要變更設定。npm start
或npm run server
(如果不使用 Docker)docker-compose up
(需要 Docker) 開始或繼續對話。可選參數僅對於跨越多個請求的對話是必需的。
場地 | 描述 |
---|---|
訊息 | 要顯示給使用者的消息。 |
對話ID | (可選)您想要繼續的對話的 ID。 |
越獄會話ID | (可選,僅適用於BingAIClient )設定為true 以在越獄模式下啟動對話。之後,這應該是越獄對話的 ID(在回應中作為參數給出,也名為jailbreakConversationId )。 |
父訊息ID | (可選,對於越獄模式下的ChatGPTClient 和BingAIClient )繼續對話時父訊息的 ID(即response.messageId )。 |
對話簽名 | (可選,僅適用於BingAIClient )對話的簽章(在回應中作為參數給出,也名為conversationSignature )。除非在越獄模式下,否則繼續對話時需要。 |
客戶端ID | (可選,僅適用於BingAIClient )客戶端的 ID。除非在越獄模式下,否則繼續對話時需要。 |
呼叫ID | (可選,僅適用於BingAIClient )呼叫的 ID。除非在越獄模式下,否則繼續對話時需要。 |
客戶端選項 | (可選)包含客戶端選項的物件。 |
clientOptions.clientToUse | (可選)用於此訊息的用戶端。可能的值: chatgpt 、 chatgpt-browser 、 bing 。 |
客戶端選項。 | (可選)客戶端的任何有效選項。例如,對於ChatGPTClient ,您可以設定clientOptions.openaiApiKey 僅為此訊息設定 API 金鑰,或clientOptions.promptPrefix 僅為該訊息提供 AI 自訂指令等。 |
若要配置每個訊息可以更改哪些選項(預設:全部),請參閱settings.example.js
中perMessageClientOptionsWhitelist
的註解。若要允許變更客戶端,必須將perMessageClientOptionsWhitelist.validClientsToUse
設定為非空數組,如範例設定檔中所述。
若要啟動與 ChatGPT 的對話,請將 POST 請求傳送到伺服器的/conversation
端點,其中包含 JSON 正文,其中包含上面每個端點> POST /conversation 的參數。
{
"message" : " Hello, how are you today? " ,
"conversationId" : " your-conversation-id (optional) " ,
"parentMessageId" : " your-parent-message-id (optional, for `ChatGPTClient` only) " ,
"conversationSignature" : " your-conversation-signature (optional, for `BingAIClient` only) " ,
"clientId" : " your-client-id (optional, for `BingAIClient` only) " ,
"invocationId" : " your-invocation-id (optional, for `BingAIClient` only) " ,
}
伺服器將傳回一個包含 ChatGPT 回應的 JSON 物件:
// HTTP/1.1 200 OK
{
"response" : "I'm doing well, thank you! How are you?" ,
"conversationId" : "your-conversation-id" ,
"messageId" : "response-message-id (for `ChatGPTClient` only)" ,
"conversationSignature" : "your-conversation-signature (for `BingAIClient` only)" ,
"clientId" : "your-client-id (for `BingAIClient` only)" ,
"invocationId" : "your-invocation-id (for `BingAIClient` only - pass this new value back into subsequent requests as-is)" ,
"details" : "an object containing the raw response from the client"
}
如果請求不成功,伺服器將傳回一個帶有錯誤訊息的 JSON 物件。
如果請求物件缺少必需的屬性(例如message
):
// HTTP/1.1 400 Bad Request
{
"error" : "The message parameter is required."
}
如果將訊息傳送到 ChatGPT 時發生錯誤:
// HTTP/1.1 503 Service Unavailable
{
"error" : "There was an error communicating with ChatGPT."
}
您可以在請求內文中設定"stream": true
以接收產生的令牌流。
import { fetchEventSource } from '@waylaidwanderer/fetch-event-source' ; // use `@microsoft/fetch-event-source` instead if in a browser environment
const opts = {
method : 'POST' ,
headers : {
'Content-Type' : 'application/json' ,
} ,
body : JSON . stringify ( {
"message" : "Write a poem about cats." ,
"conversationId" : "your-conversation-id (optional)" ,
"parentMessageId" : "your-parent-message-id (optional)" ,
"stream" : true ,
// Any other parameters per `Endpoints > POST /conversation` above
} ) ,
} ;
有關如何接收產生的回應的範例,請參閱 demos/use-api-server-streaming.js。您一次將收到一個令牌,因此您需要自行將它們連接起來。
成功輸出:
{ data : '' , event : '' , id : '' , retry : 3000 }
{ data : 'Hello' , event : '' , id : '' , retry : undefined }
{ data : '!' , event : '' , id : '' , retry : undefined }
{ data : ' How' , event : '' , id : '' , retry : undefined }
{ data : ' can' , event : '' , id : '' , retry : undefined }
{ data : ' I' , event : '' , id : '' , retry : undefined }
{ data : ' help' , event : '' , id : '' , retry : undefined }
{ data : ' you' , event : '' , id : '' , retry : undefined }
{ data : ' today' , event : '' , id : '' , retry : undefined }
{ data : '?' , event : '' , id : '' , retry : undefined }
{ data : '<result JSON here, see Method 1>' , event : 'result' , id : '' , retry : undefined }
{ data : '[DONE]' , event : '' , id : '' , retry : undefined }
// Hello! How can I help you today?
錯誤輸出:
const message = {
data : '{"code":503,"error":"There was an error communicating with ChatGPT."}' ,
event : 'error' ,
id : '' ,
retry : undefined
} ;
if ( message . event === 'error' ) {
console . error ( JSON . parse ( message . data ) . error ) ; // There was an error communicating with ChatGPT.
}
fetch-event-source
並使用POST
方法。依照 API 伺服器的相同設定說明進行操作,建立settings.js
。
如果全域安裝:
chatgpt-cli
如果本地安裝:
npm run cli
ChatGPT 的回應會自動複製到您的剪貼簿,以便您可以將它們貼到其他應用程式中。
如上面的範例所示,您可以在ChatGPTClient
的選項中設定reverseProxyUrl
以使用反向代理伺服器而不是官方ChatGPT API。目前,這是使用 ChatGPT 底層模型的唯一方法。此方法已修補,以下的說明不再相關,但您可能仍出於其他原因想要使用反向代理。目前,反向代理伺服器仍用於對ChatGPTBrowserClient
執行 Cloudflare 繞過。
它是如何運作的?簡單答案: ChatGPTClient
> 反向代理 > OpenAI 伺服器。反向代理伺服器在後台做了一些魔法,透過 OpenAI 的伺服器直接存取底層模型,然後將回應傳回給ChatGPTClient
。
下面提供了說明。
accessToken
屬性)。settings.js > chatGptClient
或ChatGPTClient
的選項中將reverseProxyUrl
設定為https://chatgpt.hato.ai/completions
。settings.chatGptClient.openaiApiKey
)設定為您在步驟 1 中獲得的 ChatGPT 存取權杖。model
設定為text-davinci-002-render
、 text-davinci-002-render-paid
或text-davinci-002-render-sha
,取決於您的帳戶有權存取的 ChatGPT 模型。模型必須是 ChatGPT 模型名稱,而不是基礎模型名稱,而且您不能使用您的帳戶無權存取的模型。stream: true
(API) 或onProgress
(客戶端) 作為解決方法。accessToken
屬性)。settings.js > chatGptClient
或ChatGPTClient
的選項中將reverseProxyUrl
設定為https://chatgpt.pawan.krd/api/completions
。settings.chatGptClient.openaiApiKey
)設定為您在步驟 1 中獲得的 ChatGPT 存取權杖。model
設定為text-davinci-002-render
、 text-davinci-002-render-paid
或text-davinci-002-render-sha
,取決於您的帳戶有權存取的 ChatGPT 模型。模型必須是 ChatGPT 模型名稱,而不是基礎模型名稱,而且您不能使用您的帳戶無權存取的模型。stream: true
(API) 或onProgress
(客戶端) 作為解決方法。使用@waylaidwanderer/chatgpt-api
的精彩項目清單:
透過編輯此自述文件並建立拉取請求將您的添加到清單中!
該專案的網路用戶端也可以在 waylaidwanderer/PandoraAI 上找到。
ChatGPTClient
由於gpt-3.5-turbo
是 ChatGPT 的底層模型,因此我必須盡力複製 ChatGPT 官方網站使用它的方式。這意味著我的實作或底層模型在某些方面可能表現不完全相同:
如果您想為此專案做出貢獻,請建立拉取請求並詳細描述您的變更。
該專案根據 MIT 許可證獲得許可。