GetAiApiKey/生产环境 AI API 检查清单
Discord 机器人 LLM API 密钥:设置指南
Discord 机器人需要 LLM 提供商提供三样东西:兼容 OpenAI 的接口、密钥以及适合繁忙服务器的限制。这里有一个可用的机器人、其背后的设置以及每条消息的成本。
更新于

要点
- 使用 openai 包,基础 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 密钥 Discord 机器人,其组成部分很简单。Discord 通过其机器人网关将消息发送给你的代码。你的代码将最近的对话发送到 LLM 接口,接收文本,然后将其发布回频道。API 密钥用于向 LLM 提供商证明请求属于你,并将其计入你的余额。
该服务兼容 OpenAI,因此机器人使用标准的 openai Python 包。你只需更改两个设置:Base URL 和模型 ID uncensored,其余部分都是正常的聊天补全。新用户可以先试用:注册后,API 密钥页面 提供 $0.50 的免费试用额度,有效期 7 天,无需信用卡。
首先明确一个限制。这是一个文本模型。它无法生成图像、语音或视频,也不能自行读取附件。你的机器人可以转发消息中的文本,但超出文本的部分不在此 API 的功能范围内。
编写代码前
- 获取 API 密钥。 使用 Google 或电子邮件注册,在密钥页面创建一个密钥,并将其保存在环境变量中。
- 创建 Discord 应用程序。 在 Discord 开发者门户中添加机器人,复制其令牌,并启用消息内容意图,以便机器人读取消息文本。使用读取和发送消息的权限将其邀请到你的服务器。
- 安装库。 你需要
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"
不要提交任何密钥。如果令牌泄露,请在相应的仪表板中重置它。对于 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 仅处理文本,不支持图像、音频或视频生成,也不支持嵌入向量。
如果很多人同时提及机器人会发生什么?
超过 8 个并发或每分钟 300 次的请求会返回 HTTP 429。在机器人中使用信号量或队列,使其保持在限制范围内。