Format d'URL
AISCouncil encode les configurations de bot directement dans le fragment d'URL (la partie après #). Cela signifie que partager un bot est aussi simple que partager un lien — pas de serveur, pas de base de données, pas de compte requis. L'URL est le bot.
Comment Fonctionnent les URLs de Bot
Lorsque vous partagez un bot, l'application prend la configuration entière du bot — nom, fournisseur, modèle, prompt système, température et tous les autres paramètres — et la compresse en une chaîne compacte qui vit dans le fragment d'URL.
https://aiscouncil.net/#B{payload_base80}
Le navigateur n'envoie jamais le fragment à aucun serveur (cela fait partie de la spécification HTTP), donc la configuration reste entièrement côté client.
Structure de l'URL
Une URL de bot a trois parties :
| Partie | Exemple | Objectif |
|---|---|---|
| URL de base | https://aiscouncil.net/ | L'application elle-même |
# | # | Séparateur de fragment (jamais envoyé au serveur) |
| Préfixe VLQ + payload | BeLT1Qx9k... | Octet de version + config compressée |
Le Préfixe de Version VLQ
Le(s) premier(s) caractère(s) du fragment identifient la version d'encodage en utilisant l'encodage Variable-Length Quantity (VLQ) :
| Préfixe | Version | Type de Contenu |
|---|---|---|
A | 0 | Contenu éditeur (utilisé par aiscouncil.net/s/) |
B | 1 | Configuration de bot |
C | 2 | Spécification de page PDL |
Le préfixe B indique à l'application "c'est une config de bot encodée avec la version 1 du codec." Les versions futures peuvent ajouter de nouveaux formats sans casser les URLs existantes.
Encodage Base80
Après le préfixe de version, le payload est encodé en utilisant un alphabet Base80 personnalisé. Cet alphabet a été choisi pour maximiser la densité d'URL tout en utilisant uniquement des caractères sûrs dans les fragments d'URL sans encodage de pourcentage :
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~$&'()*+,;=:@/?
Base80 est plus efficace que Base64 pour les fragments d'URL car il utilise 80 caractères au lieu de 64, emballant plus de données par caractère.
Compression
Avant l'encodage Base80, le JSON de config de bot est compressé en utilisant deflate-raw (via l'API native CompressionStream du navigateur). Cela réduit typiquement une config de bot à 30-60% de sa taille originale. La compression est sans perte et la décompression utilise la DecompressionStream native du navigateur.
Pipeline d'Encodage
Config Bot (JSON) --> Octets UTF-8 --> Compression deflate-raw --> Encodage Base80 --> Préfixe VLQ
Étape par étape :
- L'objet de config de bot est sérialisé en JSON
- La chaîne JSON est encodée en octets UTF-8
- Les octets sont compressés avec deflate-raw (native
CompressionStream) - Les octets compressés sont encodés en caractères Base80
- Le préfixe de version VLQ (
B) est préfixé
Le décodage inverse exactement le processus.
Schéma de Config de Bot
La config utilise des clés courtes d'une seule lettre pour minimiser la taille compressée :
| Clé | Type | Description | Défaut |
|---|---|---|---|
n | string | Nom d'affichage du bot | "New Bot" |
p | string | ID du fournisseur (anthropic, openai, xai, gemini, openrouter, ollama, etc.) | Requis |
m | string | ID du modèle (ex. claude-sonnet-4-20250514, gpt-4o) | Requis |
s | string | Prompt système | "" |
t | number | Température (0-2) | 0.7 |
x | integer | Max tokens de sortie | 4096 |
re | string | Effort de raisonnement (low, medium, high, max, ou budget numérique) | — |
tp | number | Top P (0-1) | 1 |
fp | number | Pénalité de fréquence (0-2) | 0 |
pp | number | Pénalité de présence (0-2) | 0 |
se | integer | Graine (pour des sorties reproductibles) | — |
st | array | Séquences d'arrêt | — |
rf | string | Format de réponse (text ou json) | "text" |
auth | integer | Contrôle d'accès : 1 = public (pas de connexion requise) | — |
icon | string | Icône du bot (emoji) | — |
d | string | Description du bot | — |
color | string | Couleur d'accent du bot (hex) | "#7c3aed" |
k | string | Clé API par bot (stockée localement, jamais dans l'URL) | — |
c | object | Configuration de conseil (pour bots multi-modèles) | — |
pf | string | ID de référence de profil | — |
cl | integer | Longueur de contexte (limite d'historique de messages) | — |
sm | boolean | Streaming activé | true |
at | boolean | Auto-titrage des conversations | false |
mr | boolean | Rendu Markdown activé | true |
stc | boolean | Afficher le nombre de tokens | false |
Seules les valeurs non-défaut sont incluses dans la config pour minimiser la longueur de l'URL.
Ce Qui N'est PAS dans l'URL
Les clés API ne sont jamais incluses dans les URLs. Le champ k (clé API par bot) est retiré pendant l'encodage de l'URL. Les clés sont stockées uniquement dans le localStorage du navigateur et sont envoyées uniquement à l'endpoint API du fournisseur LLM.
Les éléments suivants sont exclus des URLs partagées :
- Clés API — les destinataires doivent fournir les leurs
- Historique de chat — seule la configuration du bot est partagée
- Entrées de mémoire — la mémoire persistante par bot reste locale
- Statistiques d'utilisation — les données de suivi sont locales à l'appareil
URLs de l'Éditeur
L'éditeur web à aiscouncil.net/s/ utilise le même système d'encodage avec un préfixe de version différent :
https://aiscouncil.net/s/#A{payload_base80}
Le préfixe A indique la version 0 (contenu éditeur). Le payload contient le contenu du document compressé plutôt qu'une configuration de bot.
Encodage et Décodage Programmatique
Vous pouvez encoder et décoder des configs de bot programmatiquement en utilisant le module AIS.Codec dans la console du navigateur :
Décoder une URL
// Décoder depuis le hash de l'URL
const hash = location.hash.slice(1); // Retirer le '#'
const config = await AIS.Codec.decodeBotConfig(hash);
console.log(config);
// { n: "Mon Bot", p: "anthropic", m: "claude-sonnet-4-20250514", s: "Tu es serviable.", t: 0.7, x: 4096 }
Encoder une config
const config = {
n: "Assistant de Recherche",
p: "anthropic",
m: "claude-sonnet-4-20250514",
s: "Tu es un assistant de recherche minutieux. Cite les sources.",
t: 0.3,
x: 8192,
};
const hash = await AIS.Codec.encodeBotConfig(config);
const url = location.origin + "/#" + hash;
console.log(url);
// https://aiscouncil.net/#BeLT1Qx9k...
Inspecter le schéma
console.log(AIS.Codec.CONFIG_SCHEMA);
// Retourne la définition JSON Schema pour les configs de bot
Limites de Longueur d'URL
La plupart des navigateurs modernes supportent des longueurs d'URL d'au moins 2 000 caractères, beaucoup supportant 8 000+ caractères. Cependant, certains intermédiaires (clients email, plateformes de médias sociaux, raccourcisseurs d'URL) peuvent tronquer les longues URLs.
La limite pratique dépend de la longueur du prompt système :
| Longueur du Prompt Système | Longueur d'URL Approximative | Compatibilité |
|---|---|---|
| < 500 caractères | ~300-500 cars | Sûr partout |
| 500-2 000 caractères | ~500-1 200 cars | Sûr dans les navigateurs et la plupart des plateformes |
| 2 000-5 000 caractères | ~1 200-2 500 cars | Fonctionne dans les navigateurs, peut échouer dans email/SMS |
| > 5 000 caractères | 2 500+ cars | Navigateur uniquement, peut être tronqué ailleurs |
Si votre prompt système est très long, envisagez :
- Raccourcir ou résumer le prompt
- Utiliser un raccourcisseur d'URL qui préserve les fragments
- Partager la config du bot comme fichier JSON à la place (via export)
Comportement de la Page d'Accueil
Lorsque vous chargez aiscouncil.net directement (pas de hash dans l'URL), l'application n'encode pas votre configuration de bot dans l'URL. L'encodage d'URL ne s'active que lorsque la page a été chargée depuis une URL de bot partagée (i.e., l'URL contenait déjà un fragment #B...). Cela garde l'URL de la page d'accueil propre.