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

ประเด็นสำคัญ
- ใช้แพ็กเกจ openai พร้อม base URL https://api.getaiapikey.com/v1 และโมเดล uncensored
- เก็บประวัติแบบเลื่อนที่สั้นๆ ต่อช่อง; หน้าต่างบริบทคือ 100,000 โทเคน แต่ค่าใช้จ่ายเพิ่มขึ้นตามทุกเทิร์นที่ส่งซ้ำ
- จำกัดการเรียกใช้งานที่กำลังดำเนินการไว้ที่ประมาณ 6 เนื่องจากคีย์เต็มรูปแบบอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที
- การตอบกลับแชทที่มีอินพุต 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 นี้
ก่อนเขียนโค้ด
- รับ API key สมัครสมาชิกด้วย Google หรืออีเมล สร้างคีย์ในหน้าคีย์ และเก็บไว้ในตัวแปรสภาพแวดล้อม
- สร้างแอปพลิเคชัน Discord ในพอร์ทัลผู้พัฒนาของ Discord ให้เพิ่มบอท คัดลอกโทเคน และเปิดใช้งาน Message Content intent เพื่อให้บอทสามารถอ่านข้อความแชทได้ เชิญบอทเข้าสู่เซิร์ฟเวอร์ของคุณโดยกำหนดสิทธิ์ให้อ่านและส่งข้อความ
- ติดตั้งไลบรารี คุณต้องการ
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 นั่นคือการตั้งค่าทั้งหมด