th ▾
รับ API key

LLM api no subscription: common integration mistakes

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

อัปเดตล่าสุด

สรุป

  • การตอบแบบสตรีมถูกตัดออกก่อนกำหนดหากคุณไม่วิเคราะห์ส่วนสุดท้ายของ SSE อย่างถูกต้อง
  • หน้าต่างบริบท 100k รวมทั้งโทเคนพรอมต์และคอมพลีชัน จึงต้องใช้กลยุทธ์การตัดทอนอย่างระมัดระวัง
  • การเติมเงินด้วยคริปโตเป็นแบบทันที แต่ต้องตรงกันกับเครือข่ายที่ถูกต้อง (TRC20 vs Base) จึงจะปรากฏในยอดเงินของคุณ
  • การเรียกฟังก์ชันในโมเดลแบบ uncensored อาจส่งคืน JSON ที่ไม่เป็นมาตรฐานหากค่าอุณหภูมิสูงเกินไป

ทำความเข้าใจโมเดลการชำระเงินตามโทเค็น

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

ผู้ให้บริการส่วนใหญ่คิดอัตราค่า不同的人สำหรับโทเคนอินพุตเทียบกับเอาต์พุต ตัวอย่างเช่น บริการ LLM แบบ uncensored บางแห่งกำหนดราคาอินพุตที่ $0.15 ต่อโทเคนล้านตัว และเอาต์พุตที่ $0.50 ต่อโทเคนล้านตัว ความแตกต่างนี้มีอยู่เพราะการสร้างข้อความต้องการการคำนวณมากกว่าการอ่านข้อความอย่างมาก

คุณควรติดตามจำนวน token อย่างใกล้ชิด การตอบกลับยาวๆ เพียงครั้งเดียวอาจเกินต้นทุน input หากคุณไม่ได้ประมาณความยาว output เสมอตรวจสอบ metadata การใช้งานที่คืนใน response headers หรือ body เพื่อติดตามการใช้จ่ายของคุณอย่างแม่นยำ

เหตุผลที่การตอบกลับแบบสตรีมมิ่งของคุณตัดออกก่อนกำหนด

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

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

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

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Tell the story in second person."}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

การจัดการหน้าต่างบริบท 100k อย่างถูกต้อง

ขีดจำกัดหน้าต่างบริบทรวมทั้งคำสั่งของคุณและการสร้างผลลัพธ์ที่คุณไม่สามารถส่งคำสั่งขนาด 100k โทเคนแล้วคาดหวังผลลัพธ์อีก 100k ได้ ความยาวรวมต้องอยู่ในขีดจำกัด

หากคุณส่ง prompt ขนาดใหญ่ พื้นที่สำหรับ response จะลดลง ตัวอย่างเช่น prompt ขนาด 90k tokens จะเหลือพื้นที่ output เพียง 10k tokens ซึ่งอาจทำให้คำตอบที่ยาวถูกตัดออกอย่างกะทันหัน

นับจำนวนโทเค็นฝั่งของคุณเอง ใช้ตัวแยกคำ (tokenizer) ที่ตรงกับระบบการเข้ารหัสของโมเดล เพื่อให้แน่ใจว่าคุณจะไม่เกินขีดจำกัดระหว่างการทำคำขอ หากเกิน เซิร์ฟเวอร์จะส่งข้อผิดพลาดกลับมา

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

การเติมเงิน: ทำไมยอดเงินของคุณยังไม่อัปเดต

การเติมเงินด้วยคริปโตล้มเหลวในการอัปเดตเมื่อคุณส่งโทเค็นไปยังเครือข่ายที่ผิด API ของเรารองรับ USDT บน TRC20 และ USDC บน Base การส่ง USDT บน Ethereum ไปยังที่อยู่ TRC20 จะทำให้เงินสูญหาย

ตรวจสอบพรีฟิกซ์เครือข่ายก่อนส่งหน้าฝากเงินแสดงที่อยู่เฉพาะและเครือข่ายสำหรับสกุลเงินแต่ละชนิด อย่าสันนิษฐานว่าที่อยู่ USDT ทั้งหมดสามารถใช้แทนกันได้

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

ตรวจสอบ hash การทำธุรกรรมบน block explorer หากยอดคงเหลือไม่อัปเดต ให้ส่ง hash ไปยังฝ่ายสนับสนุน พวกเขาสามารถตรวจสอบการโอนด้วยตนเองได้ นี่คือวิธีที่เร็วที่สุดในการแก้ไขข้อผิดพลาด

แก้ไขข้อผิดพลาดการเรียกใช้ฟังก์ชันใน uncensored models

ข้อผิดพลาดการเรียกฟังก์ชันมักเกิดจากการจัดรูปแบบ JSON ที่ไม่เป็นมาตรฐานในโมเดลแบบ uncensored โมเดลเหล่านี้ให้ความสำคัญกับความสร้างสรรค์มากกว่าโครงสร้างที่เข้มงวด ซึ่งอาจทำให้โปรแกรมวิเคราะห์ข้อมูลแบบตายตัวทำงานผิดพลาด

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

