หน้าแรก/การอ้างอิง API
การอ้างอิง Uncensored API อธิบายรายฟิลด์
หน้านี้เอกสารทุกฟิลด์ที่คุณส่งไปยังหรือรับจาก Uncensored API: ร่างคำขอ chat completions, วัตถุการตอบกลับ, ค่า finish_reason, บล็อกการใช้งาน, เซกเมนต์สตรีมมิง และรายการโมเดล แต่ละส่วนจับคู่ข้อกำหนดสั้นๆ กับตัวอย่างที่แสดงความคิดเห็นซึ่งคุณสามารถวางในเทอร์มินัลและรันได้
อัปเดต
จุดสำคัญ
- มีสองเอนด์พอยต์: POST /v1/chat/completions และ GET /v1/models ทั้งสองใช้คีย์ Bearer ในการตรวจสอบสิทธิ์
- การตอบกลับมีรูปแบบการตอบกลับ chat completion ที่คุ้นเคย: id, choices[].message, finish_reason และ usage
- การสตรีมมิงใช้เหตุการณ์ที่ส่งจากเซิร์ฟเวอร์ เซกชันสุดท้ายจะพก usage มาโดยอัตโนมัติและสตรีมจะสิ้นสุดด้วย data: [DONE]
- ข้อจำกัดที่สร้างคำขอ: หน้าต่างบริบท 100,000 โทเคน, ค่าเริ่มต้น 2048 และ max_tokens สูงสุด 32,000, ร่าง 8 MB
ข้อตกลงและวิธีการส่งผ่าน
Base URL คือ https://api.uncensoredapis.com/v1 ร่างทั้งหมดเป็น JSON และ UTF-8 ทุกคำขอมี Authorization: Bearer <key>; คีย์ที่ขาดหายหรือไม่ถูกต้องจะส่งกลับ 401 มีเพียงสองเส้นทางเท่านั้น และเส้นทางอื่นจะส่งกลับ 404
| วิธี | เส้นทาง | วัตถุประสงค์ |
|---|---|---|
| POST | /v1/chat/completions | สร้างข้อความผู้ช่วย อาจสตรีมมิงได้ |
| GET | /v1/models | ระบุ id โมเดลที่คุณสามารถร้องขอได้ |
API เป็นข้อความเท่านั้น ไม่มีเส้นทาง embeddings, ภาพ, เสียง หรือวิดีโอ และไม่มีการปรับแต่งพิเศษ และมีโมเดลเพียงตัวเดียว โดยระบุเป็น uncensored เนื่องจากรูปแบบสายส่งเข้ากันได้กับข้อตกลง chat completions SDK ทางการของ Python และ Node.js จึงใช้งานได้เมื่อคุณแก้ไข base_url docs ครอบคลุมการตั้งค่าครั้งแรก; หน้าหน้านี้คือคู่มือระดับฟิลด์
ฟิลด์ร่างคำขอ
ตารางแสดงฟิลด์ที่เอนด์พอยต์เข้าใจ ฟิลด์การสุ่มตัวอย่างจะถูกส่งผ่านไปยังการสร้างโดยไม่เปลี่ยนแปลง ดังนั้นค่าที่คุณเลือกจะทำงานเหมือนใน API สไตล์ chat-completions
| ฟิลด์ | ประเภท | หมายเหตุ |
|---|---|---|
model | สตริง | เสมอ "uncensored" |
messages | อาร์เรย์ | วัตถุที่มีลำดับตาม role (system, user, assistant, tool) และ content |
max_tokens | จำนวนเต็ม | ขีดจำกัดการเสร็จสิ้น เริ่มต้น 2048 สูงสุด 32,000 |
temperature | จำนวน | ความสุ่ม ต่ำกว่าจะกำหนดได้ชัดเจนกว่า |
top_p | จำนวน | จุดตัดการสุ่มนิวเคลียส |
stop | สตริงหรืออาร์เรย์ | ลำดับที่สิ้นสุดการสร้าง |
stream | บูลีน | true จะเปลี่ยนการตอบกลับเป็นเหตุการณ์ที่ส่งโดยเซิร์ฟเวอร์ |
tools | อาร์เรย์ | คำจำกัดความของฟังก์ชันในรูปแบบ JSON-schema มาตรฐาน |
นี่คือตัวอย่างคำขอที่ระบุหมายเหตุครบถ้วน ข้อความระบบกำหนดพฤติกรรม ข้อความผู้ใช้ระบุงาน และ stop จะหยุดการสร้างที่บรรทัดว่างแรก
curl https://api.uncensoredapis.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a terse release-notes writer."},
{"role": "user", "content": "Summarize: fixed login bug, added dark mode."}
],
"max_tokens": 120,
"temperature": 0.4,
"stop": ["\n\n"]
}'กฎงบประมาณสองข้อสำคัญ ประการแรก พรอมต์รวมกับการเติมเต็มต้องพอดีใน 100,000 โทเคน ดังนั้นคำขอที่โทเคนพรอมต์รวมกับ max_tokens เกินกว่านั้นจะถูกปฏิเสธด้วย 400 ประการที่สอง ร่างที่จัดรูปแบบแล้วอาจไม่เกิน 8 MB หากคุณส่งประวัติยาว ให้ตัดการสนทนาเก่าในฝั่งของคุณก่อนที่พวกเขาจะเข้าใกล้ข้อจำกัดใดข้อจำกัดหนึ่ง
วัตถุการตอบกลับ
การเรียกแบบไม่สตรีมจะส่งคืนวัตถุ JSON หนึ่งวัตถุ อ่านจากบนลงล่างดังนี้
{
"id": "chatcmpl-example123",
"object": "chat.completion",
"created": 1767225600,
"model": "uncensored",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "v1.4: Login bug fixed. Dark mode added."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 38,
"completion_tokens": 14,
"total_tokens": 52
}
}- id: ตัวระบุที่ไม่ซ้ำกันสำหรับการสร้างผลลัพธ์ บันทึกไว้ถัดจากไอดีคำขอของคุณเมื่อคุณต้องการเชื่อมโยงเหตุการณ์
- object: ค่าคงที่
chat.completion - created: เวลา Unix เป็นวินาที
- model: สะท้อนค่า
uncensored - choices: อาร์เรย์ คุณจะได้รับหนึ่งรายการ ดังนั้น
choices[0]คือคำตอบindexคือตำแหน่งของมัน - choices[].message:
roleคือassistant;contentเก็บข้อความ หรือเป็นnullเมื่อโมเดลส่งคืน tool calls แทน - choices[].finish_reason: สาเหตุที่การสร้างหยุดลง ดูส่วนถัดไป
- usage: การบัญชีโทเคนสำหรับการเรียกเก็บเงิน รายละเอียดด้านล่าง
ค่า finish_reason
ตรวจสอบ finish_reason ก่อนที่จะไว้วางใจเนื้อหา คำตอบที่ตัดขาดและคำตอบที่สมบูรณ์จะดูเหมือนกันจนกว่าคุณจะตรวจสอบ
| ค่า | ความหมาย | สิ่งที่โค้ดของคุณควรทำ |
|---|---|---|
stop | โมเดลถึงจุดสิ้นสุดตามธรรมชาติหรือชนกับลำดับ stop ของคุณ | ใช้เนื้อหาตามที่เป็นอยู่ |
length | ค่าจำกัด max_tokens (หรือหน้าต่างบริบท) ถูกถึงระหว่างตอบคำถาม | เพิ่ม max_tokens, ลดขนาดพรอมต์ หรือขอให้โมเดลสร้างต่อ |
tool_calls | โมเดลต้องการให้รันฟังก์ชันหนึ่งตัวหรือมากกว่า | ดำเนินการและส่งผลลัพธ์กลับเป็นข้อความ tool |
เมื่อค่าเป็น tool_calls ข้อความจะมีลักษณะดังนี้ โดยที่อาร์กิวเมนต์ส่งมาเป็น JSON string ที่คุณต้องแยกวิเคราะห์เอง:
{
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc1",
"type": "function",
"function": {"name": "get_order", "arguments": "{\"order_id\": 8841}"}
}]
},
"finish_reason": "tool_calls"
}]
}ควรห่อหุ้ม json.loads หรือ JSON.parse รอบ arguments ในการจัดการข้อผิดพลาด เนื่องจาก JSON ที่สร้างอาจมีรูปแบบไม่ถูกต้องเป็นบางครั้ง
บล็อกการใช้งานและสิ่งที่ต้องจ่าย
usage รายงาน prompt_tokens, completion_tokens และ total_tokens ซึ่งเป็นตัวเลขที่เครดิตของคุณถูกหัก: อินพุตที่ $0.25 ต่อหนึ่งล้านโทเคน และเอาต์พุตที่ $1.00 ต่อหนึ่งล้าน โบนัสแบบเติมเงินล่วงหน้าจะถูกหักต่อคำขอ โดยไม่มีบริการรายเดือน
ตัวอย่างที่ทำงานภายใต้สมมติฐานที่ระบุ: สมมติว่าคำขอใช้โทเคนพรอมต์ 2,000 และโทเคนการเติมเต็ม 500 ค่าอินพุตคือ 2,000 / 1,000,000 x $0.25 = $0.0005 ค่าเอาต์พุตคือ 500 / 1,000,000 x $1.00 = $0.0005 คำขอรวมเป็น $0.0010 การนับโทเคนเหล่านี้เป็นสมมติฐานสำหรับการคำนวณ ไม่ใช่การวัดภาระงานจริง หน้า pricing page มีอัตราในหนึ่งสถานที่
เนื่องจากโทเคนเอาต์พุตมีราคาสูงกว่าโทเคนอินพุตสี่เท่า max_tokens ที่จำกัดจึงเป็นวิธีควบคุมต้นทุนโดยตรงที่สุดของคุณ
รูปแบบชิ้นส่วนสตรีม
ตั้งค่า "stream": true และการตอบกลับจะเป็น text/event-stream แต่ละเหตุการณ์คือบรรทัดที่ขึ้นต้นด้วย data: ตามด้วย JSON คั่นด้วยบรรทัดว่าง ประเภทวัตถุเปลี่ยนเป็น chat.completion.chunk และ message ถูกแทนที่ด้วย delta
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"v1.4: "},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Login bug fixed."},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":38,"completion_tokens":14,"total_tokens":52}}
data: [DONE]- ชิ้นส่วนแรกมักตั้งค่า
delta.roleเป็นassistantพร้อมเนื้อหาว่าง - เซกเมนต์เนื้อหามีเศษใน
delta.content. ต่อเรียงตามลำดับที่มา - ชิ้นส่วนเนื้อหาปิดมี
deltaเป็นค่าว่างและfinish_reasonไม่ใช่ค่าว่าง - ชิ้นส่วนสุดท้ายที่มีอาร์เรย์
choicesว่างมีusageคุณไม่ได้ร้องขอสิ่งนี้ มันจะถูกเพิ่มโดยอัตโนมัติ - ค่า
data: [DONE]จะยุติสตรีม
ป้องกันอาร์เรย์ choices ว่างนั้น: การเข้าถึง choices[0] บนเซกเมนต์การใช้งานทำให้เกิดข้อผิดพลาดในลูปแบบง่าย ตัวอย่าง SDK ด้านล่างจัดการเรื่องนี้
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.uncensoredapis.com/v1", api_key=os.environ["API_KEY"])
reason, usage = None, None
for chunk in client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Name three uses of a rubber duck in debugging."}],
stream=True,
):
if chunk.choices:
piece = chunk.choices[0].delta.content
if piece:
print(piece, end="", flush=True)
if chunk.choices[0].finish_reason:
reason = chunk.choices[0].finish_reason
if getattr(chunk, "usage", None):
usage = chunk.usage
print("\nfinish:", reason, "| tokens:", usage.total_tokens if usage else "n/a")สำหรับการเรียกใช้ฟังก์ชันแบบสตรีม delta.tool_calls จะมาถึงเป็นเศษส่วน ให้สะสมสตริง arguments ตามดัชนีการเรียกแต่ละครั้ง และแยกวิเคราะห์ครั้งเดียวเมื่อ finish_reason เป็น tool_calls
เอนด์พอยต์โมเดล
GET /v1/models ต้องการเฉพาะหัว Bearer และส่งกลับวัตถุรายการ เนื่องจากมีโมเดลหนึ่งตัว data มีรายการเดียว uncensored ไคลเอนต์ที่สร้างรายการแบบเลื่อนลงโมเดลจากเส้นทางนี้จะแสดงตัวเลือกเดียว
curl https://api.uncensoredapis.com/v1/models -H "Authorization: Bearer $API_KEY"
{
"object": "list",
"data": [
{"id": "uncensored", "object": "model"}
]
}นี่เป็นวิธีที่ถูกที่สุดในการตรวจสอบคีย์: 200 หมายถึงคีย์ถูกต้อง, 401 หมายถึงคีย์ผิดหรือถูกสร้างใหม่ การเรียกเส้นทางนี้ไม่สร้างโทเคน สำหรับการจัดการสถานะและกฎการเรียกซ้ำ ดู errors and rate limits playbook
รายการตรวจสอบอ้างอิงสำหรับผู้เขียนไคลเอนต์
หากคุณกำลังเขียนไลบรารีไคลเอนต์หรือห่อหุ้มเอนด์พอยต์ในเกตเวย์ ให้ตรวจสอบพฤติกรรมเหล่านี้แต่ละข้อกับสเปซิฟิเคชันด้านบนก่อนเผยแพร่
- ความสะอาดของเฮดเดอร์ ส่งคีย์เฉพาะในเฮดเดอร์ Authorization เท่านั้น อย่าใส่ใน query string และอย่าบันทึกค่าของเฮดเดอร์
- แยกวิเคราะห์อย่างระมัดระวัง ถือว่าฟิลด์เพิ่มเติมที่ไม่รู้จักในการตอบกลับสามารถละได้ ล็อก parsers ของคุณกับฟิลด์ที่เอกสารไว้ที่นี่แทนที่จะเป็นลำดับคีย์ JSON ที่แน่นอน
- ตรวจสอบ finish_reason ในการตอบกลับทุกครั้ง แสดงตัวบ่งชี้ที่มองเห็นได้เมื่อค่าเท่ากับ
lengthเพราะผู้ใช้จะอ่านข้อความที่ถูกตัดออกว่าเป็นคำตอบเต็ม - ตรวจสอบงบประมาณก่อนส่ง ประมาณการโทเคนพรอมต์ เพิ่ม
max_tokensของคุณ และเปรียบเทียบผลรวมกับ 100,000 การปฏิเสธในท้องถิ่นเร็วกว่าการรอรหัส 400 - จัดการส่วนท้ายของสตรีม คาดหวังชิ้นส่วนที่มีรายการ
choicesว่างและวัตถุusageจากนั้น[DONE]ปิดการเชื่อมต่อหลังจากสัญญาณ - บันทึกการใช้งาน เก็บ
total_tokensต่อคำขอเพื่อให้คุณสามารถตรวจสอบการวัดของคุณเองกับยอดคงเหลือแบบเติมเงินล่วงหน้าได้ในภายหลัง - เคารพเพดาน บัญชีอนุญาต 300 คำขอต่อนาทีต่อคีย์ ดังนั้นเกตเวย์ที่กระจายไปยังผู้ใช้หลายคนต้องมีคิวของตัวเอง
ขั้นตอนเหล่านี้ไม่ขึ้นอยู่กับ SDK ของผู้ขายเลย ไคลเอนต์ HTTP ธรรมดาที่ตั้งค่าหัว Bearer และถอดรหัส JSON ก็เพียงพอแล้ว และตัวอย่าง SDK ในหน้านี้เป็นเพียงความสะดวก ไม่ใช่ข้อกำหนด จับคู่มือตรวจสอบนี้กับตารางข้อผิดพลาดใน playbook คุณจะครอบคลุมวงจรชีวิตของคำขอทั้งหมด: สร้าง ส่ง สตรีม แยกวิเคราะห์ บัญชี และกู้คืน
ถาม-ตอบ
ฉันสามารถรับตัวเลือกมากกว่าหนึ่งตัวเลือกต่อคำขอได้หรือไม่
คาดหวังรายการเดียวใน choices และอ่าน choices[0] หากคุณต้องการตัวเลือกอื่น ให้ส่งคำขอแยก
ทำไม message.content จึงเป็น null
โมเดลส่งคืน tool_calls แทนข้อความ ตรวจสอบ finish_reason รันฟังก์ชันและส่งผลลัพธ์กลับ
เกิดอะไรขึ้นหาก prompt รวมกับ max_tokens เกิน 100,000
คำขอจะถูกปฏิเสธด้วยข้อผิดพลาด 400 bad request ลดขนาดพรอมต์หรือลด max_tokens
การสตรีมเปลี่ยนราคาหรือไม่
ไม่ การเรียกเก็บเงินใช้จำนวนโทเคนพรอมต์และโทเคนการสร้างผลลัพธ์เดียวกัน และชิ้นส่วนการใช้งานสุดท้ายรายงานจำนวนเหล่านั้น
คีย์ของคุณอยู่ห่างแค่แบบฟอร์มเดียว
สร้างบัญชี คัดลอกคีย์ เปลี่ยน URL ฐาน นั่นคือการตั้งค่าทั้งหมด