繁中 ▾
取得 API 金鑰

GetAiApiKey生產環境人工智慧 API 檢查清單

Discord 機器人 LLM API 金鑰:設定指南

Discord 機器人需要來自 LLM 供應商的三樣東西:一個 OpenAI 相容的端點、一個金鑰,以及符合繁忙伺服器需求的限制。以下是一個可運作的機器人、其背後的設定,以及每則訊息的成本。

更新於

等距插圖,顯示連結至伺服器機櫃的對話氣泡,代表 Discord 機器人呼叫 LLM API

重點摘要

  1. 使用 openai 套件,base URL 為 https://api.getaiapikey.com/v1,模型為 uncensored。
  2. 針對每個頻道保留短暫的滾動歷史記錄;上下文視窗為 100,000 token,但每次重新傳送輪次都會增加成本。
  3. 將進行中的呼叫限制在 6 個左右,因為完整金鑰允許 8 個並行請求與每分鐘 300 個請求。
  4. 1,500 個輸入 token 與 200 個輸出 token 的回覆成本為 $0.000325。

LLM API 金鑰對 Discord 機器人的作用

如果你想要一個 llm api key discord bot,其運作部件很簡單。Discord 透過其機器人閘道將訊息傳遞給你的程式碼。你的程式碼將最近的對話傳送至 LLM 端點,接收文字,然後將其發布回頻道。API 金鑰用於向 LLM 供應商證明請求屬於你,並將其計費到你的餘額。

此服務與 OpenAI 相容,因此機器人使用標準的 openai Python 套件。你只需變更兩個設定:base URL 與模型 ID uncensored,其餘部分皆為正常的聊天完成。新用戶可先試用:註冊後,API 金鑰頁面 提供 $0.50 的免費試用額度,有效期 7 天,無需綁定信用卡。

先誠實說明一個限制。這是一個文字模型。它無法生成圖片、語音或影片,也不會自行讀取附件。你的機器人可以轉發訊息中的文字,但超出文字範圍的功能不在此 API 的處理範圍內。

編寫程式碼之前

  1. 取得 API 金鑰。 使用 Google 或電子郵件註冊,在金鑰頁面建立金鑰,並將其保存在環境變數中。
  2. 建立 Discord 應用程式。 在 Discord 開發人員入口網站中新增機器人,複製其 token,並啟用「訊息內容」意圖,以便機器人讀取訊息文字。使用讀取和發送訊息的權限將其邀請至你的伺服器。
  3. 安裝程式庫。 你需要 discord.py 和 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"

切勿將任何金鑰提交至程式碼庫。如果 token 洩漏,請在各自的儀表板中重設。對於 LLM 側,快速入門文件 展示了相同的 curl 和 Node 呼叫,如果你偏好其他語言可參考。

約 50 行程式碼即可運作的機器人

此機器人在有人提及它時回應。它保留每個頻道最後 20 則訊息,使用角色提示詞呼叫模型,並將長答案分割以符合 Discord 2,000 個字元的訊息限制。

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"])

使用 python bot.py 執行它,在頻道中提及機器人,你應該會看到回覆。在請求進行中時會顯示輸入中指示器,這會讓等待時間感覺較短。

撰寫維持角色的系統提示詞

系統提示詞在聊天機器人中承擔大部分工作。一個好的提示詞應簡短且具體:說明機器人是誰、回覆長度為何,以及當對話偏離時該做什麼。比較兩個版本。

一個弱的提示詞說「成為一個有幫助的助手」。一個更強的提示詞提供角色、長度限制和習慣:「你是 Mara,一個說書人。回覆字數需在 150 字以內。以一個推動場景發展的問題結束。」第二個版本讓模型在十幾輪對話中有所依循,且長度限制也能讓你的成本保持可預測。

從運行聊天機器人中得出的一些實用要點:

  • 如程式碼所示,在每個使用者輪次前加上說話者的名字。在共用頻道中,否則模型無法區分不同的人。
  • 將你伺服器的規則放入系統提示詞中,例如要避免的主題或行文風格。該模型經過調整,可針對合法成人用途無審查地回答,因此你想要的限制必須來自你的提示詞和你的審核機制,而非來自模型。
  • 保持角色一致。如果你經常更改它,歷史記錄中的舊輪次將與新指示矛盾。

上下文、歷史記錄與 100,000 token 視窗

上下文視窗為 100,000 token,包含提示詞與完成內容。20 則訊息的滾動歷史記錄遠低於此限制,這是故意的。API 是無狀態的:每個請求必須攜帶你希望模型看到的完整對話,因此你保留的每個額外輪次在後續每次呼叫時都會再次計費。

