FR ▾
Obtenir une clé API

GetAiApiKeyListe de contrôle API IA pour la production

Clé API LLM pour un bot Discord : guide d'installation

Un bot Discord a besoin de trois éléments d'un fournisseur LLM : un endpoint compatible OpenAI, une clé et des limites adaptées à un serveur chargé. Voici un bot fonctionnel, les paramètres associés et le coût par message.

Mis à jour le

Illustration isométrique de bulles de discussion reliées à un rack serveur, représentant un bot Discord appelant une API LLM

Points clés

  1. Utilisez le package openai avec l'URL de base https://api.getaiapikey.com/v1 et le modèle uncensored.
  2. Conservez un historique roulant court par canal ; la fenêtre de contexte est de 100 000 tokens mais le coût augmente à chaque tour renvoyé.
  3. Limitez les appels en cours à environ 6, car une clé complète permet 8 requêtes simultanées et 300 par minute.
  4. Une réponse de chat de 1 500 tokens d'entrée et 200 tokens de sortie coûte 0,000325 $.

Rôle d'une clé API LLM pour un bot Discord

Si vous souhaitez une clé API LLM pour un bot Discord, les composants sont simples. Discord transmet un message à votre code via sa passerelle bot. Votre code envoie la conversation récente à un endpoint LLM, reçoit du texte et le publie dans le canal. La clé API prouve au fournisseur LLM que la requête vous appartient et la facture à votre solde.

Ce service est compatible OpenAI, donc le bot utilise le package Python standard openai. Vous modifiez deux paramètres, l'URL de base et l'ID du modèle uncensored, et tout le reste relève des chat completions habituelles. Les nouveaux utilisateurs peuvent l'essayer d'abord : après l'inscription, la page clé API propose 0,50 $ de crédit d'essai gratuit, valable 7 jours, sans carte requise.

Une limite honnête dès le départ. Il s'agit d'un modèle textuel. Il ne peut pas générer d'images, de voix ou de vidéo, et il ne lit pas les pièces jointes par lui-même. Votre bot peut transférer du texte depuis un message, mais tout ce qui dépasse le texte est hors du périmètre de cette API.

Avant d'écrire du code

  1. Obtenez une clé API. Inscrivez-vous avec Google ou un e-mail, créez une clé sur la page des clés et conservez-la dans une variable d'environnement.
  2. Créez une application Discord. Dans le portail développeur de Discord, ajoutez un bot, copiez son jeton et activez l'intention Message Content pour que le bot puisse lire le texte des messages. Invitez-le sur votre serveur avec les permissions de lecture et d'envoi de messages.
  3. Installez les bibliothèques. Vous avez besoin de discord.py et openai.
python3 -m venv .venv
source .venv/bin/activate
pip install discord.py openai
export API_KEY="your-llm-key"
export DISCORD_TOKEN="your-discord-bot-token"

Ne commitez jamais aucun de ces deux secrets. Si un jeton fuit, réinitialisez-le dans le tableau de bord correspondant. Pour le côté LLM, les docs de démarrage rapide montrent le même appel en curl et Node si vous préférez un autre langage.

Un bot fonctionnel en environ 50 lignes

Ce bot répond lorsqu'on le mentionne. Il conserve les 20 derniers messages par canal, appelle le modèle avec un prompt de persona et divise les réponses longues pour respecter la limite de message de 2 000 caractères de Discord.

import os
import asyncio
from collections import defaultdict, deque

import discord
from openai import AsyncOpenAI, RateLimitError

ai = AsyncOpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

SYSTEM = (
    "You are Mara, the resident storyteller of a community server for adult "
    "fiction writers. Keep replies under 150 words unless asked for more. "
    "Stay in character, write in plain prose, and ask one question at the end."
)

history = defaultdict(lambda: deque(maxlen=20))
gate = asyncio.Semaphore(6)

intents = discord.Intents.default()
intents.message_content = True
bot = discord.Client(intents=intents)


