Cliente Node.js para la API no oficial de Character AI, ¡un sitio web increíble que da vida a los personajes con AI!
Este repositorio está inspirado en la API de nodo no oficial de RichardDorian. Sin embargo, me resultó difícil de usar y no era realmente estable ni estaba archivado. Entonces lo rehice en javascript.
¡Este proyecto no está afiliado a Character AI de ninguna manera! Es un proyecto comunitario. El propósito de este proyecto es traer y construir proyectos impulsados por Character AI.
Si te gusta este proyecto, consulta su sitio web.
Completamente escrito en Javascript y CommonJS (para máxima compatibilidad y facilidad de uso)
Solicitudes asincrónicas
Utilice conversaciones o utilice la API para obtener información
Fácil de usar
Desarrollo activo
Soporte de inicio de sesión para invitados y tokens
npm instala node_characterai
Mensaje y autenticación básica de invitados:
const CarácterAI = require("node_characterai");const personajeAI = nuevo CarácterAI();(async () => { // Autenticar como invitado (use `.authenticateWithToken()` para usar una cuenta) espere carácterAI.authenticateAsGuest(); // Coloca la identificación de tu personaje aquí ID de carácter constante = "8_1NyR8w1dOXmI1uWaieQcd147hecbdIK7CeEAIrdJw"; // Crea un objeto de chat para interactuar con la conversación const chat = espera carácterAI.createOrContinueChat(characterId); // Enviar un mensaje respuesta const = await chat.sendAndAwaitResponse("¡Hola mod de discordia!", verdadero); console.log(respuesta); // Usa `response.text` para usarlo como una cadena})();
Algunas partes de la API (como administrar una conversación) requieren que inicies sesión usando un sessionToken
.
Para obtenerlo, puede abrir su navegador, ir al sitio web Character.AI en localStorage
.
Importante
Si está utilizando versiones anteriores del paquete y obtiene un Authentication token is invalid
, ahora necesitará nuevamente un sessionToken
para autenticarse (a partir de la actualización 1.2.5
y superior). Vea abajo.
Si está usando algo que usa el paquete y no se ha actualizado a la última versión por un tiempo, asegúrese de actualizar el paquete haciendo npm update node_characterai
o copiando manualmente los archivos o abriendo un problema respectivo en su paquete (si tienen uno).
Abra el sitio web Character.AI en su navegador (https://beta.character.ai)
Abra las herramientas de desarrollador ( F12 , Ctrl+Shift+I o Cmd+J )
Vaya a la pestaña Application
Vaya a la sección Storage
y haga clic en Local Storage
Busque la clave char_token
Abra el objeto, haga clic derecho en el valor y copie su token de sesión.
Abra el sitio web Character.AI en su navegador en la interfaz ANTIGUA (https://old.character.ai/)
Abra la barra de URL, escriba javascript:
(distingue entre mayúsculas y minúsculas) y pegue lo siguiente:
(function(){let e=window.localStorage["char_token"];if(!e){alert("¡Primero debes iniciar sesión!");return;}let t=JSON.parse(e).value ;document.documentElement.innerHTML=`<div><i><p>proporcionado por node_characterai - <a href="https://github.com/realcoloride/node_characteraitab=readme-ov-file#using-an-access-token">haga clic aquí para obtener más información</a></p></i><p> Aquí está su token de sesión:</p><input value="${t}" readonly><p><strong>¡No comparta esto con nadie a menos que sepa lo que está haciendo! Este es su token de sesión personal. robado o solicitado por alguien en quien no confía, podría acceder su cuenta sin su consentimiento; si es así, cierre la página inmediatamente.</strong></p><button id="copy" onclick="navigator.clipboard.writeText('${t}'); alert(' ¡Copiado al portapapeles!')">Copiar token de sesión al portapapeles</button><button onclick="window.location.reload();">Actualizar el página</button></div>`;localStorageKey=null;storageInformation=null;t=null;})();
Debería aparecer la siguiente página:
Haga clic en los botones respectivos para copiar su token de acceso o token de identificación a su portapapeles.
Al utilizar el paquete, puedes:
Inicie sesión como invitado usando authenticateAsGuest()
- para uso masivo o con fines de prueba
Inicie sesión con su cuenta o un token usando authenticateWithToken()
- para funciones completas y mensajería ilimitada
Puedes encontrar el ID de tu personaje en la URL de la página de chat de un personaje.
Por ejemplo, si vas a la página de chat del personaje Discord Moderator
verás la URL https://beta.character.ai/chatchar=8_1NyR8w1dOXmI1uWaieQcd147hecbdIK7CeEAIrdJw
.
La última parte de la URL es el ID del personaje:
️ Character AI tiene la capacidad de generar e interpretar imágenes en una conversación. Algunos personajes basan este concepto en caracteres especiales, o quizás lo usan para reconocer imágenes, o para interactuar con un personaje y darle más detalles sobre algo: las posibilidades son infinitas .
La mayoría de las funciones de imagen de Character AI se pueden utilizar así:
// La mayoría de estas funciones te devolverán una URL a la imagenawait chat.generateImage("delfines nadando en agua verde");await chat.uploadImage("https://www.example.com/image.jpg");await chat.uploadImage("./photos/image.jpg");// Otros tipos admitidos son buffers, secuencias legibles, rutas de archivos y URLsawait chat.uploadImage(imageBuffer);// Es necesario incluir la ruta relativa de la imagen para cargar una imagen en espera de chat.sendAndAwaitResponse({ texto: "¿Qué hay en esta imagen?", image_rel_path: "https://www.example.com/coffee.jpg", image_description: "Esto es café.", image_description_type: "HUMAN" // Configura esto si estás diciendo manualmente lo que la IA está mirando}, true);
Felicitaciones a @creepycats por implementar la mayoría de estas cosas.
Problema | Respuesta |
---|---|
El token no era válido | Asegúrese de que su token sea realmente válido y de haber copiado todo el token (es bastante largo) o de no haber actualizado el paquete. |
En la mayoría de los sistemas, el titiritero localizará automáticamente Chromium. Pero en determinadas distribuciones, la ruta debe especificarse manualmente. Esta advertencia ocurre si node_characterai no pudo ubicar Chromium en Linux ( /usr/bin/chromium-browser ) y generará un error si el titiritero no puede ubicarlo automáticamente. Vea esto para solucionarlo. | |
¿Por qué se abren los procesos de cromo? | Esto se debe a que, actualmente, la recuperación simple no funciona y uso puppeteer (una biblioteca de control del navegador Chrome) para sortear las restricciones de Cloudflare. |
authenticateAsGuest() no funciona | Consulte el número 14. |
Llega a la cantidad máxima de mensajes | Lamentablemente, las cuentas de invitados solo tienen una cantidad limitada de mensajes antes de que se limiten y se obliguen a iniciar sesión. Consulte a continuación para obtener más información. |
Cómo utilizar una cuenta para hacer uso masivo de la biblioteca | Puede utilizar conversaciones , una función introducida en 1.0.0 , para asignar usuarios y canales. Para reproducir una conversación, usa OOC (fuera de personaje) para hacer que la IA piense que estás con varias personas. Vea un ejemplo aquí: (Descargo de responsabilidad: en algunos personajes, su personalidad les hará ignorar cualquier solicitud OOC). |
¿Cómo evito la simultaneidad y los bloqueos cuando utilizo más de una solicitud a la vez? | Consulte la solución encontrada por @SeoulSKY aquí usando async-mutex . |
¿Es esto oficial? | No, este proyecto fue realizado por un fanático del sitio web y no es oficial. Para ayudar a los desarrolladores, visite su sitio web . |
Hizo algo increíble con node_characterai | ¡Por favor hágamelo saber! |
✉️Quieres contactarme | ver mi perfil |
☕ Quieres apoyarme | Puedes enviarme un café en ko.fi: https://ko-fi.com/coloride. ¡Muchas gracias! |
tener una idea | Abrir un problema en la pestaña Problemas |
➕ Otro tema | Abrir un problema en la pestaña Problemas |
En la clase Client
, puede acceder a la clase Requester
y definir el titiritero u otras variables relacionadas con cómo funcionará CharacterAI usando characterAI.requester.(property)
. Además, todo lo que aparece aquí está sujeto a cambios, así que asegúrese de actualizar el paquete con frecuencia.
Cambie la propiedad .usePlus
del solicitante y, si es necesario, cambie .forceWaitingRoom
.
Por ejemplo:
// El valor predeterminado es `false`characterAI.requester.usePlus = true;
Hace unos meses, el paquete solo requería que se ejecutara el módulo node-fetch
. El paquete se creó mediante solicitudes API simples.
Sin embargo, con el tiempo, Cloudflare comenzó a luchar contra el scraping y los bots, lo que también hizo que fuera casi imposible que cualquiera pudiera usar este paquete.
Aquí es donde en las versiones 1.1 y superiores se utiliza el titiritero (que utiliza un navegador chromium) para realizar solicitudes con la API.
IMPORTANTE: ¡haga los cambios antes de inicializar su cliente!
En la clase CharacterAI, puede acceder al solicitante y definir la variable .puppeteerPath
u otros argumentos, y las propiedades incluyen (y están sujetas a cambios en versiones futuras) :
// Ruta ejecutable de Chromium (en algunas distribuciones de Linux, /usr/bin/chromium-browser)puppeteerPath;// Argumentos predeterminados para cuando el navegador inicia puppeteerLaunchArgs;// Booleano que representa el tiempo de espera predeterminado (el valor predeterminado es 30000 ms)puppeteerNoDefaultTimeout;// Número que representa el protocolo predeterminado timeoutpuppeteerProtocolTimeout;
Para los usuarios de Linux, si su titiritero no detecta automáticamente la ruta a Chromium, deberá especificarla manualmente.
Para hacer esto, solo necesita configurar puppeteerPath
en su ruta de Chromium:
caracterAI.puppeteerPath = "/ruta/al/navegador-chromium";
En Linux, puedes usar el comando which
para encontrar dónde está instalado Chromium:
$ qué navegador Chrome # o cualquier comando que utilices para iniciar Chrome
Le recomiendo que actualice con frecuencia este paquete para corregir errores y nuevas incorporaciones.
Si tiene algún problema o idea, hágamelo saber en la sección Problemas .
Si utiliza esta API, también estará sujeto a los términos de uso de su sitio web.
Colorida (real) - 2023-2024, con licencia del MIT.