PT ▾
Obter chave de API

GetAiApiKeyChecklist de API de IA para Produção

Chave de API LLM para um bot do Discord: guia de configuração

Um bot do Discord precisa de três coisas de um provedor LLM: um endpoint compatível com OpenAI, uma chave e limites que se adaptem a um servidor movimentado. Aqui está um bot funcional, as configurações por trás dele e o custo por mensagem.

Atualizado

Ilustração isométrica de balões de chat conectados a um rack de servidor, representando um bot do Discord chamando uma API LLM

Pontos principais

  1. Use o pacote openai com URL base https://api.getaiapikey.com/v1 e modelo uncensored.
  2. Mantenha um histórico curto e rotativo por canal; a janela de contexto é de 100.000 tokens, mas o custo aumenta a cada turno reenviado.
  3. Limite as chamadas em andamento em cerca de 6, já que uma chave completa permite 8 requisições simultâneas e 300 por minuto.
  4. Uma resposta de chat com 1.500 tokens de entrada e 200 tokens de saída custa $0,000325.

O que uma chave de API LLM faz para um bot do Discord

Se você quer uma chave de API LLM para um bot do Discord, as partes móveis são simples. O Discord entrega uma mensagem ao seu código por meio de seu gateway de bot. Seu código envia a conversa recente a um endpoint LLM, recebe texto e o publica de volta no canal. A chave de API é o que prova ao provedor LLM que a requisição é sua e a cobra no seu saldo.

Este serviço é compatível com OpenAI, então o bot usa o pacote Python openai padrão. Você altera duas configurações, a URL base e o ID do modelo uncensored, e tudo o mais são conclusões de chat normais. Novos usuários podem experimentar primeiro: após o cadastro, a página da chave de API oferece $0,50 de crédito de teste, válido por 7 dias, sem necessidade de cartão.

Uma fronteira honesta desde o início. Este é um modelo de texto. Ele não pode gerar imagens, voz ou vídeo e não lê anexos por conta própria. Seu bot pode encaminhar texto de uma mensagem, mas qualquer coisa além de texto está fora do que esta API faz.

Antes de escrever código

  1. Obtenha uma chave de API. Entre com Google ou e-mail, crie uma chave na página de chaves e mantenha-a em uma variável de ambiente.
  2. Crie uma aplicação no Discord. No portal de desenvolvedores do Discord, adicione um bot, copie seu token e ative a intenção de Conteúdo de Mensagem para que o bot possa ler o texto das mensagens. Convide-o para o seu servidor com as permissões para ler e enviar mensagens.
  3. Instale as bibliotecas. Você precisa de discord.py e 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"

Nunca faça commit de nenhum dos segredos. Se um token vazar, redefina-o no painel respectivo. Para o lado LLM, a documentação de início rápido mostra a mesma chamada em curl e Node se você preferir outra linguagem.

Um bot funcional em cerca de 50 linhas

Este bot responde quando alguém o menciona. Ele mantém as últimas 20 mensagens por canal, chama o modelo com um prompt de persona e divide respostas longas para caber no limite de 2.000 caracteres do 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"])

Execute-o com python bot.py, mencione o bot em um canal e você deverá ver uma resposta. O indicador de digitação aparece enquanto a requisição está em andamento, o que faz a espera parecer menor.

Escreva um prompt de sistema que mantenha uma persona

O prompt de sistema faz a maior parte do trabalho em um bot de chat. Um bom prompt é curto e específico: quem é o bot, qual o tamanho de suas respostas e o que ele deve fazer quando a conversa se desviar. Compare duas versões.

Um prompt fraco diz "seja um assistente útil". Um mais forte dá um papel, um limite de tamanho e um hábito: "Você é Mara, uma contadora de histórias. Responda em menos de 150 palavras. Termine com uma pergunta que avance a cena." O segundo dá ao modelo algo para se apegar ao longo de uma dúzia de turnos, e o limite de tamanho também mantém seu custo previsível.

Alguns pontos práticos ao executar bots de chat:

  • Adicione o nome do falante como prefixo em cada turno do usuário, como faz o código. Em um canal compartilhado, o modelo não consegue distinguir as pessoas.
  • Coloque regras do seu servidor no prompt de sistema, como tópicos a evitar ou um estilo próprio. O modelo é ajustado para responder sem recusas de conteúdo para uso adulto legal, então os limites que você deseja devem vir do seu prompt e da sua moderação, não do modelo.
  • Mantenha a persona estável. Se você a alterar com frequência, os turnos antigos no histórico contradirão as novas instruções.

Contexto, histórico e a janela de 100.000 tokens

A janela de contexto é de 100.000 tokens, prompt mais conclusão. Um histórico rotativo de 20 mensagens está longe disso, e isso é intencional. A API é stateless: cada requisição deve carregar toda a conversa que você deseja que o modelo veja, então cada turno extra que você mantém é pago novamente em cada chamada subsequente.

Escolha um tamanho de histórico com base na memória de que o bot precisa. Um bot de chat casual funciona com 10 a 20 mensagens. Um roleplay de longa duração pode precisar de mais, e para isso uma abordagem comum é resumir turnos antigos em uma nota curta mantida no topo do prompt, e depois descartar os originais. Use uma segunda chamada de modelo para escrever o resumo quando o histórico passar de um tamanho que você escolher.

