AR ▾
احصل على مفتاح API

GetAiApiKeyقائمة مراجعة واجهة برمجة تطبيقات الذكاء الاصطناعي للإنتاج

مفتاح LLM API لبوت Discord: دليل الإعداد

يحتاج بوت Discord إلى ثلاثة أشياء من مزود LLM: نقطة نهاية متوافقة مع OpenAI، ومفتاح، وحدود تناسب الخادم المزدحم. إليك بوت يعمل، والإعدادات خلفه، والتكلفة لكل رسالة.

تم التحديث

رسم توضيحي إسقاطي لفقاعات دردشة مرتبطة بخادم، يمثل بوت Discord يستدعي LLM API

نقاط رئيسية

  1. استخدم حزمة openai مع base URL https://api.getaiapikey.com/v1 والنموذج uncensored.
  2. احتفظ بسجل متداول قصير لكل قناة؛ النافذة هي 100,000 رمز لكن التكلفة تزداد مع كل دور يتم إعادة إرساله.
  3. حدد المكالمات قيد التنفيذ عند 6 تقريبًا، لأن المفتاح الكامل يسمح بـ 8 طلبات متزامنة و300 في الدقيقة.
  4. رد دردشة بحجم 1,500 رمز إدخال و200 رمز إخراج يكلف $0.000325.

ما يفعله مفتاح LLM API لبوت Discord

إذا كنت تريد إنشاء روبوت Discord يستخدم مفتاح API لنماذج الذكاء الاصطناعي، فإن المكونات الأساسية بسيطة. يقوم Discord بإيصال الرسالة إلى الكود الخاص بك عبر بوابة الروبوت. يرسل الكود المحادثة الأخيرة إلى نقطة نهاية LLM، ويتلقى النص، ثم ينشره مرة أخرى في القناة. مفتاح API هو ما يثبت لمزود LLM أن الطلب ملكك ويخصمه من رصيدك.

هذه الخدمة متوافقة مع OpenAI، لذا يستخدم البوت حزمة openai الخاصة بـ Python القياسية. تقوم بتغيير إعدادين فقط، وهما Base URL ومعرف النموذج uncensored، وباقي الأمر عبارة عن إكمال محادثة عادي. يمكن للمستخدمين الجدد تجربته أولاً: بعد التسجيل، يوفر صفحة مفتاح API رصيدًا تجريبيًا بقيمة $0.50، صالح لمدة 7 أيام، دون الحاجة إلى بطاقة.

حد واضح ومباشر من البداية. هذا نموذج نصي. لا يمكنه توليد الصور أو الصوت أو الفيديو، ولا يقرأ المرفقات بمفرده. يمكن لروبوتك إعادة توجيه النص من رسالة، لكن أي شيء يتجاوز النص يقع خارج نطاق ما تفعله هذه الـ API.

قبل كتابة الكود

  1. احصل على مفتاح API. سجّل باستخدام Google أو البريد الإلكتروني، أنشئ مفتاحًا على صفحة المفاتيح، واحتفظ به في متغير بيئة.
  2. أنشئ تطبيق Discord. في بوابة مطوري Discord، أضف بوتًا، وانسخ رمز الوصول الخاص به، وفعّل نية محتوى الرسالة (Message Content intent) حتى يتمكن البوت من قراءة نص الرسائل. ادعُ البوت إلى خادمك باستخدام الأذونات اللازمة لقراءة الرسائل وإرسالها.
  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"

لا تقم بإدراج أي من الأسرار في الكود. إذا تسرب رمز الوصول، أعد تعيينه في لوحة التحكم الخاصة بكل خدمة. بالنسبة لواجهة LLM، يعرض دليل البدء السريع نفس الاستدعاء باستخدام curl و Node.js إذا كنت تفضل لغة أخرى.

بوت يعمل في حوالي 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، واذكر البوت في قناة، ويجب أن ترى ردًا. يظهر مؤشر الكتابة أثناء سير الطلب، مما يجعل الانتظار يبدو أقصر.

اكتب موجّه نظام يمسك بالشخصية

يؤدي موجّه النظام معظم العمل في بوت الدردشة. الموجّه الجيد قصير ومحدد: من هو البوت، وما طول ردوده، وماذا يجب أن يفعل عندما تنحرف المحادثة. قارن بين نسختين.

