TH ▾
รับคีย์ API

GetAiApiKeyเช็คลิสต์ API AI สำหรับใช้งานจริง

คีย์ API LLM สำหรับบอท Discord: คู่มือการตั้งค่า

บอท Discord ต้องการสามสิ่งจากผู้ให้บริการ LLM: เอนด์พอยต์ที่เข้ากันได้กับ OpenAI คีย์ และขีดจำกัดที่เหมาะสมกับเซิร์ฟเวอร์ที่มีผู้ใช้หนาแน่น นี่คือบอทที่ใช้งานได้ การตั้งค่าเบื้องหลัง และค่าใช้จ่ายต่อข้อความ

อัปเดต

ภาพประกอบไอโซเมตริกของฟองข้อความที่เชื่อมต่อกับแร็คเซิร์ฟเวอร์ แสดงถึงบอท Discord ที่เรียกใช้ API LLM

ประเด็นสำคัญ

  1. ใช้แพ็กเกจ openai พร้อม base URL https://api.getaiapikey.com/v1 และโมเดล uncensored
  2. เก็บประวัติแบบเลื่อนที่สั้นๆ ต่อช่อง; หน้าต่างบริบทคือ 100,000 โทเคน แต่ค่าใช้จ่ายเพิ่มขึ้นตามทุกเทิร์นที่ส่งซ้ำ
  3. จำกัดการเรียกใช้งานที่กำลังดำเนินการไว้ที่ประมาณ 6 เนื่องจากคีย์เต็มรูปแบบอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที
  4. การตอบกลับแชทที่มีอินพุต 1,500 โทเคนและเอาต์พุต 200 โทเคนมีค่าใช้จ่าย $0.000325

คีย์ API LLM ทำอะไรสำหรับบอท Discord

หากคุณต้องการคีย์ API LLM สำหรับบอท Discord ส่วนประกอบที่เคลื่อนไหวนั้นเรียบง่าย Discord ส่งข้อความไปยังโค้ดของคุณผ่านเกตเวย์บอท โค้ดของคุณส่งบทสนทนาล่าสุดไปยังเอนด์พอยต์ LLM รับข้อความ และโพสต์กลับไปยังช่อง คีย์ API คือสิ่งที่พิสูจน์ให้ผู้ให้บริการ LLM ทราบว่าคำขอนี้เป็นของคุณและเรียกเก็บเงินไปยังยอดคงเหลือของคุณ

บริการนี้เข้ากันได้กับ OpenAI ดังนั้นบอทจึงใช้แพ็กเกจ Python openai มาตรฐาน คุณเปลี่ยนการตั้งค่าสองอย่าง คือ base URL และ model ID uncensored ส่วนที่เหลือเป็นการสร้างการตอบกลับแบบแชทตามปกติ ผู้ใช้ใหม่สามารถลองใช้ก่อนได้: หลังจากสมัครสมาชิก หน้า API key จะให้เครดิตทดลองใช้มูลค่า $0.50 ใช้ได้ภายใน 7 วัน ไม่ต้องใช้บัตร

ขอบเขตที่จริงใจข้อหนึ่งก่อนอื่น บริการนี้เป็นโมเดลข้อความเท่านั้น ไม่สามารถสร้างภาพ เสียง หรือวิดีโอได้ และไม่อ่านไฟล์แนบด้วยตัวเอง บอทของคุณสามารถส่งต่อข้อความจากข้อความแชทได้ แต่สิ่งที่เกินจากข้อความอยู่นอกขอบเขตการทำงานของ API นี้

ก่อนเขียนโค้ด

  1. รับ API key สมัครสมาชิกด้วย 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 เอกสารquickstartแสดงการเรียกใช้เดียวกันใน curl และ Node หากคุณต้องการใช้ภาษาอื่น

บอทที่ใช้งานได้จริงในประมาณ 50 บรรทัด

บอทนี้จะตอบเมื่อมีคนกล่าวถึงบอท บอทจะเก็บข้อความล่าสุด 20 ข้อความต่อช่อง เรียกใช้โมเดลด้วยพรอมต์บุคลิกภาพ และแบ่งคำตอบที่ยาวออกเพื่อให้พอดีกับขีดจำกัดข้อความ 2,000 ตัวอักษรของ 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"])

รันด้วยคำสั่ง python bot.py กล่าวถึงบอทในช่อง และคุณจะเห็นการตอบกลับ ตัวบ่งชี้การพิมพ์จะแสดงขณะคำขออยู่ระหว่างดำเนินการ ซึ่งทำให้การรอคอยรู้สึกสั้นลง

เขียนพรอมต์ระบบที่กำหนดบุคลิกภาพ

พรอมต์ระบบทำหน้าที่ส่วนใหญ่ในบอทแชท พรอมต์ที่ดีนั้นสั้นและเฉพาะเจาะจง: บอทคือใคร คำตอบยาวแค่ไหน และควรทำอะไรเมื่อบทสนทนาเบี่ยงเบน เปรียบเทียบสองเวอร์ชัน

