¡Se ha agregado soporte para el modelo oficial ChatGPT! Ahora puedes usar el modelo gpt-3.5-turbo
con la API oficial de OpenAI, usando ChatGPTClient
. Este es el mismo modelo que utiliza ChatGPT y es el modelo más potente disponible en este momento. El uso de este modelo no es gratuito , sin embargo, es 10 veces más barato (con un precio de 0,002 dólares por 1.000 tokens) que text-davinci-003
.
Consulte la publicación de OpenAI, Presentación de las API ChatGPT y Whisper para obtener más información.
Para usarlo, configure El modelo predeterminado utilizado en modelOptions.model
en gpt-3.5-turbo
y ChatGPTClient
se encargará del resto.ChatGPTClient
ahora es gpt-3.5-turbo
. Aún puedes configurar userLabel
, chatGptLabel
y promptPrefix
(instrucciones del sistema) como de costumbre.
Puede haber una mayor probabilidad de que su cuenta sea prohibida si continúa automatizando chat.openai.com. Continúe haciéndolo bajo su propio riesgo.
Agregué un ChatGPTBrowserClient
experimental que depende de un servidor proxy inverso que utiliza una derivación de Cloudflare, lo que le permite hablar con ChatGPT (chat.openai.com) sin necesidad de automatización del navegador. Todo lo que necesitas es tu token de acceso de https://chat.openai.com/api/auth/session.
Como siempre, tenga en cuenta que si elige seguir esta ruta, estará exponiendo su token de acceso a un servidor de terceros de código cerrado. Si esto le preocupa, puede optar por utilizar una cuenta ChatGPT gratuita para minimizar los riesgos o continuar usando ChatGPTClient
con el modelo text-davinci-003
.
Desafortunadamente, el método que estábamos usando para acceder a los modelos subyacentes de ChatGPT ha sido parcheado. Sus opciones en este momento son usar la API oficial de OpenAI con el modelo text-davinci-003
(que cuesta dinero) o usar una solución basada en navegador para interactuar con el backend de ChatGPT (que es menos potente, tiene una velocidad más limitada y es no es compatible con esta biblioteca en este momento).
Con la ayuda de @PawanOsman, hemos descubierto una manera de continuar usando los modelos subyacentes de ChatGPT . Con suerte, para evitar perder el acceso nuevamente, hemos decidido proporcionar servidores proxy inversos compatibles con la API de OpenAI. Actualicé ChatGPTClient
para admitir el uso de un servidor proxy inverso en lugar del servidor API OpenAI. Consulte Uso de un proxy inverso para obtener más información sobre los servidores proxy disponibles y cómo funcionan.
Tenga en cuenta que si elige seguir esta ruta, estará exponiendo su token de acceso a un servidor de terceros de código cerrado. Si esto le preocupa, puede optar por utilizar una cuenta ChatGPT gratuita para minimizar los riesgos o continuar utilizando la API oficial de OpenAI con el modelo text-davinci-003
.
Encontré un nuevo modelo de trabajo para text-chat-davinci-002
, text-chat-davinci-002-sh-alpha-aoruigiofdj83
. Este es el modelo subyacente que utiliza la versión "Turbo" de ChatGPT Plus. Las respuestas son increíblemente rápidas. Actualicé la biblioteca para usar este modelo.
Mal momento; text-chat-davinci-002-sh-alpha-aoruigiofdj83
se eliminó poco después, ¿posiblemente debido a un nuevo modelo en algún lugar?
Experimente el poder de la versión GPT-4 de ChatGPT de Bing con BingAIClient
(experimental). El servidor API y la CLI aún deben actualizarse para admitir esto , pero puede usar el cliente directamente ahora mismo. Tenga en cuenta que si su cuenta todavía está en la lista de espera, no podrá utilizar este cliente.
Aunque text-chat-davinci-002-20221122
vuelve a funcionar, parece que está constantemente sobrecargado y devuelve un error 429. Es probable que OpenAI solo haya dedicado una pequeña cantidad de recursos a este modelo para evitar que el público lo utilice ampliamente. Además, escuché que las versiones más nuevas ahora tienen acceso bloqueado para los empleados y socios de OpenAI, por lo que es poco probable que podamos encontrar soluciones hasta que el modelo se lance oficialmente.
Puede utilizar el modelo text-davinci-003
como reemplazo directo. Tenga en cuenta que text-davinci-003
no es tan bueno como text-chat-davinci-002
(que está entrenado mediante RHLF y ajustado para ser una IA conversacional), aunque los resultados siguen siendo bastante buenos en la mayoría de los casos. Tenga en cuenta que usar text-davinci-003
le costará créditos ($).
Volveré a agregar soporte para ChatGPT basado en navegador para el servidor API y CLI. Destaque y observe este repositorio para obtener actualizaciones.
La montaña rusa ha llegado a la siguiente parada. text-chat-davinci-002-20221122
ha vuelto a funcionar.
Intentar utilizar text-chat-davinci-002-20221122
con la API OpenAI ahora arroja un error 404. Puede utilizar el modelo text-davinci-003
como reemplazo directo. Tenga en cuenta que text-davinci-003
no es tan bueno como text-chat-davinci-002
(que está entrenado mediante RHLF y ajustado para ser una IA conversacional), aunque los resultados siguen siendo muy buenos. Tenga en cuenta que usar text-davinci-003
le costará créditos ($).
Espere para recibir más actualizaciones mientras investigamos más soluciones.
Intentar utilizar text-chat-davinci-002-20230126
con la API OpenAI ahora arroja un error 404. Alguien ya encontró el nombre del nuevo modelo, pero no está dispuesto a compartirlo en este momento. Actualizaré este repositorio una vez que encuentre el nuevo modelo. Si tiene alguna pista, abra un problema o una solicitud de extracción.
Mientras tanto, agregué soporte para modelos como text-davinci-003
, que puedes usar como reemplazo directo. Tenga en cuenta que text-davinci-003
no es tan bueno como text-chat-davinci-002
(que está entrenado mediante RHLF y ajustado para ser una IA conversacional), aunque los resultados siguen siendo muy buenos. Tenga en cuenta que usar text-davinci-003
le costará créditos ($).
El usuario de Discord @pig#8932 ha encontrado un modelo text-chat-davinci-002
que funciona, text-chat-davinci-002-20221122
. Actualicé la biblioteca para usar este modelo.
Una implementación de cliente para ChatGPT y Bing AI. Disponible como módulo Node.js, servidor API REST y aplicación CLI.
ChatGPTClient
: soporte para el modelo subyacente oficial de ChatGPT, gpt-3.5-turbo
, a través de la API de OpenAI.keyv-file
también se incluye en este paquete y se puede usar para almacenar conversaciones en un archivo JSON si usa el servidor API o CLI (consulte settings.example.js
).text-davinci-003
BingAIClient
: soporte para la versión de ChatGPT de Bing, impulsada por GPT-4.ChatGPTBrowserClient
: soporte para el sitio web oficial de ChatGPT, utilizando un servidor proxy inverso para evitar Cloudflare.npm i @waylaidwanderer/chatgpt-api
Consulte demos/use-bing-client.js
.
Consulte demos/use-client.js
.
Consulte demos/use-browser-client.js
.
Puede instalar el paquete usando
npm i -g @waylaidwanderer/chatgpt-api
luego ejecútelo usando chatgpt-api
. Esto requiere un parámetro opcional --settings=<path_to_settings.js>
, o busca settings.js
en el directorio actual si no está configurado, con el siguiente contenido:
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, puede instalar y ejecutar el paquete directamente.
git clone https://github.com/waylaidwanderer/node-chatgpt-api
npm install
(si no usa Docker)settings.example.js
a settings.js
en el directorio raíz y cambie la configuración cuando sea necesario.npm start
o npm run server
(si no usa Docker)docker-compose up
(requiere Docker) Iniciar o continuar una conversación. Los parámetros opcionales solo son necesarios para conversaciones que abarcan múltiples solicitudes.
Campo | Descripción |
---|---|
mensaje | El mensaje que se mostrará al usuario. |
ID de conversación | (Opcional) Una identificación para la conversación que desea continuar. |
jailbreakConversationId | (Opcional, solo para BingAIClient ) Configúrelo en true para iniciar una conversación en modo jailbreak. Después de eso, este debería ser el ID de la conversación de jailbreak (que se proporciona en la respuesta como un parámetro también llamado jailbreakConversationId ). |
padreMessageId | (Opcional, para ChatGPTClient y BingAIClient en modo jailbreak) El ID del mensaje principal (es decir, response.messageId ) al continuar una conversación. |
conversaciónFirma | (Opcional, solo para BingAIClient ) Una firma para la conversación (que se proporciona en la respuesta como un parámetro también denominado conversationSignature ). Requerido al continuar una conversación a menos que esté en modo jailbreak. |
ID de cliente | (Opcional, solo para BingAIClient ) El ID del cliente. Requerido al continuar una conversación a menos que esté en modo jailbreak. |
ID de invocación | (Opcional, solo para BingAIClient ) El ID de la invocación. Requerido al continuar una conversación a menos que esté en modo jailbreak. |
opciones de cliente | (Opcional) Un objeto que contiene opciones para el cliente. |
clientOptions.clientToUse | (Opcional) El cliente que se utilizará para este mensaje. Valores posibles: chatgpt , chatgpt-browser , bing . |
Opciones de cliente.* | (Opcional) Cualquier opción válida para el cliente. Por ejemplo, para ChatGPTClient , puede configurar clientOptions.openaiApiKey para establecer una clave API solo para este mensaje, o clientOptions.promptPrefix para brindarle a la IA instrucciones personalizadas solo para este mensaje, etc. |
Para configurar qué opciones se pueden cambiar por mensaje (predeterminado: todas), consulte los comentarios de perMessageClientOptionsWhitelist
en settings.example.js
. Para permitir el cambio de clientes, perMessageClientOptionsWhitelist.validClientsToUse
debe configurarse en una matriz no vacía como se describe en el archivo de configuración de ejemplo.
Para iniciar una conversación con ChatGPT, envíe una solicitud POST al punto final /conversation
del servidor con un cuerpo JSON con parámetros por Puntos finales > POST /conversación arriba.
{
"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) " ,
}
El servidor devolverá un objeto JSON que contiene la respuesta de 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"
}
Si la solicitud no tiene éxito, el servidor devolverá un objeto JSON con un mensaje de error.
Si al objeto de solicitud le falta una propiedad requerida (por ejemplo, message
):
// HTTP/1.1 400 Bad Request
{
"error" : "The message parameter is required."
}
Si hubo un error al enviar el mensaje a ChatGPT:
// HTTP/1.1 503 Service Unavailable
{
"error" : "There was an error communicating with ChatGPT."
}
Puede configurar "stream": true
en el cuerpo de la solicitud para recibir un flujo de tokens a medida que se generan.
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 un ejemplo de cómo recibir la respuesta a medida que se genera. Recibirá un token a la vez, por lo que deberá concatenarlos usted mismo.
Salida exitosa:
{ 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?
Salida de error:
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
y usar el método POST
. Siga las mismas instrucciones de configuración para el servidor API y cree settings.js
.
Si se instala globalmente:
chatgpt-cli
Si se instala localmente:
npm run cli
Las respuestas de ChatGPT se copian automáticamente en tu portapapeles, para que puedas pegarlas en otras aplicaciones.
Como se muestra en los ejemplos anteriores, puede configurar reverseProxyUrl
en las opciones de ChatGPTClient
para usar un servidor proxy inverso en lugar de la API oficial de ChatGPT. Por ahora, esta es la única forma de utilizar los modelos subyacentes de ChatGPT . Este método ha sido parcheado y las instrucciones siguientes ya no son relevantes, pero es posible que aún quieras utilizar un proxy inverso por otros motivos. Actualmente, los servidores proxy inversos todavía se utilizan para realizar una omisión de Cloudflare para ChatGPTBrowserClient
.
¿Cómo funciona? Respuesta simple: ChatGPTClient
> proxy inverso > servidor OpenAI. El servidor proxy inverso hace algo de magia bajo el capó para acceder al modelo subyacente directamente a través del servidor de OpenAI y luego devuelve la respuesta a ChatGPTClient
.
Las instrucciones se proporcionan a continuación.
accessToken
).reverseProxyUrl
en https://chatgpt.hato.ai/completions
en settings.js > chatGptClient
o las opciones de ChatGPTClient
.settings.chatGptClient.openaiApiKey
) en el token de acceso ChatGPT que obtuvo en el paso 1.model
en text-davinci-002-render
, text-davinci-002-render-paid
o text-davinci-002-render-sha
según los modelos de ChatGPT a los que tenga acceso su cuenta. Los modelos deben ser un nombre de modelo ChatGPT, no el nombre del modelo subyacente, y no puedes usar un modelo al que tu cuenta no tenga acceso.stream: true
(API) o onProgress
(cliente) como solución alternativa.accessToken
).reverseProxyUrl
en https://chatgpt.pawan.krd/api/completions
en settings.js > chatGptClient
o las opciones de ChatGPTClient
.settings.chatGptClient.openaiApiKey
) en el token de acceso ChatGPT que obtuvo en el paso 1.model
en text-davinci-002-render
, text-davinci-002-render-paid
o text-davinci-002-render-sha
según los modelos de ChatGPT a los que tenga acceso su cuenta. Los modelos deben ser un nombre de modelo ChatGPT, no el nombre del modelo subyacente, y no puedes usar un modelo al que tu cuenta no tenga acceso.stream: true
(API) o onProgress
(cliente) como solución alternativa. Una lista de proyectos increíbles que utilizan @waylaidwanderer/chatgpt-api
:
¡Agregue el suyo a la lista editando este archivo README y creando una solicitud de extracción!
Un cliente web para este proyecto también está disponible en waylaidwanderer/PandoraAI.
ChatGPTClient
Dado que gpt-3.5-turbo
es el modelo subyacente de ChatGPT, tuve que hacer todo lo posible para replicar la forma en que lo usa el sitio web oficial de ChatGPT. Esto significa que mi implementación o el modelo subyacente pueden no comportarse exactamente igual en algunos aspectos:
Si desea contribuir a este proyecto, cree una solicitud de extracción con una descripción detallada de sus cambios.
Este proyecto está bajo la licencia MIT.