@bot.event
async def on_message(message):
    if message.author.bot or bot.user not in message.mentions:
        return

    text = message.clean_content.replace("@" + bot.user.display_name, "").strip()
    if not text:
        return

    log = history[message.channel.id]
    log.append({"role": "user", "content": message.author.display_name + ": " + text})

    async with gate:
        async with message.channel.typing():
            try:
                resp = await ai.chat.completions.create(
                    model="uncensored",
                    messages=[{"role": "system", "content": SYSTEM}, *log],
                    temperature=0.8,
                    max_tokens=500,
                )
            except RateLimitError:
                await message.reply("I am busy right now. Try again in a few seconds.")
                return

    reply = resp.choices[0].message.content or ""
    log.append({"role": "assistant", "content": reply})

    for i in range(0, len(reply), 1900):
        await message.reply(reply[i:i + 1900])


bot.run(os.environ["DISCORD_TOKEN"])

Exécutez-le avec python bot.py, mentionnez le bot dans un canal et vous devriez voir une réponse. L'indicateur de frappe s'affiche pendant que la requête est en cours, ce qui rend l'attente plus courte.

Rédigez un prompt système qui maintient une persona

Le prompt système fait la majeure partie du travail dans un bot de chat. Un bon prompt est court et spécifique : qui est le bot, quelle est la longueur de ses réponses et que doit-il faire lorsque la conversation dévie. Comparez deux versions.

Un prompt faible dit « sois un assistant utile ». Un plus fort donne un rôle, une limite de longueur et une habitude : « Tu es Mara, une conteuse. Réponds en moins de 150 mots. Termine par une question qui fait avancer la scène. » La seconde donne au modèle quelque chose à quoi se raccrocher sur une douzaine de tours, et la limite de longueur maintient également vos coûts prévisibles.

Quelques points pratiques tirés de l'exécution de bots de chat :

  • Préfixez chaque tour utilisateur avec le nom de l'auteur, comme le fait le code. Dans un canal partagé, le modèle ne peut autrement pas distinguer les personnes.
  • Placez les règles de votre serveur dans le prompt système, tels que les sujets à éviter ou un style maison. Le modèle est ajusté pour répondre sans refus de contenu pour une utilisation adulte légale, donc les limites que vous souhaitez doivent provenir de votre prompt et de votre modération, et non du modèle.
  • Gardez la persona constante. Si vous le modifiez souvent, les anciens tours dans l'historique contrediront les nouvelles instructions.

Contexte, historique et la fenêtre de 100 000 tokens

La fenêtre de contexte est de 100 000 tokens, prompt plus complétion. Un historique roulant de 20 messages est loin d'atteindre cette limite, et c'est volontaire. L'API est sans état : chaque requête doit porter toute la conversation que vous voulez que le modèle voie, donc chaque tour supplémentaire que vous conservez est payé à nouveau sur chaque appel suivant.

Choisissez une longueur d'historique en fonction de la mémoire dont le bot a besoin. Un bot de chat décontracté fonctionne avec 10 à 20 messages. Un jeu de rôle à long terme peut en avoir besoin de plus, et pour cela une approche courante consiste à résumer les anciens tours en une note courte conservée près du haut du prompt, puis à supprimer les originaux. Utilisez un deuxième appel de modèle pour écrire le résumé lorsque l'historique dépasse une taille que vous choisissez.

L'historique par canal, comme dans le code, garde les conversations séparées. Si vous voulez aussi une mémoire par utilisateur entre les canaux, stockez des notes dans une base de données et ajoutez-les au prompt système pour cet utilisateur. Cela relève de votre application, car l'API elle-même ne conserve rien entre les appels. Pour la confidentialité, notez que les prompts envoyés à cette API ne sont pas utilisés pour l'entraînement ; consultez la page confidentialité pour les détails.

Limites de débit sur un serveur chargé

Une clé complète permet 8 requêtes simultanées et 300 requêtes par minute. Une clé d'essai permet 2 et 60. Un serveur calme ne le remarquera jamais, mais un canal populaire peut envoyer une rafale de mentions en même temps.

Le asyncio.Semaphore(6) dans le code limite le bot à 6 appels en cours, donc il n'atteint jamais le plafond de 8 et laisse de la place pour un second script utilisant la même clé. Sur une clé d'essai, réglez-le à 2. Si vous dépassez une limite, l'API renvoie HTTP 429 : rate_limited pour les requêtes par minute, concurrency pour trop de demandes à la fois. Une surcharge temporaire donne également 429 avec Retry-After: 5. Le client OpenAI réessaie certaines d'entre elles par défaut, et le code ci-dessus répond avec un message poli si les réessais s'épuisent.