พรอมต์ที่อ่อนแอจะบอกว่า "จงเป็นผู้ช่วยที่มีประโยชน์" ส่วนพรอมต์ที่แข็งแกร่งกว่าจะกำหนดบทบาท ขีดจำกัดความยาว และนิสัย: "คุณคือมารา นักเล่าเรื่อง ตอบกลับภายใน 150 คำ และจบด้วยคำถามหนึ่งข้อที่ขับเคลื่อนฉากไปข้างหน้า" พรอมต์ที่สองมอบสิ่งที่โมเดลยึดถือได้ตลอดหลายสิบรอบ และขีดจำกัดความยาวยังช่วยให้ต้นทุนของคุณคาดเดาได้

จุดปฏิบัติได้จริงจากการรันบอทแชท:

  • เพิ่มคำนำหน้าแต่ละเทิร์นของผู้ใช้ด้วยชื่อผู้พูด ตามที่โค้ดทำ ในช่องที่แชร์ โมเดลไม่สามารถแยกแยะผู้คนออกจากกันได้หากไม่มีสิ่งนี้
  • ใส่กฎสำหรับเซิร์ฟเวอร์ของคุณในพรอมต์ระบบ เช่น หัวข้อที่ควรหลีกเลี่ยงหรือสไตล์การเขียนของคุณเอง โมเดลได้รับการปรับแต่งให้ตอบโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย ดังนั้นขีดจำกัดที่คุณต้องการต้องมาจากพรอมต์และการตรวจสอบของคุณ ไม่ใช่จากโมเดล
  • รักษาบุคลิกภาพให้คงที่ หากคุณเปลี่ยนบ่อย เทิร์นเก่าในประวัติจะขัดกับคำแนะนำใหม่

บริบท ประวัติ และหน้าต่าง 100,000 โทเคน

หน้าต่างบริบทมีขนาด 100,000 โทเคน รวมพรอมต์และการสร้างข้อความ ประวัติแบบเลื่อน 20 ข้อความนั้นไม่ใกล้เคียงกับขีดจำกัดนั้น และนั่นเป็นไปโดยเจตนา API เป็นแบบไร้สถานะ: ทุกคำขอต้องส่งการสนทนาทั้งหมดที่คุณต้องการให้โมเดลเห็น ดังนั้นทุกเทิร์นเพิ่มเติมที่คุณเก็บไว้จะถูกเรียกเก็บเงินอีกครั้งในการเรียกใช้ทุกครั้งถัดไป

เลือกความยาวของประวัติตามปริมาณหน่วยความจำที่บอทต้องการ บอทแชททั่วไปทำงานได้กับข้อความ 10 ถึง 20 ข้อความ การเล่นบทบาทสมมติ (roleplay) ระยะยาวอาจต้องการมากกว่านั้น และแนวทางทั่วไปคือการสรุปการสนทนาเก่าให้เป็นบันทึกสั้นๆ ที่เก็บไว้ใกล้ส่วนบนของพรอมต์ จากนั้นตัดข้อความต้นฉบับออก ใช้การเรียกใช้โมเดลที่สองเพื่อเขียนสรุปเมื่อประวัติมีขนาดเกินที่คุณกำหนด

ประวัติแยกตามช่อง ตามที่แสดงในโค้ด จะแยกการสนทนาออกจากกัน หากคุณต้องการหน่วยความจำแยกตามผู้ใช้ข้ามช่อง ให้เก็บบันทึกในฐานข้อมูลและเพิ่มลงในพรอมต์ระบบสำหรับผู้ใช้รายนั้น ส่วนนี้เป็นหน้าที่ของแอปพลิเคชันของคุณ เนื่องจาก API ไม่เก็บข้อมูลใดๆ ระหว่างการเรียกใช้ สำหรับความเป็นส่วนตัว โปรดทราบว่าพรอมต์ที่ส่งไปยัง API นี้ไม่ถูกใช้ในการฝึกฝน ดูรายละเอียดได้ที่ หน้าความเป็นส่วนตัว

ขีดจำกัดอัตราบนเซิร์ฟเวอร์ที่แออัด

คีย์เต็มจำนวนอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที คีย์ทดลองอนุญาตให้ทำ 2 และ 60 ตามลำดับ เซิร์ฟเวอร์ที่เงียบสงบจะไม่รู้สึกถึงสิ่งนี้ แต่ช่องยอดนิยมอาจส่งการกล่าวถึงพร้อมกันเป็นชุดได้

asyncio.Semaphore(6) ในโค้ดจำกัดบอทให้เรียกใช้พร้อมกันได้ 6 ครั้ง ดังนั้นจึงไม่แตะค่าสูงสุด 8 และเหลือพื้นที่สำหรับสคริปต์ที่สองที่ใช้คีย์เดียวกัน บนคีย์ทดลอง ให้ตั้งค่าเป็น 2 หากเกินขีดจำกัด API จะส่ง HTTP 429: rate_limited สำหรับคำขอต่อนาที และ concurrency สำหรับจำนวนที่มากเกินไปพร้อมกัน การโอเวอร์โหลดชั่วคราวยังให้ 429 พร้อม Retry-After: 5 ไคลเอนต์ OpenAI จะลองเรียกซ้ำคำขอเหล่านี้บางส่วนโดยค่าเริ่มต้น และโค้ดด้านบนจะตอบกลับด้วยข้อความสุภาพเมื่อการลองซ้ำหมดลง

