TH ▾

API LLM uncensored ที่เข้ากันได้กับ OpenAIuncensoredapis.com

หน้าแรกการอ้างอิง API

การอ้างอิง Uncensored API อธิบายรายฟิลด์

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

อัปเดต

จุดสำคัญ

  1. มีสองเอนด์พอยต์: POST /v1/chat/completions และ GET /v1/models ทั้งสองใช้คีย์ Bearer ในการตรวจสอบสิทธิ์
  2. การตอบกลับมีรูปแบบการตอบกลับ chat completion ที่คุ้นเคย: id, choices[].message, finish_reason และ usage
  3. การสตรีมมิงใช้เหตุการณ์ที่ส่งจากเซิร์ฟเวอร์ เซกชันสุดท้ายจะพก usage มาโดยอัตโนมัติและสตรีมจะสิ้นสุดด้วย data: [DONE]
  4. ข้อจำกัดที่สร้างคำขอ: หน้าต่างบริบท 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]
  1. ชิ้นส่วนแรกมักตั้งค่า delta.role เป็น assistant พร้อมเนื้อหาว่าง
  2. เซกเมนต์เนื้อหามีเศษใน delta.content. ต่อเรียงตามลำดับที่มา
  3. ชิ้นส่วนเนื้อหาปิดมี delta เป็นค่าว่างและ finish_reason ไม่ใช่ค่าว่าง
  4. ชิ้นส่วนสุดท้ายที่มีอาร์เรย์ choices ว่างมี usage คุณไม่ได้ร้องขอสิ่งนี้ มันจะถูกเพิ่มโดยอัตโนมัติ
  5. ค่า 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

รายการตรวจสอบอ้างอิงสำหรับผู้เขียนไคลเอนต์

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

  1. ความสะอาดของเฮดเดอร์ ส่งคีย์เฉพาะในเฮดเดอร์ Authorization เท่านั้น อย่าใส่ใน query string และอย่าบันทึกค่าของเฮดเดอร์
  2. แยกวิเคราะห์อย่างระมัดระวัง ถือว่าฟิลด์เพิ่มเติมที่ไม่รู้จักในการตอบกลับสามารถละได้ ล็อก parsers ของคุณกับฟิลด์ที่เอกสารไว้ที่นี่แทนที่จะเป็นลำดับคีย์ JSON ที่แน่นอน
  3. ตรวจสอบ finish_reason ในการตอบกลับทุกครั้ง แสดงตัวบ่งชี้ที่มองเห็นได้เมื่อค่าเท่ากับ length เพราะผู้ใช้จะอ่านข้อความที่ถูกตัดออกว่าเป็นคำตอบเต็ม
  4. ตรวจสอบงบประมาณก่อนส่ง ประมาณการโทเคนพรอมต์ เพิ่ม max_tokens ของคุณ และเปรียบเทียบผลรวมกับ 100,000 การปฏิเสธในท้องถิ่นเร็วกว่าการรอรหัส 400
  5. จัดการส่วนท้ายของสตรีม คาดหวังชิ้นส่วนที่มีรายการ choices ว่างและวัตถุ usage จากนั้น [DONE] ปิดการเชื่อมต่อหลังจากสัญญาณ
  6. บันทึกการใช้งาน เก็บ total_tokens ต่อคำขอเพื่อให้คุณสามารถตรวจสอบการวัดของคุณเองกับยอดคงเหลือแบบเติมเงินล่วงหน้าได้ในภายหลัง
  7. เคารพเพดาน บัญชีอนุญาต 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 ฐาน นั่นคือการตั้งค่าทั้งหมด