ตรวจสอบการตอบกลับก่อนทำการแยกวิเคราะห์ ใช้บล็อก try-catch เพื่อจัดการข้อผิดพลาดการแยกวิเคราะห์ JSON หากการแยกวิเคราะห์ล้มเหลว ให้ลองใหม่ด้วยการตั้งค่าอุณหภูมิที่ต่ำกว่า สิ่งนี้ส่งเสริมผลลัพธ์ที่คาดเดาได้มากขึ้น

from openai import OpenAI

client = OpenAI(base_url="https://api.aiapisubscription.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)

อัตราจำกัดการเรียกข้อมูล: การจัดการการเพิ่มขึ้นของ 300 คำขอต่อนาที

อัตราจำกัดการเรียกใช้จำกัดจำนวนคำขอที่คุณสามารถส่งต่อนาที API ของเราอนุญาตให้ส่งคำขอได้ 300 ครั้งต่อนาทีต่อคีย์ การเกินขีดจำกัดนี้จะส่งรหัสสถานะ 429

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

ตรวจสอบความถี่คำขอของคุณ หากคุณส่งคำขอเร็วเกินไป คุณอาจกระตุ้นขีดจำกัด แบ่งคำขอของคุณอย่างสม่ำเสมอ สิ่งนี้รับประกันประสิทธิภาพที่สม่ำเสมอ

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

ข้อผิดพลาดของโหมด JSON และการจัดรูปแบบการตอบกลับ

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

ใช้ response_format พารามิเตอร์เพื่อบังคับ output JSON สิ่งนี้บอกให้โมเดลจัดโครงสร้าง response ของมันให้เป็น JSON ที่ถูกต้อง อย่างไรก็ตาม ไม่ได้การันตีความถูกต้อง

ตรวจสอบผลลัพธ์โดยใช้ JSON schema สิ่งนี้รับประกันว่าข้อมูลตรงกับโครงสร้างที่คาดหวังของคุณ หากการตรวจสอบล้มเหลว ให้ขอการลองใหม่หรือปรับพรอมต์

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.aiapisubscription.com/v1", apiKey: process.env.API_KEY });

const resp = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);

การแก้ไขข้อผิดพลาดการนับโทเค็น

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

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

ตรวจสอบ metadata usage ใน response สิ่งนี้ให้จำนวน tokens ที่แน่นอน เปรียบเทียบสิ่งนี้กับจำนวนในเครื่องของคุณเพื่อระบุข้อผิดพลาด

คำนึงถึงโทเค็นพิเศษ ซึ่งรวมถึงคำสั่งระบบและการกำหนดฟังก์ชัน โทเค็นเหล่านี้ถูกใช้แต่อาจไม่ปรากฏในข้อความดิบ

เมื่อเปลี่ยนจากในเครื่องไปเป็น API

เปลี่ยนมาใช้ API เมื่อฮาร์ดแวร์ในเครื่องไม่สามารถตอบสนองความต้องการด้าน latency หรือ scalability ได้ การรันโมเดลขนาดใหญ่ในเครื่องต้องการ GPU ราคาแพงและพลังงานจำนวนมาก

APIs ให้ความสามารถในการปรับขนาดโดยไม่ต้องบำรุงรักษาฮาร์ดแวร์ คุณสามารถรองรับการเพิ่มขึ้นของการรับส่งข้อมูลอย่างกะทันหันได้ง่ายๆ สิ่งนี้เหมาะสำหรับสภาพแวดล้อมการผลิต

ลองพิจารณาต้นทุน หากคุณรันโมเดลในเครื่องตลอด 24/7 ค่าไฟฟ้าและค่าฮาร์ดแวร์อาจสูงกว่าการใช้งาน API การคิดค่าบริการตาม token มีประสิทธิภาพด้านต้นทุนก็ต่อเมื่อการใช้งานมีความแปรผัน

curl https://api.aiapisubscription.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Summarize the technical specs of the new GPU."}]
  }'

FAQ

หน้าต่างบริบท 100k รวมโทเค็นการตอบสนองหรือไม่?

ใช่ หน้าต่างบริบท 100k รวมถึง prompt input และการสร้าง output completion คุณต้องคำนึงถึงทั้งสองส่วนเมื่อออกแบบแอปพลิเคชันของคุณ หาก prompt ของคุณมีขนาด 90k token คุณจะมี token เหลือเพียง 10k สำหรับ response

ฉันสามารถใช้ SDK OpenAI มาตรฐานกับ LLM แบบไม่เซ็นเซอร์นี้ได้หรือไม่?

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

ทำไมการเติมเงินคริปโตของฉันจึงแสดงสถานะรอดำเนินการ?

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

เกิดอะไรขึ้นหากฉันเกินขีดจำกัด 300 RPM?

คุณจะได้รับข้อผิดพลาด 429 Too Many Requests คำขอของคุณจะถูกปฏิเสธจนกว่าหน้าต่างจำกัดอัตราจะรีเซ็ต นำการปรับลดเวลาแบบทวีคูณ (exponential backoff) มาใช้เพื่อจัดการสถานการณ์นี้อย่างราบรื่นและลองใหม่หลังจากเว้นระยะเวลาสั้นๆ

รับคีย์ API ของคุณ

ลงทะเบียน ดึงคีย์ และอัปเดต URL พื้นฐานของคุณ เสร็จแล้ว

รับ API keyhttps://api.aiapisubscription.com/v1