根據機器人所需的記憶量選擇歷史長度。一般聊天機器人使用 10 到 20 則訊息即可。長期角色扮演可能需要更多,對此常見的做法是將舊輪次摘要為短筆記保留在提示詞頂部,然後刪除原始內容。當歷史記錄超過你設定的大小時,使用第二次模型呼叫來撰寫摘要。

如程式碼所示的每頻道歷史記錄可保持對話獨立。如果你還想要跨頻道的每位使用者的記憶,請將筆記儲存至資料庫並將其加入該使用者的系統提示詞中。這是應用程式的工作,因為 API 本身在呼叫之間不保留任何內容。關於隱私,請注意發送至此 API 的提示詞不會用於訓練;詳情請見 隱私頁面。

繁忙伺服器上的速率限制

完整金鑰允許 8 個並行請求和每分鐘 300 個請求。試用金鑰允許 2 個和 60 個。安靜的伺服器不會注意到,但熱門頻道可能會同時發送一連串提及。

程式碼中的 asyncio.Semaphore(6) 將機器人限制為 6 個進行中的呼叫,因此它不會達到 8 的上限,並為使用相同金鑰的第二個腳本留出空間。對於試用金鑰,將其設為 2。如果你超過限制,API 會返回 HTTP 429:rate_limited 表示每分鐘請求過多,concurrency 表示同時過多。暫時超載也會返回 429 並帶有 Retry-After: 5。OpenAI 用戶端預設會重試其中一些,上述程式碼在重試耗盡時會回覆一條禮貌的訊息。

串流輸出值得注意。如果你在 token 到達時編輯 Discord 訊息,請求會佔用其並行槽位直到串流結束,而 Discord 限制你編輯訊息的速度。對於大多數機器人來說,在完整答案之後單一回覆更簡單且可靠。

運行 Discord 機器人的成本

定價為每 1M 輸入 token $0.15 和每 1M 輸出 token $0.50,從預付額度扣除。先計算一次回覆。假設系統提示詞加上 20 則歷史訊息共計 1,500 個輸入 token,而答案是 200 個 token。

  • 輸入:1,500 / 1,000,000 x $0.15 = $0.000225
  • 輸出:200 / 1,000,000 x $0.50 = $0.0001
  • 總計:每次回覆 $0.000325,因此 1,000 次回覆成本為 $0.325

現在是一個更重的案例,3,000 個輸入和 300 個輸出 token:$0.00045 + $0.00015 = $0.0006 每次回覆,或每 1,000 次回覆 $0.60。每天收到 500 次回覆的伺服器在此規模下每天花費約 $0.30,30 天約 $9。

最小儲值為 $20(任何整數金額最高 $500),$50 起贈 5%,$100 起贈 10%,$200 起贈 15%。額度永不過期,失敗或被拒絕的請求不會計費。可透過信用卡(Visa、Mastercard、Apple Pay、Google Pay)或加密貨幣(TRC20 上的 USDT、Base 上的 USDC)付款。更多詳情見 定價頁面。

成人社群的規則與安全

該模型服務於合法成人用途,硬性限制是絕不允許涉及未成年人的性內容。如果你的伺服器為成人舉辦小說或角色扮演,請限於成人:在 Discord 自身的設定中限制頻道存取,在頻道主題中聲明規則,並進行審核。在推出前請閱讀 Discord 目前的開發人員和社群政策,因為無論模型寫什麼,這些政策都適用於你的機器人。

記錄請求 ID。每個 API 回應都包含 X-Request-Id,這有助於你聯繫 支援 處理特定呼叫。X-Balance-USD 標頭讓機器人在額度不足時在管理頻道中警告你,以免其無預警停止運作。

問答

我該使用哪個程式庫從 Discord 機器人呼叫 API?

使用 openai Python 套件搭配 AsyncOpenAI,將 base_url 設為 https://api.getaiapikey.com/v1, 並使用 uncensored 模型。任何與 OpenAI 相容的用戶端運作方式皆相同。

我可以免費測試機器人嗎?

可以。新用戶可在 API 金鑰頁面一鍵領取 $0.50 試用額度。有效期為 7 天,無需綁定信用卡,且試用金鑰允許 2 個並行請求,每分鐘 60 次。

機器人能記住多少則訊息?

上下文視窗為 100,000 個 token,但你可以選擇要重新傳送多少歷史記錄。大多數機器人每個頻道保留 10 到 20 則訊息以控制成本。

機器人能讀取圖片或以語音回覆嗎?

否。此 API 僅處理文字,不支援圖像、音訊或影片生成,也不支援 embeddings。

如果許多人同時提及機器人會發生什麼事?

超過 8 個並行請求或每分鐘 300 個請求的額外請求會收到 HTTP 429。在機器人中使用訊號量或佇列,使其低於這些限制。

只差一張表單,即可取得金鑰

建立帳號、複製金鑰、更改基礎 URL。這就是整個設定過程。