GetAiApiKey/生產環境人工智慧 API 檢查清單
Discord 機器人 LLM API 金鑰:設定指南
Discord 機器人需要來自 LLM 供應商的三樣東西:一個 OpenAI 相容的端點、一個金鑰,以及符合繁忙伺服器需求的限制。以下是一個可運作的機器人、其背後的設定,以及每則訊息的成本。
更新於

重點摘要
- 使用 openai 套件,base URL 為 https://api.getaiapikey.com/v1,模型為 uncensored。
- 針對每個頻道保留短暫的滾動歷史記錄;上下文視窗為 100,000 token,但每次重新傳送輪次都會增加成本。
- 將進行中的呼叫限制在 6 個左右,因為完整金鑰允許 8 個並行請求與每分鐘 300 個請求。
- 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 的處理範圍內。
編寫程式碼之前
- 取得 API 金鑰。 使用 Google 或電子郵件註冊,在金鑰頁面建立金鑰,並將其保存在環境變數中。
- 建立 Discord 應用程式。 在 Discord 開發人員入口網站中新增機器人,複製其 token,並啟用「訊息內容」意圖,以便機器人讀取訊息文字。使用讀取和發送訊息的權限將其邀請至你的伺服器。
- 安裝程式庫。 你需要
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。在機器人中使用訊號量或佇列,使其低於這些限制。