สตรีมมิงสมควรได้รับการกล่าวถึง หากคุณแก้ไขข้อความ Discord เมื่อโทเคนมาถึง คำขอจะครอบครองสล็อตการทำงานพร้อมกันจนกว่าสตรีมจะสิ้นสุด และ Discord จำกัดความเร็วในการแก้ไขข้อความ สำหรับบอทส่วนใหญ่ การตอบกลับครั้งเดียวหลังจากคำตอบเต็มรูปแบบนั้นง่ายกว่าและเชื่อถือได้มากกว่า

ต้นทุนการรัน Discord bot

ราคาอยู่ที่ $0.15 ต่อ 1M โทเคนอินพุต และ $0.50 ต่อ 1M โทเคนเอาต์พุต จากเครดิตแบบเติมเงินล่วงหน้า ให้คำนวณการตอบกลับหนึ่งครั้งก่อน สมมติว่าพรอมต์ระบบบวกประวัติ 20 ข้อความ มีโทเคนอินพุตรวม 1,500 โทเคน และคำตอบมี 200 โทเคน

  • อินพุต: 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 โทเคน: $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) หรือ crypto (USDT บน TRC20, USDC บน Base) ดูเพิ่มเติมที่ หน้าราคา

กฎและความปลอดภัยสำหรับชุมชนผู้ใหญ่

โมเดลรองรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย และขีดจำกัดแข็งคือเนื้อหาทางเพศที่เกี่ยวข้องกับผู้เยาว์ไม่อนุญาตเด็ดขาด หากเซิร์ฟเวอร์ของคุณโฮสต์นิยายหรือการเล่นบทบาทสมมติสำหรับผู้ใหญ่ ให้จำกัดเฉพาะผู้ใหญ่: จำกัดการเข้าถึงช่องผ่านการตั้งค่าของ Discord เอง ระบุกฎของคุณในหัวข้อช่อง และดูแลเนื้อหา อ่านนโยบายนักพัฒนาและชุมชนปัจจุบันของ Discord ก่อนเปิดตัว เนื่องจากนโยบายเหล่านี้ใช้กับบอทของคุณโดยไม่ขึ้นอยู่กับสิ่งที่โมเดลจะเขียน

บันทึกรหัสคำขอ การตอบกลับ API ทุกครั้งมี X-Request-Id ซึ่งช่วยเมื่อคุณติดต่อ support เกี่ยวกับคำขอเฉพาะ เฮดเดอร์ X-Balance-USD ช่วยให้บอทเตือนคุณในช่องผู้ดูแลเมื่อเครดิตเหลือน้อย ดังนั้นจึงไม่เงียบไปโดยไม่มีประกาศ

ถาม-ตอบ

ฉันใช้ไลบรารีใดเพื่อเรียก API จาก Discord bot?

ใช้แพ็กเกจ openai Python พร้อม AsyncOpenAI ตั้งค่า base_url เป็น https://api.getaiapikey.com/v1 และใช้โมเดล uncensored ไคลเอนต์ที่เข้ากันได้กับ OpenAI ใดๆ ก็ทำงานในลักษณะเดียวกัน

ฉันสามารถทดสอบบอทโดยไม่ต้องจ่ายเงินได้หรือไม่?

ใช่ ผู้ใช้ใหม่สามารถรับเครดิตทดลองใช้ $0.50 ได้ด้วยการคลิกเดียวที่หน้าคีย์ API มันใช้งานได้ 7 วัน ไม่ต้องใช้บัตร และคีย์ทดลองอนุญาตให้ทำ คำขอพร้อมกันได้ 2 คำขอและ 60 คำขอต่อนาที

บอทจดจำข้อความได้กี่ข้อความ?

หน้าต่างบริบทคือ 100,000 โทเคน แต่คุณเลือกได้ว่าจะส่งประวัติซ้ำกี่ข้อความ บอทส่วนใหญ่เก็บ 10 ถึง 20 ข้อความต่อช่องเพื่อควบคุมต้นทุน

บอทสามารถอ่านรูปภาพหรือตอบกลับด้วยเสียงได้หรือไม่?

ไม่ API นี้จัดการเฉพาะข้อความเท่านั้น ไม่มีการสร้างรูปภาพ เสียง หรือวิดีโอ และไม่มี embeddings

เกิดอะไรขึ้นหากมีคนกล่าวถึงบอทจำนวนมากพร้อมกัน?

คำขอที่เกิน 8 คำขอพร้อมกันหรือ 300 คำขอต่อนาที จะได้รับ HTTP 429 ใช้ semaphore หรือคิวในบอทเพื่อให้อยู่ภายใต้ขีดจำกัดเหล่านั้น

คีย์ของคุณอยู่ห่างแค่แบบฟอร์มเดียว

สร้างบัญชี คัดลอกคีย์ และเปลี่ยน base URL นั่นคือการตั้งค่าทั้งหมด