ID ▾

API LLM tanpa sensor yang kompatibel dengan OpenAIuncensoredapis.com

BerandaReferensi API

Referensi Uncensored API, Dijelaskan Bidang demi Bidang

Halaman ini mendokumentasikan setiap bidang yang Anda kirimkan ke atau terima dari Uncensored API: tubuh permintaan chat completions, objek respons, nilai finish_reason, blok penggunaan, potongan streaming dan daftar model. Setiap bagian menggabungkan spesifikasi singkat dengan contoh beranotasi yang dapat Anda tempelkan ke terminal dan jalankan.

Diperbarui

Poin kunci

  1. Dua endpoint ada: POST /v1/chat/completions dan GET /v1/models. Keduanya mengautentikasi dengan kunci Bearer.
  2. Respons mengikuti bentuk penyelesaian chat yang familier: id, choices[].message, finish_reason dan usage.
  3. Streaming menggunakan server-sent events; potongan akhir membawa usage secara otomatis dan stream berakhir dengan data: [DONE].
  4. Batas yang membentuk permintaan: jendela konteks 100.000 token, 2048 default dan 32.000 maksimum max_tokens, tubuh 8 MB.

Konvensi dan transportasi

URL dasar adalah https://api.uncensoredapis.com/v1. Semua tubuh adalah JSON dan UTF-8. Setiap permintaan membawa Authorization: Bearer <key>; kunci yang hilang atau salah mengembalikan 401. Hanya ada dua rute, dan jalur lain mengembalikan 404.

MetodeJalurTujuan
POST/v1/chat/completionsHasilkan pesan asisten, opsional streaming
GET/v1/modelsDaftar id model yang dapat Anda minta

API hanya teks. Tidak ada rute embedding, gambar, audio atau video dan tidak ada fine-tuning, dan ada tepat satu model, yang dialamatkan sebagai uncensored. Karena format kabel kompatibel dengan konvensi penyelesaian chat, SDK Python dan Node resmi berfungsi ketika Anda menimpa base_url. dokumen mencakup pengaturan awal; halaman ini adalah pendamping tingkat bidang.

Bidang tubuh permintaan

Tabel mencantumkan bidang yang dipahami endpoint. Bidang sampling diteruskan ke generasi tanpa perubahan, sehingga nilai yang Anda pilih berperilaku seperti pada API gaya penyelesaian chat lainnya.

BidangTipeCatatan
modelstringSelalu "uncensored".
messagesarrayObjek berurutan dengan role (system, user, assistant, tool) dan content.
max_tokensintegerBatas penyelesaian. Default 2048, maksimum 32.000.
temperaturenumberKeacakan. Lebih rendah lebih deterministik.
top_pnumberPemotongan sampling nuklir.
stopstring atau arrayUrutan yang mengakhiri generasi.
streambooleantrue mengubah balasan menjadi server-sent events.
toolsarrayDefinisi fungsi dalam format skema JSON standar.

Berikut adalah permintaan lengkap yang diberi anotasi. Pesan sistem menetapkan perilaku, pesan pengguna membawa tugas, dan stop mengakhiri generasi pada baris kosong pertama.

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"]
  }'

Dua aturan anggaran penting. Pertama, prompt ditambah penyelesaian harus muat dalam 100.000 token, sehingga permintaan yang jumlah token promptnya ditambah max_tokens melebihi batas tersebut akan ditolak dengan kode 400. Kedua, badan serialized tidak boleh melebihi 8 MB. Jika Anda mengirim riwayat panjang, potong putaran lama di sisi Anda sebelum mendekati batas tersebut.

Objek respons

Panggilan non-streaming mengembalikan satu objek JSON. Bacalah dari atas ke bawah sebagai berikut.

{
  "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: pengidentifikasi unik untuk hasil generasi. Catat di samping ID permintaan Anda sendiri ketika Anda perlu mengorelasikan peristiwa.
  • object: konstanta chat.completion.
  • created: timestamp Unix dalam detik.
  • model: mencerminkan uncensored.
  • choices: sebuah array. Anda menerima satu entri, sehingga choices[0] adalah jawabannya. index adalah posisinya.
  • choices[].message: role adalah assistant; content berisi teks, atau null ketika model mengembalikan panggilan alat.
  • choices[].finish_reason: alasan penghentian generasi; lihat bagian berikutnya.
  • usage: akuntansi token untuk penagihan, dibahas di bawah.

Nilai finish_reason

Cabangkan berdasarkan finish_reason sebelum Anda mempercayai konten. Jawaban yang terpotong dan jawaban lengkap terlihat identik hingga Anda memeriksanya.

NilaiArtiYang harus dilakukan kode Anda
stopModel mencapai akhir alami atau mencapai salah satu urutan stop Anda.Gunakan konten apa adanya.
lengthBatas max_tokens (atau jendela konteks) tercapai di tengah jawaban.Naikkan max_tokens, pendekkan prompt, atau minta model untuk melanjutkan.
tool_callsModel ingin menjalankan satu atau lebih fungsi.Eksekusi dan kirimkan hasilnya kembali sebagai pesan tool.

Ketika nilai adalah tool_calls, pesannya terlihat seperti ini, dengan argumen yang dikirim sebagai JSON string yang harus Anda uraikan sendiri:

{
  "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"
  }]
}

Selalu bungkus json.loads atau JSON.parse pada arguments dalam penanganan kesalahan, karena JSON yang dihasilkan kadang-kadang bisa tidak valid.

Blok penggunaan dan biayanya

usage melaporkan prompt_tokens, completion_tokens dan total_tokens. Ini adalah angka yang saldo Anda kurangi: input sebesar $0,25 per juta token dan output sebesar $1,00 per juta. Saldo prabayar dipotong per permintaan, tanpa langganan.