Le streaming mérite une note. Si vous modifiez le message Discord au fur et à mesure de l'arrivée des tokens, la requête conserve son slot de concurrence jusqu'à la fin du flux, et Discord limite la vitesse à laquelle vous pouvez modifier les messages. Pour la plupart des bots, une seule réponse après la réponse complète est plus simple et fiable.

Coût d'exécution d'un bot Discord

La tarification est de 0,15 $ par 1M de tokens d'entrée et 0,50 $ par 1M de tokens de sortie, depuis le crédit prépayé. Calculez une réponse d'abord. Disons que le prompt système plus 20 messages d'historique font 1 500 tokens d'entrée, et que la réponse est de 200 tokens.

  • Entrée : 1 500 / 1 000 000 x 0,15 $ = 0,000225 $
  • Sortie : 200 / 1 000 000 x 0,50 $ = 0,0001 $
  • Total : 0,000325 $ par réponse, donc 1 000 réponses coûtent 0,325 $

Maintenant un cas plus lourd avec 3 000 tokens d'entrée et 300 tokens de sortie : 0,00045 $ + 0,00015 $ = 0,0006 $ par réponse, ou 0,60 $ pour 1 000 réponses. Un serveur qui reçoit 500 réponses par jour à cette taille dépense environ 0,30 $ par jour, soit environ 9 $ sur 30 jours.

Le rechargement minimum est de 20 $ (tout montant entier jusqu'à 500 $), avec un bonus de 5 % à partir de 50 $, 10 % à partir de 100 $ et 15 % à partir de 200 $. Le crédit n'expire jamais, et les requêtes échouées ou refusées ne sont pas facturées. Payez par carte (Visa, Mastercard, Apple Pay, Google Pay) ou crypto (USDT sur TRC20, USDC sur Base). Plus de détails sur la page tarification.

Règles et sécurité pour les communautés adultes

Le modèle sert une utilisation adulte légale, et la limite stricte est que le contenu sexuel impliquant des mineurs n'est jamais autorisé. Si votre serveur héberge des fictions ou du jeu de rôle pour adultes, restez entre adultes : restreignez l'accès aux canaux dans les paramètres de Discord, indiquez vos règles dans le sujet du canal et modérez. Lisez les politiques actuelles de développeur et de communauté de Discord avant de lancer, car elles s'appliquent à votre bot indépendamment de ce que le modèle écrira.

Journalisez les IDs de requête. Chaque réponse API inclut X-Request-Id, ce qui aide lorsque vous contactez le support pour un appel spécifique. L'en-tête X-Balance-USD permet au bot de vous avertir dans un canal admin lorsque le crédit est faible, afin qu'il ne se taise jamais sans préavis.

Questions et réponses

Quelle bibliothèque utiliser pour appeler l'API depuis un bot Discord ?

Utilisez le package Python openai avec AsyncOpenAI, définissez base_url sur https://api.getaiapikey.com/v1, et utilisez le modèle uncensored. Tout client compatible OpenAI fonctionne de la même manière.

Puis-je tester le bot sans payer ?

Oui. Les nouveaux utilisateurs peuvent réclamer 0,50 $ de crédit d'essai en un clic sur la page clé API. Il dure 7 jours, ne nécessite pas de carte, et la clé d'essai permet 2 requêtes simultanées et 60 par minute.

Combien de messages le bot peut-il mémoriser ?

La fenêtre de contexte est de 100 000 tokens, mais vous choisissez la quantité d'historique à renvoyer. La plupart des bots conservent 10 à 20 messages par canal pour maîtriser les coûts.

Le bot peut-il lire des images ou répondre par la voix ?

Non. Cette API gère uniquement du texte, sans génération d'images, d'audio ou de vidéo, et sans embeddings.

Que se passe-t-il si de nombreuses personnes mentionnent le bot en même temps ?

Les requêtes supplémentaires au-delà de 8 requêtes simultanées ou de 300 par minute reçoivent un code HTTP 429. Utilisez un sémaphore ou une file d'attente dans le bot pour rester en dessous de ces limites.

Votre clé n'est qu'à un formulaire de distance

Créez un compte, copiez la clé, modifiez l'URL de base. C'est toute la configuration.