公式 ChatGPT モデルのサポートが追加されました。 ChatGPTClient
を使用して、公式 OpenAI API でgpt-3.5-turbo
モデルを使用できるようになりました。これは ChatGPT が使用しているのと同じモデルであり、現在利用可能な最も強力なモデルです。このモデルの使用は無料ではありませんが、 text-davinci-003
よりも10 倍安価です (1,000 トークンあたり $0.002 の価格)。
詳細については、OpenAI の投稿「ChatGPT および Whisper API の紹介」を参照してください。
これを使用するには、 modelOptions.model
gpt-3.5-turbo
に設定すると、 ChatGPTClient
残りの部分を処理します。ChatGPTClient
で使用されるデフォルトのモデルはgpt-3.5-turbo
になりました。 userLabel
、 chatGptLabel
、およびpromptPrefix
(システム命令) を通常どおり設定できます。
chat.openai.com の自動化を続けると、アカウントが禁止される可能性が高くなります。自己責任で続行してください。
Cloudflare バイパスを利用するリバース プロキシ サーバーに依存する実験的なChatGPTBrowserClient
を追加しました。これにより、ブラウザーの自動化を必要とせずに ChatGPT (chat.openai.com) と通信できるようになります。必要なのは、https://chat.openai.com/api/auth/session からのアクセス トークンだけです。
いつものように、このルートを選択すると、アクセス トークンがクローズド ソースのサードパーティ サーバーに公開されることに注意してください。これが心配な場合は、リスクを最小限に抑えるために無料の ChatGPT アカウントを使用するか、代わりにtext-davinci-003
モデルでChatGPTClient
使用し続けることを選択できます。
残念ながら、ChatGPT の基礎となるモデルにアクセスするために使用していたメソッドにはパッチが適用されました。現時点での選択肢は、 text-davinci-003
モデルで公式の OpenAI API を使用するか (コストがかかります)、ブラウザベースのソリューションを使用して ChatGPT のバックエンドと接続するか (これは強力ではなく、レート制限があり、現時点ではこのライブラリではサポートされていません)。
@PawanOsman の助けを借りて、 ChatGPT の基礎となるモデルを引き続き使用する方法を見つけました。再びアクセスできなくなることを防ぐために、OpenAI API と互換性のあるリバース プロキシ サーバーを提供することにしました。 OpenAI API サーバーの代わりにリバース プロキシ サーバーの使用をサポートするようにChatGPTClient
更新しました。利用可能なプロキシ サーバーとその動作の詳細については、「リバース プロキシの使用」を参照してください。
この方法を選択すると、アクセス トークンがクローズド ソースのサードパーティ サーバーに公開されることに注意してください。これが心配な場合は、リスクを最小限に抑えるために無料の ChatGPT アカウントを使用するか、代わりにtext-davinci-003
モデルで公式の OpenAI API を引き続き使用することを選択できます。
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
が再び復活しました。
OpenAI API でtext-chat-davinci-002-20221122
使用しようとすると、404 エラーが返されるようになりました。代わりにtext-davinci-003
モデルをドロップイン代替品として使用できます。 text-davinci-003
text-chat-davinci-002
(RHLF 経由でトレーニングされ、会話型 AI になるように微調整されている) ほど良くはないものの、結果は依然として非常に良好であることに留意してください。 text-davinci-003
を使用すると、クレジット ($) がかかることに注意してください。
さらなる回避策を調査するため、さらなる更新をお待ちください。
OpenAI API でtext-chat-davinci-002-20230126
使用しようとすると、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 を使用している場合は、会話を JSON ファイルに保存するために使用できます ( settings.example.js
を参照)。text-davinci-003
のようなモデルのサポートを維持BingAIClient
: GPT-4 を利用した Bing バージョンの ChatGPT のサポート。ChatGPTBrowserClient
: Cloudflare バイパスにリバース プロキシ サーバーを使用する、公式 ChatGPT Web サイトのサポート。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 。 |
clientOptions.* | (オプション) クライアントの有効なオプション。たとえば、 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 を参照してください。一度に 1 つのトークンを受け取るため、それらを自分で連結する必要があります。
成功した出力:
{ 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 モデル名である必要があります。アカウントがアクセス権を持たないモデルは使用できません。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 モデル名である必要があります。アカウントがアクセス権を持たないモデルは使用できません。stream: true
(API) またはonProgress
(クライアント) を使用します。@waylaidwanderer/chatgpt-api
を使用した素晴らしいプロジェクトのリスト:
この README を編集してプル リクエストを作成し、リストに追加してください。
このプロジェクトの Web クライアントは、waylaidwanderer/PandoraAI でも入手できます。
ChatGPTClient
についてgpt-3.5-turbo
ChatGPT の基礎モデルであるため、ChatGPT の公式 Web サイトでの使用方法を再現するために最善を尽くす必要がありました。これは、実装または基礎となるモデルがいくつかの点でまったく同じ動作をしない可能性があることを意味します。
このプロジェクトに貢献したい場合は、変更の詳細な説明を記載したプル リクエストを作成してください。
このプロジェクトは MIT ライセンスに基づいてライセンスされています。