공식 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의 ChatGPT GPT-4 버전의 성능을 경험해 보세요. 이를 지원하려면 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 웹사이트를 지원합니다.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 사용자 지정 지침을 제공할 수 있습니다. |
메시지별로 변경할 수 있는 옵션을 구성하려면(기본값: all) settings.example.js
에서 perMessageClientOptionsWhitelist
에 대한 설명을 참조하세요. 클라이언트 변경을 허용하려면 예제 설정 파일에 설명된 대로 perMessageClientOptionsWhitelist.validClientsToUse
를 비어 있지 않은 배열로 설정해야 합니다.
ChatGPT로 대화를 시작하려면 위의 엔드포인트 > POST /conversation 에 따른 매개변수가 포함된 JSON 본문을 사용하여 서버의 /conversation
엔드포인트에 POST 요청을 보냅니다.
{
"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
} ) ,
} ;
생성된 응답을 수신하는 방법에 대한 예는 데모/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의 응답은 자동으로 클립보드에 복사되므로 다른 애플리케이션에 붙여넣을 수 있습니다.
위의 예에서 볼 수 있듯이 공식 ChatGPT API 대신 역방향 프록시 서버를 사용하도록 ChatGPTClient
옵션에서 reverseProxyUrl
설정할 수 있습니다. 현재로서는 이것이 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를 편집하고 끌어오기 요청을 작성하여 목록에 귀하의 항목을 추가하세요!
이 프로젝트의 웹 클라이언트는 waylaidwanderer/PandoraAI에서도 사용할 수 있습니다.
ChatGPTClient
관련 gpt-3.5-turbo
ChatGPT의 기본 모델이므로 공식 ChatGPT 웹사이트에서 사용하는 방식을 복제하기 위해 최선을 다해야 했습니다. 이는 내 구현이나 기본 모델이 어떤 면에서 정확히 동일하게 동작하지 않을 수 있음을 의미합니다.
이 프로젝트에 기여하고 싶다면 변경 사항에 대한 자세한 설명이 포함된 풀 요청을 작성하세요.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.