Cliente Node.js para a API não oficial de Character AI, um site incrível que dá vida aos personagens com IA!
Este repositório é inspirado na API de nó não oficial de RichardDorian. Porém, achei difícil de usar e não era realmente estável e arquivado. Então eu refiz em javascript.
Este projeto não é afiliado de forma alguma ao Character AI! É um projeto comunitário. O objetivo deste projeto é trazer e construir projetos alimentados por Character AI.
Se você gostou deste projeto, confira o site deles.
Totalmente escrito em Javascript e CommonJS (para máxima compatibilidade e facilidade de uso)
Solicitações assíncronas
Use conversas ou use a API para buscar informações
Fácil de usar
Desenvolvimento ativo
Suporte para login de convidado e token
npm instala node_characterai
Autenticação básica de convidado e mensagem:
const CharacterAI = require("node_characterai");const characterAI = new CharacterAI();(async () => { // Autenticando como convidado (use `.authenticateWithToken()` para usar uma conta) aguardar characterAI.authenticateAsGuest(); //Coloque aqui o id do seu personagem const caracterId = "8_1NyR8w1dOXmI1uWaieQcd147hecbdIK7CeEAIrdJw"; // Cria um objeto de chat para interagir com a conversa const chat = aguarda caracterAI.createOrContinueChat(characterId); //Envia uma mensagem resposta const = aguarda chat.sendAndAwaitResponse("Olá mod discord!", true); console.log(resposta); // Use `response.text` para usá-lo como uma string})();
Algumas partes da API (como gerenciar uma conversa) exigem que você esteja logado usando um sessionToken
.
Para obtê-lo, você pode abrir seu navegador, acessar o site Character.AI em localStorage
.
Importante
Se você estiver usando versões antigas do pacote e estiver obtendo um Authentication token is invalid
, agora você precisará novamente de um sessionToken
para autenticar (a partir da atualização 1.2.5
e superior). Veja abaixo.
Se você estiver usando algo que está usando o pacote e não é atualizado para a versão mais recente há algum tempo, certifique-se de atualizar o pacote fazendo npm update node_characterai
ou copiando manualmente os arquivos ou abrindo um respectivo problema em seu pacote (se eles tiverem um).
Abra o site Character.AI em seu navegador (https://beta.character.ai)
Abra as ferramentas do desenvolvedor ( F12 , Ctrl+Shift+I ou Cmd+J )
Vá para a guia Application
Vá para a seção Storage
e clique em Local Storage
Procure a chave char_token
Abra o objeto, clique com o botão direito no valor e copie o token da sua sessão.
Abra o site Character.AI em seu navegador na interface OLD (https://old.character.ai/)
Abra a barra de URL, escreva javascript:
(diferencia maiúsculas de minúsculas) e cole o seguinte:
(function(){let e=window.localStorage["char_token"];if(!e){alert("Você precisa fazer login primeiro!");return;}let t=JSON.parse(e).value ;document.documentElement.innerHTML=`<div><i><p>fornecido por node_characterai - <a href="https://github.com/realcoloride/node_characteraitab=readme-ov-file#using-an-access-token">clique aqui para obter mais informações</a></p></i><p> Aqui está o seu token de sessão:</p><input value="${t}" readonly><p><strong>Não compartilhe isso com ninguém a menos que você saiba o que está fazendo! roubado ou solicitado por alguém em quem você não confia, eles podem acesse sua conta sem o seu consentimento; em caso afirmativo, feche a página imediatamente.</strong></p><button id="copy" onclick="navigator.clipboard.writeText('${t}'); alert( 'Copiado para a área de transferência!')">Copiar token de sessão para a área de transferência</button><button onclick="window.location.reload();">Atualizar o página</button></div>`;localStorageKey=null;storageInformation=null;t=null;})();
A seguinte página deverá aparecer:
Clique nos respectivos botões para copiar seu token de acesso ou token de identificação para a área de transferência.
Ao usar o pacote, você pode:
Faça login como convidado usando authenticateAsGuest()
- para uso em massa ou para fins de teste
Faça login com sua conta ou um token usando authenticateWithToken()
- para recursos completos e mensagens ilimitadas
Você pode encontrar o ID do seu personagem na URL da página de bate-papo do personagem.
Por exemplo, se você for para a página de bate-papo do personagem Discord Moderator
você verá a URL https://beta.character.ai/chatchar=8_1NyR8w1dOXmI1uWaieQcd147hecbdIK7CeEAIrdJw
.
A última parte do URL é o ID do personagem:
️ Personagem AI tem a capacidade de gerar e interpretar imagens em uma conversa. Alguns personagens baseiam esse conceito em caracteres especiais, ou talvez o utilizem para reconhecer imagens, ou para interagir com um personagem e dar mais detalhes sobre algo: as possibilidades são infinitas .
A maioria dos recursos de imagem do Character AI podem ser usados da seguinte forma:
// A maioria dessas funções retornará uma URL para o imageawait chat.generateImage("golfinhos nadando em água verde");await chat.uploadImage("https://www.example.com/image.jpg");await chat.uploadImage("./photos/image.jpg");// Outros tipos suportados são Buffers, Streams Legíveis, Caminhos de Arquivo e URLsawait chat.uploadImage(imageBuffer);// É necessário incluir o caminho relativo da imagem para fazer upload de uma imagemawait chat.sendAndAwaitResponse({ texto: "O que há nesta imagem", image_rel_path: "https://www.example.com/coffee.jpg", image_description: "Isto é café.", image_description_type: "HUMAN" // Defina isto se você estiver dizendo manualmente o que a IA está olhando}, true);
Parabéns a @creepycats por implementar a maior parte dessas coisas
Problema | Responder |
---|---|
O token era inválido | Certifique-se de que seu token seja realmente válido e de que você copiou todo o token (é muito longo) ou não atualizou o pacote. |
Na maioria dos sistemas, o titereiro localizará automaticamente o Chromium. Mas em certas distribuições, o caminho deve ser especificado manualmente. Este aviso ocorre se node_characterai não conseguiu localizar o Chromium no Linux ( /usr/bin/chromium-browser ) e ocorrerá um erro se o titereiro não conseguir localizá-lo automaticamente. Veja isto para uma correção. | |
Por que os processos de cromo estão abrindo | Isso ocorre porque, atualmente, a busca simples está quebrada e eu uso o puppeteer (uma biblioteca de controle do navegador chromium) para contornar as restrições do cloudflare. |
authenticateAsGuest() não funciona | Veja a edição nº 14. |
Acerte a quantidade máxima de mensagens | Infelizmente, as contas de convidados têm apenas uma quantidade limitada de mensagens antes de serem limitadas e forçadas a fazer login. Veja abaixo para mais informações |
Como usar uma conta para usar a biblioteca em massa | Você pode usar conversas , um recurso introduzido na 1.0.0 , para atribuir usuários e canais. Para reproduzir uma conversa, use OOC (fora do personagem) para fazer a IA pensar que você está com várias pessoas. Veja um exemplo aqui: (Isenção de responsabilidade: em alguns personagens, sua personalidade os fará ignorar qualquer solicitação OOC). |
Como evito simultaneidade e travamentos ao usar mais de uma solicitação por vez | Verifique a solução encontrada por @SeoulSKY aqui usando async-mutex . |
Isso é oficial | Não, este projeto é feito por um fã do site e não é oficial. Para apoiar os desenvolvedores, confira o site deles . |
Fiz algo incrível com node_characterai | Por favor, me avise! |
✉️ Quer entrar em contato comigo | Veja meu perfil |
☕ Quer me apoiar | Você pode me enviar um café no ko.fi: https://ko-fi.com/coloride. Muito obrigado! |
Tenha uma ideia | Abra um problema na guia Problemas |
➕ Outro problema | Abra um problema na guia Problemas |
Na classe Client
, você pode acessar a classe Requester
e definir puppeteer ou outras variáveis relacionadas a como o CharacterAI funcionará usando characterAI.requester.(property)
. Além disso, tudo aqui está sujeito a alterações, portanto, atualize o pacote com frequência.
Altere a propriedade .usePlus
do solicitante e, se necessário, altere .forceWaitingRoom
.
Por exemplo:
// O padrão é `false`characterAI.requester.usePlus = true;
Há cerca de alguns meses, o pacote exigia apenas a execução do módulo node-fetch
. O pacote foi feito usando solicitações simples de API.
Porém, com o tempo, a Cloudflare começou a lutar contra scraping e bots, o que também tornou quase impossível para qualquer pessoa usar este pacote.
É aqui que nas versões 1.1 e superiores, o puppeteer é usado (que usa um navegador chromium) para fazer solicitações com a API.
IMPORTANTE: faça as alterações antes de inicializar seu cliente!
Na classe CharacterAI, você pode acessar o solicitante e definir a variável .puppeteerPath
ou outros argumentos, e as propriedades incluem (e estão sujeitas a alterações em versões futuras) :
// Caminho executável do Chromium (em algumas distribuições Linux, /usr/bin/chromium-browser)puppeteerPath;// Argumentos padrão para quando o navegador iniciapuppeteerLaunchArgs;// Booleano representando o tempo limite padrão (o padrão é 30000ms)puppeteerNoDefaultTimeout;// Número representando o protocolo padrão timeoutpuppeteerProtocolTimeout;
Para usuários do Linux, se o seu titereiro não detectar automaticamente o caminho para o Chromium, você precisará especificá-lo manualmente.
Para fazer isso, você só precisa definir puppeteerPath
para o caminho do Chromium:
characterAI.puppeteerPath = "/caminho/para/chromium-browser";
No Linux, você pode usar o comando which
para descobrir onde o Chromium está instalado:
$ which chromium-browser # ou qualquer comando que você usa para iniciar o Chrome
Eu recomendo que você atualize este pacote com frequência para correções de bugs e novas adições.
Se você tiver um problema ou ideia, informe-me na seção Problemas .
Se você usar esta API, você também estará vinculado aos termos de uso do site deles.
(real)coloride - 2023-2024, licenciado pelo MIT.