Histórico por canal, como no código, mantém as conversas separadas. Se você também quiser memória por usuário entre canais, armazene notas em um banco de dados e adicione-as ao prompt de sistema para esse usuário. Essa parte é responsabilidade do seu aplicativo, já que a API em si não mantém nada entre chamadas. Para privacidade, observe que os prompts enviados para esta API não são usados para treinamento; consulte a página de privacidade para os detalhes.

Limites de requisições em um servidor movimentado

Uma chave completa permite 8 requisições simultâneas e 300 requisições por minuto. Uma chave de teste permite 2 e 60. Um servidor tranquilo nunca nota, mas um canal popular pode enviar uma rajada de menções de uma vez.

O asyncio.Semaphore(6) no código limita o bot a 6 chamadas em andamento, para que ele nunca atinja o limite de 8 e deixe espaço para um segundo script usando a mesma chave. Em uma chave de teste, defina para 2. Se você exceder um limite, a API retorna HTTP 429: rate_limited para requisições por minuto, concurrency para muitos ao mesmo tempo. Sobrecarga temporária também dá 429 com Retry-After: 5. O cliente OpenAI tenta novamente alguns desses por padrão, e o código acima responde com uma mensagem educada se as tentativas se esgotarem.

O streaming merece uma nota. Se você editar a mensagem do Discord conforme os tokens chegam, a requisição mantém seu slot de concorrência até o fim do stream, e o Discord limita a velocidade com que você pode editar mensagens. Para a maioria dos bots, uma única resposta após a resposta completa é mais simples e confiável.

Quanto custa executar um bot do Discord

O preço é $0,15 por 1M de tokens de entrada e $0,50 por 1M de tokens de saída, a partir de crédito pré-pago. Calcule uma resposta primeiro. Digamos que o prompt de sistema mais 20 mensagens de histórico totalizem 1.500 tokens de entrada, e a resposta seja de 200 tokens.

  • Entrada: 1.500 / 1.000.000 x $0,15 = $0,000225
  • Saída: 200 / 1.000.000 x $0,50 = $0,0001
  • Total: $0,000325 por resposta, então 1.000 respostas custam $0,325

Agora um caso mais pesado com 3.000 tokens de entrada e 300 tokens de saída: $0,00045 + $0,00015 = $0,0006 por resposta, ou $0,60 por 1.000 respostas. Um servidor que recebe 500 respostas por dia nesse tamanho gasta cerca de $0,30 por dia, aproximadamente $9 em 30 dias.

A menor recarga é de $20 (qualquer valor inteiro até $500), com um bônus de 5% a partir de $50, 10% a partir de $100 e 15% a partir de $200. O crédito nunca expira e as requisições falhas ou recusadas não são cobradas. Pague com cartão (Visa, Mastercard, Apple Pay, Google Pay) ou cripto (USDT na TRC20, USDC na Base). Mais na página de preços.

Regras e segurança para comunidades adultas

O modelo serve para uso adulto legal, e o limite rígido é que conteúdo sexual envolvendo menores de idade nunca é permitido. Se o seu servidor hospeda ficção ou roleplay para adultos, mantenha-o para adultos: restrinja canais nas próprias configurações do Discord, declare suas regras no tópico do canal e modere. Leia as políticas atuais de desenvolvedores e comunidade do Discord antes de lançar, já que elas se aplicam ao seu bot independentemente do que o modelo escrever.

Registre IDs de requisição. Cada resposta de API inclui X-Request-Id, o que ajuda quando você entra em contato com o suporte sobre uma chamada específica. O cabeçalho X-Balance-USD permite que o bot avise você em um canal de administração quando o crédito estiver baixo, para que ele nunca fique em silêncio sem aviso.

Perguntas e respostas

Qual biblioteca usar para chamar a API de um bot do Discord?

Use o pacote openai Python com AsyncOpenAI, defina base_url para https://api.getaiapikey.com/v1, e use o modelo uncensored. Qualquer cliente compatível com OpenAI funciona da mesma forma.

Posso testar o bot sem pagar?

Sim. Novos usuários podem obter $0,50 de crédito de teste com um clique na página da chave de API. Ele dura 7 dias, não precisa de cartão e a chave de teste permite 2 requisições simultâneas e 60 por minuto.

Quantas mensagens o bot pode lembrar?

A janela de contexto é de 100.000 tokens, mas você escolhe quanto histórico reenviar. A maioria dos bots mantém de 10 a 20 mensagens por canal para controlar o custo.

O bot pode ler imagens ou responder com voz?

Não. Esta API lida apenas com texto, sem geração de imagem, áudio ou vídeo e sem embeddings.

O que acontece se muitas pessoas mencionarem o bot ao mesmo tempo?

Requisições extras acima de 8 simultâneas ou 300 por minuto recebem HTTP 429. Use um semáforo ou fila no bot para mantê-lo abaixo desses limites.

Sua chave está a um formulário de distância

Crie uma conta, copie a chave e altere a URL base. Essa é toda a configuração.