URL ฐานและการตรวจสอบสิทธิ์
เชื่อมต่อไปยัง openai compatible API โดยการอัปเดตการกำหนดค่าไคลเอนต์ของคุณให้ชี้ไปที่ https://api.openaicompatibleapiendpoints.com/v1.คุณต้องการคีย์ API ที่ถูกต้องที่ส่งใน Authorization header เป็น Bearer token การตั้งค่านี้ใช้งานได้กับ SDK ทางการของ OpenAI และไลบรารีไคลเอนต์ที่เข้ากันได้ใดๆ ไม่ต้องกำหนดค่าเกตเวย์ที่ซับซ้อน
curl https://api.openaicompatibleapiendpoints.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Return 500 status code"}]
}'ทุกการเรียกใช้ต้องรวมคีย์เฉพาะของคุณ หากคีย์หายไปหรือไม่ถูกต้อง เซิร์ฟเวอร์จะส่งข้อผิดพลาด 401 ทันที ซึ่งมั่นใจว่าการเรียกใช้ของคุณจะไปถึง LLM แบบ uncensored ที่ถูกต้องโดยไม่มีความล่าช้าในการจัดเส้นทาง
จุดจบ API Chat Completions
ส่งข้อความไปยัง POST /v1/chat/completions เอนด์พอยต์สำหรับรับข้อความตอบกลับจาก uncensored โมเดล จุดเชื่อมต่อนี้จัดการการสนทนาตามรอบมาตรฐานและรองรับหน้าต่างบริบทขนาด 100,000 โทเคน คุณสามารถตั้งค่าเอาต์พุตสูงสุดที่ 16,000 โทเคนต่อคำขอ โมเดลตอบคำถามโดยไม่มีการปฏิเสธเนื้อหาสำหรับหัวข้อผู้ใหญ่ที่ถูกต้องตามกฎหมาย
from openai import OpenAI
client = OpenAI(base_url="https://api.openaicompatibleapiendpoints.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)ใช้มาตรฐาน messages รูปแบบอาร์เรย์ API จะเพิกเฉยต่อฟิลด์เพิ่มเติมที่ไม่รู้จัก ทำให้การย้ายข้อมูลทำได้ง่าย คุณจ่ายเฉพาะสำหรับโทเค็นที่โมเดลใช้งานจริง
การตอบกลับแบบสตรีมมิ่ง
เปิดใช้งานการจัดส่งโทเค็นแบบเรียลไทม์โดยตั้งค่า stream: true ในการร้องขอของคุณ เซิร์ฟเวอร์ส่งชุดของ Server-Sent Events (SSE) จนกว่าคำตอบจะเสร็จสมบูรณ์ สถิติการใช้งานโทเค็นจะปรากฏในชิ้นส่วนสุดท้ายของสตรีม วิธีนี้ลดความล่าช้าที่ผู้ใช้รู้สึกเมื่อรอคำตอบยาวๆ
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)บัฟเฟอร์โทเค็นที่ได้รับทางไคลเอนต์เพื่อสร้างข้อความเต็มข้อผิดพลาดระหว่างการสตรีมพบได้ยากแต่ควรจัดการโดยการตรวจสอบเหตุการณ์สุดท้ายสำหรับรหัสข้อผิดพลาด สตรีมจะหยุดอัตโนมัติเมื่อถึงขีดจำกัดบริบทหรือโทเค็นสูงสุด
โหมด JSON และเครื่องมือ
บังคับใช้เอาต์พุตที่มีโครงสร้างโดยตั้งค่า response_format เพื่อ {"type": "json_object"}สิ่งนี้ช่วยให้โมเดลส่งคืน JSON แทนข้อความมาร์กดาวน์ คุณยังสามารถใช้ tools พารามิเตอร์นี้สำหรับการเรียกใช้ฟังก์ชัน API รองรับ tool_choice เพื่อควบคุมอย่างแม่นยำว่าโมเดลจะเรียกใช้ฟังก์ชันใด
ใช้ temperature และ top_p เพื่อปรับความสุ่ม ตั้งค่า seed เพื่อความผลลัพธ์ที่ทำซ้ำได้ระหว่างการดีบัก พารามิเตอร์เหล่านี้ทำงานตามที่คาดไว้ในการผสานรวมที่เข้ากันได้กับ OpenAI
การจัดการข้อผิดพลาดและขีดจำกัด
จัดการข้อผิดพลาด HTTP มาตรฐานเพื่อจัดการความล้มเหลวทางไคลเอนต์อย่างเหมาะสม สถานะ 401 หมายถึงคีย์ API ของคุณไม่ถูกต้อง สถานะ 402 บ่งชี้ว่าเครดิตพรีเพดของคุณหมดแล้ว ข้อผิดพลาด 429 แจ้งว่าคุณเกินขีดจำกัด 300 คำขอต่อนาที
คีย์แต่ละคีย์อนุญาตให้ส่งคำขอพร้อมกันได้แปดคำขอ body ของคำขอจำกัดอยู่ที่ 8 MB ไม่มีการออกเงินคืนสำหรับเครดิตที่ใช้แล้ว แต่ข้อผิดพลาดระหว่างกระบวนการประมวลผลเป็นอิสระ ตรวจสอบ error object ใน response JSON สำหรับรายละเอียด
หน้าต่างบริบทและรายละเอียดโมเดล
โมเดลรองรับหน้าต่างบริบทขนาด 100,000 token สำหรับทั้ง prompt และ completion รวมกัน ซึ่งช่วยให้สามารถจดจำบริบทลึกซึ้งสำหรับเอกสารยาวหรือการสนทนาที่ยาวนาน ค่า max output เริ่มต้นคือ 2,048 token หากไม่ได้ระบุ max_tokens. คุณสามารถเพิ่มค่านี้ได้สูงสุด 16,000 โทเค็นต่อคำขอ
โมเดลนี้ไม่ใช่ GPT, Claude หรือโมเดลของเจ้าอื่น เป็นโมเดล open-weight ที่ปรับแต่งสำหรับคำตอบแบบ uncensored ข้อมูลจาก prompt ของคุณไม่ถูกใช้ในการฝึกสอน สิ่งนี้รับประกันความเป็นส่วนตัวสำหรับข้อมูลทรัพย์สินของคุณ
Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.openaicompatibleapiendpoints.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);