Foi adicionado suporte para o modelo oficial ChatGPT! Agora você pode usar o modelo gpt-3.5-turbo
com a API oficial OpenAI, usando ChatGPTClient
. Este é o mesmo modelo que o ChatGPT usa e é o modelo mais poderoso disponível no momento. O uso deste modelo não é gratuito , no entanto, é 10x mais barato (ao preço de US$ 0,002 por mil tokens) do que text-davinci-003
.
Consulte a postagem da OpenAI, Apresentando APIs ChatGPT e Whisper para obter mais informações.
Para usá-lo, defina O modelo padrão usado no modelOptions.model
como gpt-3.5-turbo
e ChatGPTClient
cuidará do resto.ChatGPTClient
agora é gpt-3.5-turbo
. Você ainda pode definir userLabel
, chatGptLabel
e promptPrefix
(instruções do sistema) normalmente.
Pode haver uma chance maior de sua conta ser banida se você continuar a automatizar o chat.openai.com. Continue fazendo isso por sua própria conta e risco.
Adicionei um ChatGPTBrowserClient
experimental que depende de um servidor proxy reverso que faz uso de um bypass Cloudflare, permitindo que você converse com ChatGPT (chat.openai.com) sem exigir automação do navegador. Tudo que você precisa é do seu token de acesso em https://chat.openai.com/api/auth/session.
Como sempre, observe que se você optar por seguir esse caminho, estará expondo seu token de acesso a um servidor de terceiros de código fechado. Se você estiver preocupado com isso, você pode optar por usar uma conta ChatGPT gratuita para minimizar os riscos ou continuar usando ChatGPTClient
com o modelo text-davinci-003
.
O método que estávamos usando para acessar os modelos subjacentes do ChatGPT foi corrigido, infelizmente. Suas opções agora são usar a API OpenAI oficial com o modelo text-davinci-003
(que custa dinheiro) ou usar uma solução baseada em navegador para fazer interface com o backend do ChatGPT (que é menos poderoso, com taxa mais limitada e é não suportado por esta biblioteca no momento).
Com a ajuda de @PawanOsman, descobrimos uma maneira de continuar usando os modelos subjacentes do ChatGPT . Para evitar a perda de acesso novamente, decidimos fornecer servidores proxy reversos compatíveis com a API OpenAI. Atualizei ChatGPTClient
para oferecer suporte ao uso de um servidor proxy reverso em vez do servidor OpenAI API. Consulte Usando um proxy reverso para obter mais informações sobre os servidores proxy disponíveis e como eles funcionam.
Observe que se você escolher seguir esse caminho, estará expondo seu token de acesso a um servidor de terceiros de código fechado. Se você estiver preocupado com isso, você pode optar por usar uma conta ChatGPT gratuita para minimizar os riscos ou continuar usando a API oficial OpenAI com o modelo text-davinci-003
.
Encontrei um novo modelo de trabalho para text-chat-davinci-002
, text-chat-davinci-002-sh-alpha-aoruigiofdj83
. Este é o modelo subjacente usado pela versão "Turbo" do ChatGPT Plus. As respostas são extremamente rápidas. Atualizei a biblioteca para usar este modelo.
Momento ruim; text-chat-davinci-002-sh-alpha-aoruigiofdj83
foi removido logo depois, possivelmente devido a um novo modelo em algum lugar por aí?
Experimente o poder da versão GPT-4 do ChatGPT do Bing com BingAIClient
(experimental). O servidor API e a CLI ainda precisam ser atualizados para oferecer suporte a isso , mas você pode usar o cliente diretamente agora. Observe que se sua conta ainda estiver na lista de espera, você não poderá usar este cliente.
Embora text-chat-davinci-002-20221122
esteja novamente ativo, parece que está constantemente sobrecarregado e retorna um erro 429. É provável que a OpenAI tenha dedicado apenas uma pequena quantidade de recursos a este modelo para evitar que fosse amplamente utilizado pelo público. Além disso, ouvi dizer que as versões mais recentes agora têm acesso bloqueado para funcionários e parceiros da OpenAI, por isso é improvável que consigamos encontrar soluções alternativas até que o modelo seja lançado oficialmente.
Você pode usar o modelo text-davinci-003
como um substituto imediato. Tenha em mente que text-davinci-003
não é tão bom quanto text-chat-davinci-002
(que é treinado via RHLF e ajustado para ser uma IA de conversação), embora os resultados ainda sejam muito bons na maioria dos casos. Observe que usar text-davinci-003
custará créditos ($).
Adicionarei novamente suporte para ChatGPT baseado em navegador para o servidor API e CLI. Por favor, marque com estrela e observe este repositório para atualizações.
A montanha-russa atingiu a próxima parada. text-chat-davinci-002-20221122
está de volta.
Tentar usar text-chat-davinci-002-20221122
com a API OpenAI agora retorna um erro 404. Você pode usar o modelo text-davinci-003
como um substituto imediato. Tenha em mente que text-davinci-003
não é tão bom quanto text-chat-davinci-002
(que é treinado via RHLF e ajustado para ser uma IA de conversação), embora os resultados ainda sejam muito bons. Observe que usar text-davinci-003
custará créditos ($).
Aguarde mais atualizações enquanto investigamos outras soluções alternativas.
Tentar usar text-chat-davinci-002-20230126
com a API OpenAI agora retorna um erro 404. Alguém já encontrou o nome do novo modelo, mas não está disposto a compartilhar no momento. Atualizarei este repositório assim que encontrar o novo modelo. Se você tiver algum lead, abra um problema ou uma solicitação pull.
Enquanto isso, adicionei suporte para modelos como text-davinci-003
, que você pode usar como substituto imediato. Tenha em mente que text-davinci-003
não é tão bom quanto text-chat-davinci-002
(que é treinado via RHLF e ajustado para ser uma IA de conversação), embora os resultados ainda sejam muito bons. Observe que usar text-davinci-003
custará créditos ($).
O usuário do Discord @pig#8932 encontrou um modelo text-chat-davinci-002
funcional, text-chat-davinci-002-20221122
. Atualizei a biblioteca para usar este modelo.
Uma implementação de cliente para ChatGPT e Bing AI. Disponível como módulo Node.js, servidor REST API e aplicativo CLI.
ChatGPTClient
: suporte para o modelo subjacente oficial do ChatGPT, gpt-3.5-turbo
, por meio da API da OpenAI.keyv-file
também está incluído neste pacote e pode ser usado para armazenar conversas em um arquivo JSON se você estiver usando o servidor API ou CLI (consulte settings.example.js
).text-davinci-003
BingAIClient
: suporte para a versão do ChatGPT do Bing, alimentada por GPT-4.ChatGPTBrowserClient
: suporte para o site oficial ChatGPT, usando um servidor proxy reverso para contornar Cloudflare.npm i @waylaidwanderer/chatgpt-api
Consulte demos/use-bing-client.js
.
Consulte demos/use-client.js
.
Consulte demos/use-browser-client.js
.
Você pode instalar o pacote usando
npm i -g @waylaidwanderer/chatgpt-api
em seguida, execute-o usando chatgpt-api
. Isso usa um parâmetro opcional --settings=<path_to_settings.js>
ou procura settings.js
no diretório atual, se não estiver definido, com o seguinte conteúdo:
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',
} ,
} ;
Alternativamente, você pode instalar e executar o pacote diretamente.
git clone https://github.com/waylaidwanderer/node-chatgpt-api
npm install
(se não estiver usando Docker)settings.example.js
para settings.js
no diretório raiz e altere as configurações quando necessário.npm start
ou npm run server
(se não estiver usando o Docker)docker-compose up
(requer Docker) Inicie ou continue uma conversa. Parâmetros opcionais são necessários apenas para conversas que abrangem diversas solicitações.
Campo | Descrição |
---|---|
mensagem | A mensagem a ser exibida ao usuário. |
ID de conversação | (Opcional) Um ID da conversa que você deseja continuar. |
jailbreakConversationId | (Opcional, apenas para BingAIClient ) Defina como true para iniciar uma conversa no modo jailbreak. Depois disso, este deve ser o ID da conversa de jailbreak (fornecido na resposta como um parâmetro também denominado jailbreakConversationId ). |
parentMessageId | (Opcional, para ChatGPTClient e BingAIClient no modo jailbreak) O ID da mensagem pai (ou seja, response.messageId ) ao continuar uma conversa. |
conversaAssinatura | (Opcional, apenas para BingAIClient ) Uma assinatura para a conversa (fornecida na resposta como um parâmetro também denominado conversationSignature ). Obrigatório ao continuar uma conversa, a menos que esteja no modo jailbreak. |
ID do cliente | (Opcional, apenas para BingAIClient ) O ID do cliente. Obrigatório ao continuar uma conversa, a menos que esteja no modo jailbreak. |
invocaçãoId | (Opcional, apenas para BingAIClient ) O ID da invocação. Obrigatório ao continuar uma conversa, a menos que esteja no modo jailbreak. |
opções do cliente | (Opcional) Um objeto contendo opções para o cliente. |
clientOptions.clientToUse | (Opcional) O cliente a ser usado para esta mensagem. Valores possíveis: chatgpt , chatgpt-browser , bing . |
opções do cliente.* | (Opcional) Quaisquer opções válidas para o cliente. Por exemplo, para ChatGPTClient , você pode definir clientOptions.openaiApiKey para definir uma chave de API apenas para esta mensagem ou clientOptions.promptPrefix para fornecer instruções personalizadas à IA apenas para esta mensagem, etc. |
Para configurar quais opções podem ser alteradas por mensagem (padrão: todas), consulte os comentários para perMessageClientOptionsWhitelist
em settings.example.js
. Para permitir a alteração de clientes, perMessageClientOptionsWhitelist.validClientsToUse
deve ser definido como uma matriz não vazia, conforme descrito no arquivo de configurações de exemplo.
Para iniciar uma conversa com ChatGPT, envie uma solicitação POST para o endpoint /conversation
do servidor com um corpo JSON com parâmetros por Endpoints > POST /conversation acima.
{
"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) " ,
}
O servidor retornará um objeto JSON contendo a resposta do ChatGPT:
// 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"
}
Se a solicitação não for bem-sucedida, o servidor retornará um objeto JSON com uma mensagem de erro.
Se o objeto de solicitação estiver faltando uma propriedade obrigatória (por exemplo, message
):
// HTTP/1.1 400 Bad Request
{
"error" : "The message parameter is required."
}
Se ocorreu um erro ao enviar a mensagem para ChatGPT:
// HTTP/1.1 503 Service Unavailable
{
"error" : "There was an error communicating with ChatGPT."
}
Você pode definir "stream": true
no corpo da solicitação para receber um fluxo de tokens à medida que são gerados.
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
} ) ,
} ;
Consulte demos/use-api-server-streaming.js para ver um exemplo de como receber a resposta conforme ela é gerada. Você receberá um token por vez, portanto precisará concatená-los você mesmo.
Saída bem-sucedida:
{ 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?
Saída de erro:
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
primeiro e usar o método POST
. Siga as mesmas instruções de configuração do servidor API, criando settings.js
.
Se instalado globalmente:
chatgpt-cli
Se instalado localmente:
npm run cli
As respostas do ChatGPT são copiadas automaticamente para sua área de transferência, para que você possa colá-las em outros aplicativos.
Conforme mostrado nos exemplos acima, você pode definir reverseProxyUrl
nas opções de ChatGPTClient
para usar um servidor proxy reverso em vez da API ChatGPT oficial. Por enquanto, esta é a única maneira de usar os modelos subjacentes do ChatGPT . Este método foi corrigido e as instruções abaixo não são mais relevantes, mas você ainda pode querer usar um proxy reverso por outros motivos. Atualmente, servidores proxy reversos ainda são usados para executar um bypass Cloudflare para ChatGPTBrowserClient
.
Como funciona? Resposta simples: ChatGPTClient
> proxy reverso > servidor OpenAI. O servidor proxy reverso faz alguma mágica para acessar o modelo subjacente diretamente por meio do servidor OpenAI e, em seguida, retorna a resposta para ChatGPTClient
.
As instruções são fornecidas abaixo.
accessToken
).reverseProxyUrl
como https://chatgpt.hato.ai/completions
nas opções settings.js > chatGptClient
ou ChatGPTClient
.settings.chatGptClient.openaiApiKey
) para o token de acesso ChatGPT que você obteve na etapa 1.model
como text-davinci-002-render
, text-davinci-002-render-paid
ou text-davinci-002-render-sha
dependendo de quais modelos ChatGPT aos quais sua conta tem acesso. Os modelos devem ser um nome de modelo ChatGPT, não o nome do modelo subjacente, e você não pode usar um modelo ao qual sua conta não tenha acesso.stream: true
(API) ou onProgress
(cliente) como solução alternativa.accessToken
).reverseProxyUrl
como https://chatgpt.pawan.krd/api/completions
nas opções settings.js > chatGptClient
ou ChatGPTClient
.settings.chatGptClient.openaiApiKey
) para o token de acesso ChatGPT que você obteve na etapa 1.model
como text-davinci-002-render
, text-davinci-002-render-paid
ou text-davinci-002-render-sha
dependendo de quais modelos ChatGPT aos quais sua conta tem acesso. Os modelos devem ser um nome de modelo ChatGPT, não o nome do modelo subjacente, e você não pode usar um modelo ao qual sua conta não tenha acesso.stream: true
(API) ou onProgress
(cliente) como solução alternativa. Uma lista de projetos incríveis usando @waylaidwanderer/chatgpt-api
:
Adicione o seu à lista editando este README e criando uma solicitação pull!
Um cliente web para este projeto também está disponível em waylaidwanderer/PandoraAI.
ChatGPTClient
Como gpt-3.5-turbo
é o modelo subjacente do ChatGPT, tive que fazer o meu melhor para replicar a forma como o site oficial do ChatGPT o utiliza. Isso significa que minha implementação ou o modelo subjacente podem não se comportar exatamente da mesma forma em alguns aspectos:
Se você quiser contribuir com este projeto, crie uma solicitação pull com uma descrição detalhada de suas alterações.
Este projeto está licenciado sob a licença MIT.