Contoh terapan dengan asumsi yang dinyatakan: misalkan sebuah permintaan menggunakan 2.000 token prompt dan 500 token completion. Biaya input adalah 2.000 / 1.000.000 x $0,25 = $0,0005. Biaya output adalah 500 / 1.000.000 x $1,00 = $0,0005. Permintaan tersebut berjumlah total $0,0010. Jumlah token ini adalah asumsi untuk perhitungan aritmatika, bukan pengukuran beban kerja nyata apa pun. Halaman harga memiliki tarif dalam satu tempat.

Karena token output berharga empat kali lebih mahal daripada token input, max_tokens yang ketat adalah kontrol biaya paling langsung Anda.

Format chunk streaming

Atur "stream": true dan respons menjadi text/event-stream. Setiap peristiwa adalah baris yang dimulai dengan data: diikuti oleh JSON, dipisahkan oleh baris kosong. Tipe objek berubah menjadi chat.completion.chunk dan message diganti oleh 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. Chunk pertama biasanya menetapkan delta.role ke assistant dengan konten kosong.
  2. Chunk konten membawa fragmen di delta.content. Gabungkan sesuai urutan kedatangan.
  3. Chunk konten penutup memiliki delta kosong dan finish_reason yang tidak null.
  4. Chunk akhir dengan array choices kosong membawa usage. Anda tidak memintanya; chunk ini ditambahkan secara otomatis.
  5. Literal data: [DONE] mengakhiri streaming.

Lindungi diri terhadap array choices yang kosong tersebut: mengakses choices[0] pada chunk penggunaan akan menyebabkan kesalahan dalam loop sederhana. Contoh SDK di bawah ini menanganinya.

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")

Untuk panggilan alat yang dialirkan, delta.tool_calls tiba dalam fragmen; akumulasikan string arguments per indeks panggilan dan uraikan sekali finish_reason adalah tool_calls.

Endpoint model

GET /v1/models hanya memerlukan header Bearer dan mengembalikan objek daftar. Karena ada satu model, data berisi satu entri, uncensored. Klien yang mengisi dropdown model dari rute ini akan menampilkan satu pilihan.

curl https://api.uncensoredapis.com/v1/models -H "Authorization: Bearer $API_KEY"

{
  "object": "list",
  "data": [
    {"id": "uncensored", "object": "model"}
  ]
}

Ini juga cara termurah untuk memverifikasi kunci: status 200 berarti kunci valid, 401 berarti kunci salah atau telah dibuat ulang. Memanggil rute ini tidak menghasilkan token. Untuk penanganan status dan aturan percobaan ulang, lihat buku panduan kesalahan dan batas laju.

Daftar periksa referensi untuk penulis klien

Jika Anda menulis pustaka klien atau membungkus endpoint dalam gateway, verifikasi setiap perilaku berikut terhadap spesifikasi di atas sebelum merilis.

  1. Kebersihan header. Kirimkan kunci hanya di header Authorization, jangan pernah di string kueri, dan jangan pernah mencatat nilai header.
  2. Parse secara defensif. Anggap bidang tambahan yang tidak dikenal dalam respons dapat diabaikan. Kunci parser Anda pada bidang yang didokumentasikan di sini, bukan pada urutan kunci JSON yang tepat.
  3. Periksa finish_reason pada setiap balasan. Tampilkan indikator visual ketika nilainya length, karena pengguna akan membaca teks terpotong sebagai jawaban lengkap.
  4. Anggaran sebelum mengirim. Perkirakan token prompt, tambahkan max_tokens Anda, dan bandingkan jumlahnya dengan 100.000. Menolak secara lokal lebih cepat daripada menunggu kode 400.
  5. Tangani akhir stream. Harapkan chunk dengan daftar choices kosong dan objek usage, lalu [DONE]. Tutup koneksi setelah penanda.
  6. Catat penggunaan. Simpan total_tokens per permintaan agar Anda dapat merekonsiliasi meteran Anda sendiri dengan saldo prabayar nanti.
  7. Hormati batas atas. Akun mengizinkan 300 permintaan per menit per kunci, sehingga gateway yang melayani banyak pengguna perlu memiliki antrian sendiri.

Langkah-langkah ini tidak bergantung pada SDK vendor. Klien HTTP biasa yang mengatur header Bearer dan mengurai JSON sudah cukup, dan contoh SDK di halaman ini hanyalah kemudahan, bukan persyaratan. Gabungkan daftar periksa ini dengan tabel kesalahan di buku panduan dan Anda akan mencakup seluruh siklus permintaan: bangun, kirim, streaming, urai, hitung, dan pulihkan.

Tanya jawab

Bisakah saya mendapatkan lebih dari satu pilihan per permintaan?

Harapkan satu entri dalam choices dan baca choices[0]. Jika Anda menginginkan alternatif, kirimkan permintaan terpisah.

Mengapa message.content null?

Model mengembalikan tool_calls alih-alih teks. Periksa finish_reason, jalankan fungsi, dan kirimkan hasilnya kembali.

Apa yang terjadi jika prompt ditambah max_tokens melebihi 100.000?

Permintaan ditolak dengan kesalahan 400 bad request. Potong prompt atau turunkan max_tokens.

Apakah streaming mengubah harga?

Tidak. Penagihan menggunakan jumlah token prompt dan completion yang sama, dan chunk penggunaan akhir melaporkannya.

Kunci Anda hanya selangkah lagi dari satu formulir

Buat akun, salin kunci, ubah URL dasar. Itu saja seluruh pengaturannya.