VI ▾
Lấy khóa API

GetAiApiKeyDanh sách kiểm tra API AI cho sản xuất

Hướng dẫn thiết lập khóa API LLM cho bot Discord

Một bot Discord cần ba thứ từ nhà cung cấp LLM: một endpoint tương thích OpenAI, một khóa API và các giới hạn phù hợp cho một máy chủ bận rộn. Dưới đây là bot hoạt động, các cài đặt phía sau và chi phí cho mỗi tin nhắn.

Cập nhật

Minh họa đẳng hướng các bong bóng trò chuyện liên kết với máy chủ, đại diện cho bot Discord gọi API LLM

Điểm chính

  1. Sử dụng gói openai với base URL https://api.getaiapikey.com/v1 và mô hình uncensored.
  2. Giữ lịch sử ngắn hạn theo kênh; cửa sổ ngữ cảnh là 100.000 token nhưng chi phí tăng lên với mỗi lượt gửi lại.
  3. Giới hạn các cuộc gọi đang xử lý ở mức khoảng 6, vì khóa đầy đủ cho phép 8 yêu cầu đồng thời và 300 yêu cầu mỗi phút.
  4. Một tin nhắn trả lời với 1.500 token đầu vào và 200 token đầu ra tốn $0,000325.

Khóa API LLM thực hiện những gì cho bot Discord

Nếu bạn muốn có khóa API LLM cho bot Discord, các thành phần vận hành rất đơn giản. Discord gửi tin nhắn đến mã của bạn qua cổng bot. Mã của bạn gửi đoạn hội thoại gần đây đến endpoint LLM, nhận văn bản và đăng lại vào kênh. Khóa API là thứ xác minh với nhà cung cấp LLM rằng yêu cầu thuộc về bạn và tính phí vào số dư của bạn.

Dịch vụ này tương thích với OpenAI, vì vậy bot sử dụng gói Python openai tiêu chuẩn. Bạn chỉ cần thay đổi hai cài đặt: base URL và model ID uncensored, còn lại đều là chat completions thông thường. Người dùng mới có thể thử trước: sau khi đăng ký, trang khóa API cung cấp $0.50 tín dụng dùng thử, có hiệu lực trong 7 ngày, không cần thẻ tín dụng.

Một giới hạn trung thực ngay từ đầu. Đây là mô hình văn bản. Nó không thể tạo ảnh, giọng nói hay video và không tự đọc tệp đính kèm. Bot của bạn có thể chuyển tiếp văn bản từ tin nhắn, nhưng mọi thứ ngoài văn bản nằm ngoài phạm vi hoạt động của API này.

Trước khi viết mã

  1. Lấy khóa API. Đăng ký bằng Google hoặc email, tạo khóa trên trang khóa và lưu nó trong biến môi trường.
  2. Tạo ứng dụng Discord. Trong cổng dành cho nhà phát triển Discord, thêm bot, sao chép token của bot và kích hoạt Message Content intent để bot có thể đọc văn bản tin nhắn. Mời bot vào máy chủ của bạn với các quyền đọc và gửi tin nhắn.
  3. Cài đặt các thư viện. Bạn cần discord.py và 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"

Không bao giờ commit bí mật nào trong hai bí mật này. Nếu một token bị lộ, hãy đặt lại nó trong bảng điều khiển tương ứng. Đối với phía LLM, tài liệu quickstart hiển thị cùng một lệnh gọi bằng curl và Node nếu bạn thích ngôn ngữ khác.

Một bot hoạt động trong khoảng 50 dòng mã

Bot này trả lời khi ai đó đề cập đến nó. Bot giữ 20 tin nhắn gần nhất mỗi kênh, gọi mô hình với prompt nhân vật và chia nhỏ câu trả lời dài để phù hợp với giới hạn tin nhắn 2.000 ký tự của 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"])

Chạy nó bằng python bot.py, đề cập đến bot trong một kênh, và bạn sẽ thấy một phản hồi. Trạng thái đang nhập hiển thị trong khi yêu cầu đang được xử lý, giúp thời gian chờ cảm thấy ngắn hơn.

Viết prompt hệ thống giữ một nhân vật

Prompt hệ thống thực hiện hầu hết công việc trong bot trò chuyện. Một prompt tốt thì ngắn gọn và cụ thể: bot là ai, câu trả lời dài bao nhiêu và bot nên làm gì khi cuộc hội thoại đi chệch hướng. So sánh hai phiên bản.