الموجّه الضعيف يقول "كن مساعدًا مفيدًا". الموجّه الأقوى يعطي دورًا، وحدًا للطول، وعادة: "أنت مارا، راوية قصص. رد بأقل من 150 كلمة. أنهِ رسالتك بسؤال واحد يدفع المشهد للأمام." يعطي الثاني النموذج شيئًا يمسك به عبر عشرات الأدوار، وحد الطول أيضًا يجعل التكلفة المتوقعة لديك قابلة للتنبؤ.

بعض النقاط العملية من تشغيل بوتات الدردشة:

  • أضف بادئة لكل دور للمستخدم باسم المتحدث، كما يفعل الكود. في القناة المشتركة، لا يمكن للنموذج تمييز الأشخاص عن بعض البعض.
  • ضع قواعد خادمك في موجّه النظام، مثل المواضيع التي يجب تجنبها أو أسلوب خاص. النموذج مضبوط للإجابة بدون رفض المحتوى للاستخدام القانوني للبالغين، لذا فإن القيود التي تريدها يجب أن تأتي من الموجّه الخاص بك وإشرافك، وليس من النموذج.
  • حافظ على ثبات الشخصية. إذا قمت بتغييرها كثيرًا، فإن الأدوار القديمة في السجل ستتعارض مع التعليمات الجديدة.

السياق، السجل، ونافذة الـ 100,000 رمز

نافذة السياق هي 100,000 رمز، تشمل الموجّه والإكمال. سجل متداول لـ 20 رسالة ليس قريبًا من ذلك، وهذا مقصود. الـ API عديم الحالة: يجب أن يحمل كل طلب كامل المحادثة التي تريد من النموذج رؤيتها، لذا فإن كل دور إضافي تحتفظ به يتم دفع ثمنه مرة أخرى في كل استدعاء لاحق.

اختر طول السجل بناءً على ذاكرة البوت. بوت الدردشة العادي يعمل مع 10 إلى 20 رسالة. قد يحتاج لعب الأدوار طويل الأمد إلى المزيد، ولأجل ذلك، نهج شائع هو تلخيص الأدوار القديمة في ملاحظة قصيرة يتم الاحتفاظ بها في بداية الموجّه، ثم حذف الأصلية. استخدم استدعاء نموذج ثانٍ لكتابة التلخيص عندما يتجاوز السجل حجمًا تختاره.

يحتفظ السجل لكل قناة، كما في الكود، بفصل المحادثات. إذا كنت تريد أيضًا ذاكرة لكل مستخدم عبر القنوات، احفظ ملاحظات في قاعدة بيانات وأضفها إلى موجّه النظام لذلك المستخدم. هذا جزء من واجهة التطبيق الخاصة بك، لأن الـ API نفسه لا يحتفظ بأي شيء بين الاستدعاءات. للخصوصية، لاحظ أن الموجّهات المرسلة إلى هذه الـ API لا تُستخدم للتدريب؛ انظر صفحة الخصوصية للحصول على التفاصيل.

حدود المعدل على خادم مزدحم

المفتاح الكامل يسمح بـ 8 طلبات متزامنة و300 طلب في الدقيقة. المفتاح التجريبي يسمح بـ 2 و60. الخادم الهادئ لن يلاحظ ذلك، لكن القناة الشائعة قد ترسل دفعة من الإشارات في وقت واحد.

يحد asyncio.Semaphore(6) الموجود في الكود عدد استدعاءات البوت قيد التنفيذ بـ 6، لذا لن يصل إلى الحد الأقصى البالغ 8، ويترك مجالًا لسكربت ثانٍ يستخدم نفس مفتاح API. على مفتاح التجربة، اضبطه على 2. إذا تجاوزت حدًا ما، تُرجع الـ API خطأ HTTP 429: rate_limited للطلبات في الدقيقة، وconcurrency للعدد الكبير من الطلبات في آن واحد. كما يعطي الحمل الزائد المؤقت أيضًا 429 مع Retry-After: 5. يحاول عميل OpenAI إعادة محاولة بعض هذه الطلبات افتراضيًا، والكود أعلاه يعطي رسالة لطيفة إذا نفدت محاولات إعادة المحاولة.

يحتاج البث المتدفق إلى ملاحظة. إذا قمت بتحرير رسالة Discord بينما تصل الرموز، فإن الطلب يحتفظ بفتحة التزامن الخاصة به حتى ينتهي البث، وDiscord يحدد مدى سرعة تحرير الرسائل. لمعظم البوتات، رد واحد بعد الإجابة الكاملة أسهل وموثوق.

