ประเด็นสำคัญ
- base URL เดียวและ model ID เดียวแบบ uncensored ทำงานกับ SDK หรือไคลเอนต์ OpenAI ใดๆ ได้
- รองรับ streaming, tool calling และ JSON mode พร้อมหน้าต่างบริบท 100,000 token
- คีย์แบบเต็มอนุญาตคำขอพร้อมกัน 8 รายการและ 300 รายการต่อนาที ดังนั้นควรวางแผนคิวขนาดเล็กสำหรับแอปที่ใช้งานหนัก
- การเรียกเก็บเงินคือ $0.15 ต่อ 1M input tokens และ $0.50 ต่อ 1M output tokens จาก prepaid credit และ prompts ไม่ถูกนำไปใช้สำหรับการฝึกโมเดล
สิ่งที่คุณได้รับจากเอนด์พอยต์เดียว
ผู้คนค้นหา uncensored llm hub เมื่อต้องการโมเดลที่ตอบคำถามโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย แต่ไม่ต้องการรัน GPU บริการเป็น API HTTPS ธรรมดา คุณชี้ OpenAI client ไปที่ https://api.uncensoredllmhub.com/v1 ส่ง model ID uncensored และยืนยันตัวตนด้วย Authorization: Bearer YOUR_KEY มีสองวิธี: POST /v1/chat/completions สำหรับบทสนทนา และ GET /v1/models สำหรับรายการโมเดล
การเข้าใจสิ่งที่อยู่หลังเอนด์พอยต์นั้นเป็นสิ่งสำคัญ นี่คือโมเดล open-weight โมเดลเดียวที่รันโดยผู้ให้บริการอิสระและปรับแต่งเพื่อข้ามการปฏิเสธเนื้อหา ไม่ใช่ API ทางการของผู้ขายรายใหญ่ และไม่ใช่ router ที่เลือกโมเดล มันจัดการเฉพาะข้อความ: ไม่มีภาพ เสียง วิดีโอ embeddings หรือ fine-tuning กฎข้อเดียวที่เข้มงวดคือ: ไม่มีเนื้อหาทางเพศที่เกี่ยวข้องกับผู้เยาว์
ขอบเขตที่แคบนี้คือจุดประสงค์ เอนด์พอยต์เดียวที่เสถียรง่ายต่อการสร้างรอบส่วนด้านล่างแสดง backend แชทขนาดเล็ก จากนั้นลูปเอเยนต์ แล้วจำกัดที่คุณต้องออกแบบ
ขั้นตอนที่ 1: เชื่อมต่อกับไคลเอนต์ที่มีอยู่
เนื่องจาก API ใช้รูปแบบ OpenAI คุณจึงแทบไม่ต้องเขียนโค้ดไคลเอนต์ใหม่ เปิด SDK หรือเครื่องมือของคุณ เปลี่ยน base URL และคีย์ แล้วตั้งค่าโมเดลเป็น uncensored สมัครสมาชิกที่หน้า คีย์ API (Google หรืออีเมลและรหัสผ่าน) จากนั้นรับเครดิตทดลองใช้ $0.50 ด้วยคลิกเดียว เครดิตทดลองใช้ไม่ต้องใช้บัตร ใช้ได้ 7 วัน และจำกัดหนึ่งครั้งต่อบุคคล
คำขอขั้นต่ำใน Python:
from openai import OpenAI
client = OpenAI(
base_url="https://api.uncensoredllmhub.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant for a writing tool."},
{"role": "user", "content": "Give me three opening lines for a mystery set on a ferry."},
],
temperature=0.9,
top_p=0.95,
)
print(resp.choices[0].message.content)
การตั้งค่าการสุ่มตัวอย่างเช่น temperature, top_p, stop, seed และค่าปรับความถี่และการปรากฏจะถูกส่งผ่านไปยังโมเดล ทำให้ปุ่มที่คุณคุ้นเคยจากผู้ให้บริการรายอื่นทำงานในลักษณะเดียวกัน คำขอเดียวกันนี้ใช้งานได้กับเครื่องมือที่ยอมรับ endpoint ที่เข้ากันได้กับ OpenAI เช่น SillyTavern หรือ Open WebUI: วาง base URL เพิ่มคีย์ พิมพ์ ID โมเดลด้วยตนเอง
ขั้นตอนที่ 2: สตรีมคำตอบเข้าสู่ส่วนติดต่อแชท
แอปแชทจะรู้สึกช้าหากผู้ใช้จ้องกล่องว่างจนกว่าคำตอบเต็มจะมาถึง การสตรีมมิงแก้ไขปัญหานี้ ตั้งค่า stream: true และ API จะส่งคำตอบเป็นเหตุการณ์ที่ส่งจากเซิร์ฟเวอร์ โดยรายงานการใช้งานที่ท้ายสตรีม นี่คือเวอร์ชัน Node ที่ส่งต่อโทเคนเมื่อมาถึง:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.uncensoredllmhub.com/v1",
apiKey: process.env.API_KEY,
});
export async function streamReply(history, onToken, signal) {
const stream = await client.chat.completions.create(
{ model: "uncensored", messages: history, stream: true },
{ signal }
);
let text = "";
for await (const chunk of stream) {
const piece = chunk.choices[0]?.delta?.content ?? "";
if (piece) {
text += piece;
onToken(piece);
}
}
return text;
}
สองนิสัยช่วยประหยัดปัญหาภายหลัง ประการแรก ส่ง abort signal เสมอและยกเลิกเมื่อผู้ใช้ปิดแท็บหรือกดหยุด คำขอแบบสตรีมจะครอบครอง concurrency slot ของคุณจนกว่าสตรีมจะจบ ดังนั้นสตรีมที่ถูกทิ้งจะกินโควตาของคุณ ประการที่สอง เก็บข้อความเต็มที่คุณรวบรวมไว้ เพราะคุณจะเพิ่มข้อความนั้นไปยังประวัติเป็นข้อความของผู้ช่วยสำหรับเทิร์นถัดไป
หากคุณเห็นข้อผิดพลาดคลุมเครือในฝั่งไคลเอนต์ขณะสตรีม บันทึกของเราเกี่ยวกับการวินิจฉัยการล้มเหลวของการสตรีมครอบคลุมสาเหตุทั่วไป เช่น base URL ผิด โปร๊กซีที่บัฟเฟอร์เหตุการณ์ และรหัส 429 สองตัว
ขั้นตอนที่ 3: ใช้หน้าต่างบริบทอย่างมีเจตนา
context window มีขนาด 100,000 tokens ซึ่งใช้ร่วมกันระหว่าง prompt และ completion สำหรับเครื่องมือเขียนนิทาน แชร์ตัวละคร หรือผู้ช่วยเอกสาร พื้นที่นี้เพียงพอสำหรับประวัติที่ยาวนาน ระบบ prompt ขนาดใหญ่ และวัสดุอ้างอิงพร้อมกัน คุณไม่จำเป็นต้องตั้งค่า max_tokens; completion สามารถใช้พื้นที่ที่เหลือได้ทั้งหมด
การทดลองใช้ context ยาวในราคาเหล่านี้ถือว่าคุ้มค่า การกรอกหน้าต่างทั้งหมดด้วย input มีค่าใช้จ่าย 0.1 × $0.15 = $0.015 สำหรับ 100,000 input tokens เพิ่มคำตอบขนาด 2,000 tokens (0.002 × $0.50 = $0.001) และการเรียกใช้ที่เกือบเต็มหน้าต่างจะมีค่าใช้จ่ายรวม $0.016 คุณยังคงต้องการจัดการหน้าต่างบริบทด้วยเหตุผลสามประการ: latency เพิ่มขึ้นตามขนาดของ prompt แต่ละรอบจะส่งประวัติใหม่ทำให้ต้นทุนสะสมตลอดเซสชัน และประวัติที่ยาวมากจะทำให้ instructions ที่ด้านบนเจือจางลง
นโยบายง่ายๆ ทำงานได้ดี:
- เก็บพรอมต์ระบบและข้อความอ้างอิงคงที่ไว้ที่จุดเริ่มต้น
- เก็บรอบล่าสุดไว้ตามต้นฉบับ
- เมื่อประวัติเกินเกณฑ์ที่คุณเลือก เช่น 60,000 โทเคน ให้ถามโมเดลให้สรุปส่วนที่เก่าที่สุดเป็นบันทึกสั้นๆ และแทนที่รอบเหล่านั้นด้วยบันทึกนั้น
- อ่าน
usage.prompt_tokensจากแต่ละรีสปอนส์เพื่อทราบขนาดของคำขอถัดไป แทนที่จะประมาณการโดยตัวอักษร
ขั้นตอนที่ 4: เครื่องมือและผลลัพธ์ที่มีโครงสร้างสำหรับเอเยนต์
เอเจนต์ต้องการสองสิ่งจากโมเดล: วิธีเรียกใช้ฟังก์ชัน และผลลัพธ์ที่คุณสามารถแยกวิเคราะห์ได้ ทั้งสองอย่างรองรับ การเรียกใช้เครื่องมือใช้พารามิเตอร์มาตรฐาน tools และ tool_choice การเรียกใช้เครื่องมือสามารถสตรีมได้ และผลลัพธ์จะส่งกลับเป็นข้อความด้วย role: "tool" การเรียกใช้ครั้งเดียวมีลักษณะดังนี้:
import json
from openai import OpenAI
client = OpenAI(
base_url="https://api.uncensoredllmhub.com/v1",
api_key="YOUR_API_KEY",
)
tools = [{
"type": "function",
"function": {
"name": "lookup_order",
"description": "Find an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
},
}]
messages = [{"role": "user", "content": "Where is order A-1042?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
args = json.loads(call.function.arguments)
result = {"order_id": args["order_id"], "status": "shipped"} # your real lookup goes here
messages.append(msg)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
ตรวจสอบอาร์กิวเมนต์เสมอก่อนดำเนินการใดๆ ที่มีผลข้างเคียง โมเดลสามารถผลิตค่าที่ผิดรูปแบบหรือคาดไม่ถึง และโค้ดของคุณคือแนวป้องกันสุดท้าย
สำหรับผลลัพธ์ที่มีโครงสร้างแบบธรรมดาโดยไม่ใช้เครื่องมือ ให้ใช้โหมด JSON โดยตั้งค่า response_format เป็น {"type": "json_object"} อธิบายรูปร่างที่คุณต้องการในพรอมต์ด้วย และแยกวิเคราะห์การตอบกลับภายในบล็อก try เพื่อให้การตอบกลับที่ไม่ดีทำให้เกิดการลองใหม่แทนที่จะเกิดข้อผิดพลาด
curl https://api.uncensoredllmhub.com/v1/chat/completions -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{
"model": "uncensored",
"response_format": {"type": "json_object"},
"messages": [
{"role": "system", "content": "Reply with JSON: {"title": string, "tags": [string]}"},
{"role": "user", "content": "Describe a noir story set in a rainy port city."}
]
}'
ข้อจำกัดที่ต้องออกแบบโดยคำนึงถึง
คีย์เต็มอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที คีย์ทดลองอนุญาตให้ทำ 2 และ 60 บอดี้มีขนาดสูงสุด 8 MB การตอบกลับแต่ละรายการมี X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests และ X-RateLimit-Limit-Concurrency ซึ่งมีประโยชน์ต่อการบันทึก
เมื่อคุณเกินขีดจำกัด API จะส่ง HTTP 429 รหัสคือ rate_limited สำหรับคำขอเกินต่อนาที และ concurrency สำหรับคำขอเกินพร้อมกัน การ overload ชั่วคราวยังส่ง 429 พร้อม Retry-After: 5 สำหรับแอปหลายผู้ใช้ ให้ใส่คิวเล็กๆ หน้า API: semaphore ที่มีขนาดต่ำกว่าขีดจำกัด concurrency และ retry ที่เคารพ Retry-After สำหรับ agent ที่กระจายไปยังการเรียกใช้เครื่องมือแบบขนาน ให้จำกัดการกระจายที่จำนวนเดียวกัน
รายการพารามิเตอร์ทั้งหมดและรูปแบบข้อผิดพลาดอยู่ใน เอกสาร API
ต้นทุน การเติมเงิน และการจัดการข้อมูล
ราคาอยู่ที่ $0.15 ต่อ 1M โทเคนอินพุต และ $0.50 ต่อ 1M โทเคนเอาท์พุต จากเครดิตแบบเติมเงินล่วงหน้า ไม่มีสมาชิก เครดิตไม่หมดอายุ และคำขอที่ล้มเหลวหรือถูกปฏิเสธจะไม่ถูกเรียกเก็บเงิน การตอบกลับแชทที่มี 1,500 โทเคนอินพุตและ 500 โทเคนเอาท์พุตมีค่าใช้จ่าย 0.0015 × $0.15 + 0.0005 × $0.50 = $0.000225 + $0.00025 = $0.000475 ดังนั้นเครดิต $20 จะครอบคลุมการตอบกลับประมาณ 42,000 แบบดังกล่าว
คุณสามารถเติมเงินจำนวนเต็มใดๆ ตั้งแต่ $20 ถึง $500 โบนัสคือ +5% จาก $50, +10% จาก $100 และ +15% จาก $200 จ่ายด้วยบัตร (Visa, Mastercard, Apple Pay, Google Pay) หรือคริปโต (USDT บน TRC20, USDC บน Base) หน้า หน้าราคา มีตารางปัจจุบัน
เกี่ยวกับข้อมูล: prompts ไม่ถูกนำไปใช้สำหรับการฝึกโมเดล อ่าน นโยบายความเป็นส่วนตัว เพื่อดูข้อความเต็ม คุณยังคงรับผิดชอบในสิ่งที่สร้างด้วยโมเดล และบริการนี้เหมาะสำหรับการใช้งานของผู้ใหญ่ที่ถูกต้องตามกฎหมายเท่านั้น