Một prompt yếu chỉ nói "hãy là một trợ lý hữu ích". Một prompt mạnh hơn cung cấp một vai trò, giới hạn độ dài và một thói quen: "Bạn là Mara, một người kể chuyện. Trả lời dưới 150 từ. Kết thúc bằng một câu hỏi thúc đẩy cốt truyện tiến triển." Prompt thứ hai cung cấp cho mô hình thứ gì đó để bám vào trong nhiều lượt hội thoại, và giới hạn độ dài cũng giúp chi phí của bạn có thể dự đoán được.

Một số điểm thực tế từ việc chạy bot trò chuyện:

  • Đặt tiền tố cho mỗi lượt của người dùng bằng tên của người nói, như cách mã nguồn làm. Trong một kênh chung, nếu không có tiền tố, mô hình sẽ không thể phân biệt được mọi người.
  • Đặt quy tắc cho máy chủ của bạn trong prompt hệ thống, chẳng hạn như các chủ đề cần tránh hoặc phong cách riêng. Mô hình được tinh chỉnh để trả lời mà không từ chối nội dung cho việc sử dụng người lớn hợp pháp, vì vậy các giới hạn bạn muốn phải đến từ prompt và việc kiểm duyệt của bạn, không phải từ mô hình.
  • Giữ nhân vật ổn định. Nếu bạn thay đổi nó thường xuyên, các lượt cũ trong lịch sử sẽ mâu thuẫn với hướng dẫn mới.

Ngữ cảnh, lịch sử và cửa sổ 100.000 token

Cửa sổ ngữ cảnh là 100.000 token, bao gồm prompt và kết quả. Lịch sử cuộn 20 tin nhắn không gần bằng giới hạn đó, và điều đó là có chủ đích. API không có trạng thái: mỗi yêu cầu phải mang toàn bộ cuộc hội thoại mà bạn muốn mô hình thấy, vì vậy mỗi lượt bổ sung bạn giữ lại sẽ phải trả phí lại trong mọi lệnh gọi tiếp theo.

Chọn độ dài lịch sử dựa trên lượng bộ nhớ mà bot cần. Một bot trò chuyện thông thường hoạt động với 10 đến 20 tin nhắn. Một trò nhập vai dài hạn có thể cần nhiều hơn, và để làm điều đó, một phương pháp phổ biến là tóm tắt các lượt cũ thành một ghi chú ngắn được giữ gần đầu prompt, sau đó loại bỏ các bản gốc. Sử dụng một lệnh gọi mô hình thứ hai để viết bản tóm tắt khi lịch sử vượt quá kích thước bạn chọn.

Lịch sử theo kênh, như trong mã, giữ các cuộc hội thoại riêng biệt. Nếu bạn cũng muốn bộ nhớ theo người dùng qua các kênh, hãy lưu các ghi chú trong cơ sở dữ liệu và thêm chúng vào prompt hệ thống cho người dùng đó. Phần đó là việc của ứng dụng của bạn, vì API không giữ bất kỳ dữ liệu nào giữa các lệnh gọi. Về quyền riêng tư, lưu ý rằng các prompt gửi đến API này không được sử dụng để huấn luyện; xem trang quyền riêng tư để biết chi tiết.

Giới hạn tốc độ trên máy chủ bận rộn

Một khóa đầy đủ cho phép 8 yêu cầu đồng thời và 300 yêu cầu mỗi phút. Một khóa dùng thử cho phép 2 và 60. Một máy chủ yên tĩnh sẽ không nhận ra, nhưng một kênh phổ biến có thể gửi một đợt đề cập cùng lúc.

asyncio.Semaphore(6) trong mã giới hạn bot ở 6 lệnh gọi đang thực thi, nên nó không bao giờ chạm ngưỡng 8 và để lại chỗ cho một script thứ hai dùng cùng khóa. Với khóa dùng thử, hãy đặt giá trị này thành 2. Nếu bạn vượt quá giới hạn, API sẽ trả về HTTP 429: rate_limited cho số yêu cầu mỗi phút, concurrency cho quá nhiều yêu cầu cùng lúc. Quá tải tạm thời cũng trả về 429 kèm Retry-After: 5. Client OpenAI tự động thử lại một số trường hợp này, và mã ở trên sẽ trả về một thông báo lịch sự nếu các lần thử lại đã hết.

Truyền phát (streaming) cần một lưu ý. Nếu bạn chỉnh sửa tin nhắn Discord khi các token đến, yêu cầu sẽ giữ lại khe đồng thời của nó cho đến khi luồng kết thúc, và Discord giới hạn tốc độ bạn có thể chỉnh sửa tin nhắn. Đối với hầu hết các bot, một phản hồi duy nhất sau khi câu trả lời đầy đủ sẽ đơn giản và đáng tin cậy hơn.

