Pular para o conteúdo principal

Formato de URL

O AISCouncil codifica configurações de bots diretamente no fragmento da URL (a parte após #). Isso significa que compartilhar um bot é tão simples quanto compartilhar um link -- sem servidor, sem banco de dados, sem conta necessária. A URL é o bot.

Como URLs de Bot Funcionam

Quando você compartilha um bot, o app pega toda a configuração do bot -- nome, provedor, modelo, prompt de sistema, temperatura e todas as outras configurações -- e a comprime em uma string compacta que vive no fragmento da URL.

https://aiscouncil.net/#B{base80_payload}

O navegador nunca envia o fragmento para nenhum servidor (isso é parte da especificação HTTP), então a configuração fica inteiramente no client-side.

Estrutura da URL

Uma URL de bot tem três partes:

ParteExemploPropósito
URL Basehttps://aiscouncil.net/O próprio app
##Separador de fragmento (nunca enviado ao servidor)
Prefixo VLQ + payloadBeLT1Qx9k...Byte de versão + config comprimida

O Prefixo de Versão VLQ

O(s) primeiro(s) caractere(s) do fragmento identificam a versão de codificação usando codificação Variable-Length Quantity (VLQ):

PrefixoVersãoTipo de Conteúdo
A0Conteúdo do editor (usado por aiscouncil.net/s/)
B1Configuração de bot
C2Spec de página PDL

O prefixo B diz ao app "esta é uma config de bot codificada com versão 1 do codec." Versões futuras podem adicionar novos formatos sem quebrar URLs existentes.

Codificação Base80

Após o prefixo de versão, o payload é codificado usando um alfabeto Base80 customizado. Este alfabeto foi escolhido para maximizar densidade de URL enquanto usa apenas caracteres que são seguros em fragmentos de URL sem percent-encoding:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~$&'()*+,;=:@/?

Base80 é mais eficiente que Base64 para fragmentos de URL porque usa 80 caracteres em vez de 64, empacotando mais dados por caractere.

Compressão

Antes da codificação Base80, o JSON de config do bot é comprimido usando deflate-raw (via API nativa CompressionStream do navegador). Isso tipicamente reduz uma config de bot para 30-60% do seu tamanho original. A compressão é lossless e a descompressão usa o DecompressionStream nativo do navegador.

Pipeline de Codificação

Bot Config (JSON) --> bytes UTF-8 --> compress Deflate-raw --> codificar Base80 --> prefixo VLQ

Passo a passo:

  1. O objeto de config do bot é serializado para JSON
  2. A string JSON é codificada para bytes UTF-8
  3. Os bytes são comprimidos com deflate-raw (CompressionStream nativo)
  4. Os bytes comprimidos são codificados para caracteres Base80
  5. O prefixo de versão VLQ (B) é prependado

Decodificação reverte o processo exatamente.

Schema de Config de Bot

A config usa chaves curtas de letra única para minimizar tamanho comprimido:

ChaveTipoDescriçãoPadrão
nstringNome de exibição do bot"New Bot"
pstringID do provedor (anthropic, openai, xai, gemini, openrouter, ollama, etc.)Obrigatório
mstringID do modelo (ex: claude-sonnet-4-20250514, gpt-4o)Obrigatório
sstringPrompt de sistema""
tnumberTemperatura (0-2)0.7
xintegerMax tokens de saída4096
restringEsforço de raciocínio (low, medium, high, max, ou orçamento numérico)
tpnumberTop P (0-1)1
fpnumberFrequency penalty (0-2)0
ppnumberPresence penalty (0-2)0
seintegerSeed (para outputs reproduzíveis)
starraySequências de parada
rfstringFormato de resposta (text ou json)"text"
authintegerControle de acesso: 1 = público (login não requerido)
iconstringÍcone do bot (emoji)
dstringDescrição do bot
colorstringCor de destaque do bot (hex)"#7c3aed"
kstringChave de API por bot (armazenada localmente, nunca na URL)
cobjectConfiguração de council (para bots multi-modelo)
pfstringID de referência do perfil
clintegerComprimento de contexto (limite de histórico de mensagens)
smbooleanStreaming habilitadotrue
atbooleanAuto-titular conversasfalse
mrbooleanRenderização markdown habilitadatrue
stcbooleanMostrar contagem de tokensfalse

Apenas valores não-padrão são incluídos na config para minimizar comprimento da URL.

O Que NÃO Está na URL

Garantia de Segurança

Chaves de API nunca são incluídas em URLs. O campo k (chave de API por bot) é removido durante codificação de URL. Chaves são armazenadas apenas no localStorage do navegador e são enviadas apenas para o endpoint de API do provedor LLM.

Os seguintes são excluídos de URLs compartilhadas:

  • Chaves de API -- destinatários devem fornecer as suas próprias
  • Histórico de chat -- apenas a configuração do bot é compartilhada
  • Entradas de memória -- memória persistente por bot fica local
  • Estatísticas de uso -- dados de rastreamento são locais do dispositivo

URLs do Editor

O editor web em aiscouncil.net/s/ usa o mesmo sistema de codificação com um prefixo de versão diferente:

https://aiscouncil.net/s/#A{base80_payload}

O prefixo A indica versão 0 (conteúdo do editor). O payload contém o conteúdo do documento comprimido em vez de uma configuração de bot.

Codificação e Decodificação Programática

Você pode codificar e decodificar configs de bot programaticamente usando o módulo AIS.Codec no console do navegador:

Decodificando uma URL

// Decodifica do hash da URL
const hash = location.hash.slice(1); // Remove o '#'
const config = await AIS.Codec.decodeBotConfig(hash);
console.log(config);
// { n: "Meu Bot", p: "anthropic", m: "claude-sonnet-4-20250514", s: "You are helpful.", t: 0.7, x: 4096 }

Codificando uma config

const config = {
n: "Assistente de Pesquisa",
p: "anthropic",
m: "claude-sonnet-4-20250514",
s: "Você é um assistente de pesquisa completo. Cite fontes.",
t: 0.3,
x: 8192,
};
const hash = await AIS.Codec.encodeBotConfig(config);
const url = location.origin + "/#" + hash;
console.log(url);
// https://aiscouncil.net/#BeLT1Qx9k...

Inspecionando o schema

console.log(AIS.Codec.CONFIG_SCHEMA);
// Retorna a definição JSON Schema para configs de bot

Limites de Comprimento de URL

Limites do Navegador

A maioria dos navegadores modernos suporta comprimentos de URL de pelo menos 2.000 caracteres, com muitos suportando 8.000+ caracteres. No entanto, alguns intermediários (clientes de email, plataformas de mídia social, encurtadores de URL) podem truncar URLs longas.

O limite prático depende do comprimento do prompt de sistema:

Comprimento do Prompt de SistemaComprimento Aproximado da URLCompatibilidade
< 500 caracteres~300-500 charsSeguro em qualquer lugar
500-2.000 caracteres~500-1.200 charsSeguro em navegadores e maioria das plataformas
2.000-5.000 caracteres~1.200-2.500 charsFunciona em navegadores, pode falhar em email/SMS
> 5.000 caracteres2.500+ charsApenas navegador, pode ser truncado em outros lugares

Se seu prompt de sistema é muito longo, considere:

  • Encurtar ou resumir o prompt
  • Usar um encurtador de URL que preserva fragmentos
  • Compartilhar a config do bot como um arquivo JSON em vez disso (via export)

Comportamento na Homepage

Sem Codificação de URL na Homepage

Quando você carrega aiscouncil.net diretamente (sem hash na URL), o app não codifica sua configuração de bot na URL. Codificação de URL só ativa quando a página foi carregada de uma URL de bot compartilhada (isto é, a URL já continha um fragmento #B...). Isso mantém a URL da homepage limpa.