تكلفة تشغيل بوت Discord

السعر هو $0.15 لكل مليون رمز إدخال و $0.50 لكل مليون رمز إخراج، من رصيد مسبق الدفع. احسب ردًا واحدًا أولًا. لنفترض أن الموجّه النظامي بالإضافة إلى 20 رسالة من السجل تصل إلى 1,500 رمز إدخال، وأن الإجابة تتكون من 200 رمز.

  • المدخلات: 1,500 / 1,000,000 × $0.15 = $0.000225
  • الإخراج: 200 / 1,000,000 × $0.50 = $0.0001
  • المجموع: $0.000325 لكل رد، لذا فإن 1,000 رد تكلف $0.325

والآن حالة أكثر ثقلًا مع 3,000 رمز إدخال و 300 رمز إخراج: $0.00045 + $0.00015 = $0.0006 لكل رد، أو $0.60 لكل 1,000 رد. خادم يحصل على 500 رد يوميًا بهذا الحجم ينفق حوالي $0.30 يوميًا، أي ما يقارب $9 على مدار 30 يومًا.

أقل مبلغ شحن هو $20 (أي مبلغ صحيح حتى $500)، مع مكافأة 5% من $50، و10% من $100، و15% من $200. الرصيد لا ينتهي، ولا تُحتسب رسوم على الطلبات الفاشلة أو المرفوضة. ادفع بالبطاقة (Visa، Mastercard، Apple Pay، Google Pay) أو بالعملات المشفرة (USDT على TRC20، USDC على Base). المزيد في صفحة الأسعار.

القواعد والسلامة لمجتمعات البالغين

النموذج يخدم الاستخدام القانوني للبالغين، والحد الصارم هو أن المحتوى الجنسي الذي يتضمن قاصرين غير مسموح به أبدًا. إذا كان خادمك يستضيف الخيال الأدبي أو لعب الأدوار للبالغين، فحافظ عليه للبالغين: قيّد الوصول إلى القنوات في إعدادات Discord نفسها، وحدد قواعدك في موضوع القناة، ومارس الإشراف. اقرأ سياسات المطورين والمجتمع الحالية في Discord قبل الإطلاق، لأنها تنطبق على البوت الخاص بك بغض النظر عما سيكتبه النموذج.

سجّل معرفات الطلب. كل استجابة API تتضمن X-Request-Id، مما يساعد عند التواصل مع الدعم بشأن مكالمة محددة. يسمح الرأس X-Balance-USD للبوت بتحذيرك في قناة المشرفين عندما ينفد الرصيد، بحيث لا يصمت دون إشعار.

أسئلة وأجوبة

أي مكتبة أستخدم لاستدعاء الـ API من روبوت Discord؟

استخدم حزمة Python openai مع AsyncOpenAI، اضبط base_url إلى https://api.getaiapikey.com/v1 واستخدم النموذج uncensored. أي عميل متوافق مع OpenAI يعمل بنفس الطريقة.

هل يمكنني اختبار البوت دون الدفع؟

نعم. يمكن للمستخدمين الجدد الحصول على $0.50 من رصيد تجريبي بنقرة واحدة في صفحة مفتاح API. يستمر لمدة 7 أيام، ولا يحتاج إلى بطاقة، ويسمح مفتاح التجربة بإجراء طلبين متزامنين و 60 طلب في الدقيقة.

كم عدد الرسائل التي يمكن للبوت تذكرها؟

النافذة هي 100,000 رمز، لكنك تختار مقدار السجل لإعادة إرساله. تحافظ معظم البوتات على 10 إلى 20 رسالة لكل قناة للتحكم في التكلفة.

هل يمكن للبوت قراءة الصور أو الرد بالصوت؟

لا. يتعامل هذا API مع النصوص فقط، بدون توليد صور أو صوت أو فيديو ولا تضمينات.

ماذا يحدث إذا ذكر الكثير من الناس البوت في وقت واحد؟

تُرجع الطلبات الإضافية فوق 8 متزامنة أو 300 في الدقيقة خطأ HTTP 429. استخدم سيمافور (semaphore) أو طابور في البوت ليبقى ضمن تلك الحدود.

مفتاحك على بُعد استمارة واحدة

أنشئ حساباً، وانسخ المفتاح، ثم غيّر عنوان URL الأساسي. هذه هي الإعدادات الكاملة.