Chi phí chạy bot Discord là bao nhiêu

Giá là $0,15 cho mỗi 1 triệu token đầu vào và $0,50 cho mỗi 1 triệu token đầu ra, từ tín dụng trả trước. Hãy tính toán một câu trả lời trước. Giả sử prompt hệ thống cộng với 20 tin nhắn lịch sử tạo thành 1.500 token đầu vào, và câu trả lời là 200 token.

  • Đầu vào: 1.500 / 1.000.000 x $0,15 = $0,000225
  • Đầu ra: 200 / 1.000.000 x $0,50 = $0,0001
  • Tổng cộng: $0,000325 cho mỗi câu trả lời, vì vậy 1.000 câu trả lời tốn $0,325

Bây giờ là một trường hợp nặng hơn với 3.000 token đầu vào và 300 token đầu ra: $0,00045 + $0,00015 = $0,0006 cho mỗi câu trả lời, hoặc $0,60 cho 1.000 câu trả lời. Một máy chủ nhận được 500 câu trả lời mỗi ngày ở kích thước đó chi khoảng $0,30 mỗi ngày, khoảng $9 trong 30 ngày.

Số tiền nạp tiền tối thiểu là $20 (bất kỳ số nguyên nào lên đến $500), với tiền thưởng 5% từ $50, 10% từ $100 và 15% từ $200. Tín dụng không bao giờ hết hạn, và các yêu cầu bị lỗi hoặc từ chối không bị tính phí. Thanh toán bằng thẻ (Visa, Mastercard, Apple Pay, Google Pay) hoặc tiền mã hóa (USDT trên TRC20, USDC trên Base). Thêm thông tin trên trang giá cả.

Quy tắc và an toàn cho cộng đồng người lớn

Mô hình phục vụ việc sử dụng hợp pháp cho người lớn, và giới hạn cứng là nội dung tình dục liên quan đến người chưa thành niên không bao giờ được phép. Nếu máy chủ của bạn lưu trữ tiểu thuyết hoặc nhập vai cho người lớn, hãy giữ nó dành cho người lớn: giới hạn quyền truy cập các kênh trong cài đặt của Discord, nêu rõ quy tắc của bạn trong chủ đề kênh và kiểm duyệt. Đọc các chính sách hiện tại của Discord dành cho nhà phát triển và cộng đồng trước khi bạn ra mắt, vì chúng áp dụng cho bot của bạn bất kể mô hình sẽ viết gì.

Ghi lại các ID yêu cầu. Mọi phản hồi API đều bao gồm X-Request-Id, điều này giúp ích khi bạn liên hệ hỗ trợ về một lệnh gọi cụ thể. Header X-Balance-USD cho phép bot cảnh báo bạn trong một kênh quản trị khi tín dụng thấp, để nó không bao giờ im lặng mà không có thông báo.

Hỏi đáp

Tôi nên dùng thư viện nào để gọi API từ bot Discord?

Sử dụng gói Python openai với AsyncOpenAI, đặt base_url thành https://api.getaiapikey.com/v1, và dùng mô hình uncensored. Bất kỳ client tương thích OpenAI nào cũng hoạt động theo cách tương tự.

Tôi có thể kiểm tra bot mà không cần trả tiền không?

Có. Người dùng mới có thể nhận $0.50 tín dụng dùng thử chỉ với một cú nhấp chuột trên trang khóa API. Tín dụng này có hiệu lực trong 7 ngày, không cần thẻ thanh toán và khóa dùng thử cho phép 2 yêu cầu đồng thời và 60 yêu cầu mỗi phút.

Bot có thể nhớ được bao nhiêu tin nhắn?

Cửa sổ ngữ cảnh là 100.000 token, nhưng bạn chọn lượng lịch sử cần gửi lại. Hầu hết các bot chỉ giữ 10 đến 20 tin nhắn mỗi kênh để kiểm soát chi phí.

Bot có thể đọc hình ảnh hoặc trả lời bằng giọng nói không?

Không. API này chỉ xử lý văn bản, không hỗ trợ tạo hình ảnh, âm thanh hoặc video và không có embeddings.

Điều gì xảy ra nếu nhiều người đề cập đến bot cùng một lúc?

Các yêu cầu bổ sung vượt quá 8 yêu cầu đồng thời hoặc 300 yêu cầu mỗi phút sẽ nhận được HTTP 429. Sử dụng một semaphore hoặc hàng đợi trong bot để giữ nó dưới những giới hạn đó.

Khóa của bạn chỉ cách một biểu mẫu

Tạo tài khoản, sao chép khóa, thay đổi base URL. Đó là toàn bộ thiết lập.