
¡Se ha agregado apoyo para el modelo de chatgpt oficial! Ahora puede usar el modelo gpt-3.5-turbo con la API oficial de OpenAI, utilizando 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 por 1k tokens) que text-davinci-003 .
Vea la publicación de OpenAI, presentando las API de ChatGPT y Whisper para obtener más información.
Para usarlo, establezca El modelo predeterminado utilizado en modelOptions.model a gpt-3.5-turbo , y ChatGPTClient manejará el resto.ChatGPTClient ahora es gpt-3.5-turbo . Todavía puede 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úa haciéndolo bajo tu propio riesgo.
Agregué un ChatGPTBrowserClient experimental que depende de un servidor proxy inverso que utilice un bypass de CloudFlare, lo que le permite hablar con chatgpt (chat.openai.com) sin requerir la automatización del navegador. Todo lo que necesita es su token de acceso desde https://chat.openai.com/api/auth/session.
Como siempre, tenga en cuenta que si elige seguir esta ruta, está exponiendo su token de acceso a un servidor de terceros de código cerrado. Si le preocupa esto, puede optar por usar una cuenta de ChatGPT gratuita para minimizar los riesgos, o continuar usando ChatGPTClient en su lugar con el modelo text-davinci-003 .
Desafortunadamente, el método que estábamos utilizando 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 el navegador para interactuar con el backend de ChatGPT (que es menos potente, más limitado de tarifas y no es compatible con esta biblioteca en este momento).
Con la ayuda de @Pawanosman, hemos descubierto una forma de continuar utilizando los modelos subyacentes de CHATGPT . Con suerte, para evitar la pérdida de acceso nuevamente, hemos decidido proporcionar servidores de proxy inverso compatibles con la API de OpenAI. He actualizado ChatGPTClient para admitir el uso de un servidor proxy inverso en lugar del servidor API de 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, está exponiendo su token de acceso a un servidor de terceros de código cerrado. Si le preocupa esto, puede optar por usar una cuenta de ChatGPT gratuita para minimizar los riesgos, o continuar utilizando la API oficial de OpenAI con el modelo text-davinci-003 .
He encontrado 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" ChatGPT Plus. Las respuestas son ardientes rápidamente. He actualizado la biblioteca para usar este modelo.
Mal tiempo; 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 Bing de CHATGPT con BingAIClient (experimental). El servidor API y la CLI aún deben actualizarse para admitir esto , pero puede usar el cliente directamente en este momento. Tenga en cuenta que si su cuenta todavía está en la lista de espera, no podrá usar este cliente.
A pesar de que text-chat-davinci-002-20221122 está de nuevo nuevamente, 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, he oído que las versiones más nuevas ahora están bloqueadas por acceso a los empleados y socios de OpenAI, por lo que es poco probable que podamos encontrar cualquier solución hasta que el modelo se publique oficialmente.
Puede usar el modelo text-davinci-003 como un reemplazo de entrega. Tenga en cuenta que text-davinci-003 no es tan bueno como text-chat-davinci-002 (que está entrenado a través de 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 admitir el soporte para el CHATGPT basado en el navegador para el servidor API y la CLI. Estrella y mire este repositorio para obtener actualizaciones.
La montaña rusa ha llegado a la siguiente parada. text-chat-davinci-002-20221122 está de nuevo.
Intentar usar text-chat-davinci-002-20221122 con la API de OpenAI ahora devuelve un error 404. Puede usar el modelo text-davinci-003 como un reemplazo de entrega. Tenga en cuenta que text-davinci-003 no es tan bueno como text-chat-davinci-002 (que está entrenado a través de RHLF y ajustado para ser una IA conversacional), aunque los resultados aún son muy buenos. Tenga en cuenta que usar text-davinci-003 le costará créditos ($).
POR FAVOR, mantenga más actualizaciones mientras investigamos adicionales soluciones.
Intentar usar text-chat-davinci-002-20230126 con la API de OpenAI ahora devuelve un error 404. Alguien ya ha encontrado el nuevo nombre del modelo, pero no está dispuesto a compartir en este momento. Actualizaré este repositorio una vez que encuentre el nuevo modelo. Si tiene algún cliente potencial, abra un problema o una solicitud de extracción.
Mientras tanto, he agregado soporte para modelos como text-davinci-003 , que puede usar como reemplazo de entrega. Tenga en cuenta que text-davinci-003 no es tan bueno como text-chat-davinci-002 (que está entrenado a través de RHLF y ajustado para ser una IA conversacional), aunque los resultados aún son muy buenos. Tenga en cuenta que usar text-davinci-003 le costará créditos ($).
Discord User @pig#8932 ha encontrado un modelo de text-chat-davinci-002 de trabajo, text-chat-davinci-002-20221122 . He actualizado la biblioteca para usar este modelo.
Implementación de un cliente para ChatGPT y Bing AI. Disponible como módulo Node.js, servidor API REST y aplicación CLI.
ChatGPTClient : Soporte para el modelo oficial de chatgpt subyacente, 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 está utilizando el servidor API o la CLI (ver settings.example.js ).text-davinci-003BingAIClient : Soporte para la versión de Bing de CHATGPT, impulsada por GPT-4.ChatGPTBrowserClient : Soporte para el sitio web oficial de ChatGPT, utilizando un servidor proxy inverso para un bypass de CloudFlare.npm i @waylaidwanderer/chatgpt-api Ver demos/use-bing-client.js .
Ver demos/use-client.js .
Consulte demos/use-browser-client.js .
Puede instalar el paquete usando
npm i -g @waylaidwanderer/chatgpt-api Luego ejecutarlo usando chatgpt-api . Esto toma un parámetro opcional --settings=<path_to_settings.js> , o busca settings.js en el directorio actual si no está configurado, con los siguientes contenidos:
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-apinpm 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) Comenzar 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 se mostrará al usuario. |
| conversación | (Opcional) Una identificación para la conversación que desea continuar. |
| JailbreakConversationID | (Opcional, solo para BingAIClient ) establecido en true para comenzar una conversación en modo Jailbreak. Después de eso, esta debería ser la identificación de la conversación de jailbreak (dada en la respuesta como un parámetro también llamado jailbreakConversationId ). |
| parentmessageid | (Opcional, para ChatGPTClient y BingAIClient en modo jailbreak) la identificación del mensaje principal (es decir, response.messageId ) Al continuar una conversación. |
| firma de conversaciones | (Opcional, solo para BingAIClient ) una firma para la conversación (dada en la respuesta como parámetro también nombrada conversationSignature ). Requerido cuando continúa una conversación a menos que esté en modo Jailbreak. |
| cliente | (Opcional, solo para BingAIClient ) la identificación del cliente. Requerido cuando continúa una conversación a menos que esté en modo Jailbreak. |
| invocador | (Opcional, solo para BingAIClient ) la identificación de la invocación. Requerido cuando continúa una conversación a menos que esté en modo Jailbreak. |
| clientOptions | (Opcional) Un objeto que contiene opciones para el cliente. |
| clientOptions.clientTouse | (Opcional) El cliente para usar para este mensaje. Valores posibles: chatgpt , chatgpt-browser , bing . |
| ClientOptions.* | (Opcional) Cualquier opción válida para el cliente. Por ejemplo, para ChatGPTClient , puede establecer clientOptions.openaiApiKey para establecer una clave API solo para este mensaje, o clientOptions.promptPrefix para dar las instrucciones personalizadas de AI solo para este mensaje, etc. |
Para configurar qué opciones se pueden cambiar por mensaje (predeterminado: ALL), consulte los comentarios para perMessageClientOptionsWhitelist en settings.example.js . Para permitir que los clientes cambiantes, perMessageClientOptionsWhitelist.validClientsToUse debe establecerse en una matriz no vacía como se describe en el archivo de configuración de ejemplo.
Para comenzar una conversación con ChatGPT, envíe una solicitud de publicación al punto final del servidor /conversation con un cuerpo JSON con parámetros por punto final > Post /Conversación anterior.
{
"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 contenga 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 le falta al objeto de solicitud una propiedad requerida (por ejemplo, message ):
// HTTP/1.1 400 Bad Request
{
"error" : "The message parameter is required."
}Si hubo un error de enviar el mensaje a chatgpt:
// HTTP/1.1 503 Service Unavailable
{
"error" : "There was an error communicating with ChatGPT."
} Puede establecer "stream": true en el cuerpo de 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 un ejemplo de cómo recibir la respuesta tal como 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, creando settings.js .
Si se instala a nivel mundial:
chatgpt-cliSi se instala localmente:
npm run cliLas respuestas de ChatGPT se copian automáticamente en su portapapeles, para que pueda pegarlas en otras aplicaciones.
Como se muestra en los ejemplos anteriores, puede establecer reverseProxyUrl en las opciones de ChatGPTClient para usar un servidor proxy inverso en lugar de la API CHATGPT oficial. Por ahora, esta es la única forma de usar los modelos subyacentes de CHATGPT . Este método ha sido parcheado y las instrucciones a continuación ya no son relevantes, pero es posible que desee usar un proxy inverso por otras razones. Actualmente, los servidores de proxy inverso todavía se usan para realizar una bypass de CloudFlare para ChatGPTBrowserClient .
¿Cómo funciona? Respuesta simple: ChatGPTClient > proxy inverso> servidor OpenAI. El servidor de proxy inverso hace algo de magia debajo del 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 dependiendo de los modelos de ChatGPT a los que su cuenta tenga acceso. Los modelos deben ser un nombre de modelo CHATGPT, no el nombre del modelo subyacente, y no puede usar un modelo al que su cuenta no tenga acceso.stream: true (API) o onProgress (Cliente) como una solución.accessToken ).reverseProxyUrl en https://chatgpt.pawan.krd/api/completions en settings.js > chatGptClient o 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 dependiendo de los modelos de ChatGPT a los que su cuenta tenga acceso. Los modelos deben ser un nombre de modelo CHATGPT, no el nombre del modelo subyacente, y no puede usar un modelo al que su cuenta no tenga acceso.stream: true (API) o onProgress (Cliente) como una solución. Una lista de proyectos increíbles usando @waylaidwanderer/chatgpt-api :
¡Agregue el suyo a la lista editando este Readme y creando una solicitud de extracción!
Un cliente web para este proyecto también está disponible en Waylaidwanderer/Pandorai.
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 el sitio web oficial de ChatGPT lo usa. Esto significa que mi implementación o el modelo subyacente pueden no comportarse exactamente igual de alguna manera:
Si desea contribuir a este proyecto, cree una solicitud de extracción con una descripción detallada de sus cambios.
Este proyecto tiene licencia bajo la licencia MIT.