Apa arti frasa tersebut
Orang menggunakan "API LLM Lokal OpenAI" untuk dua hal yang terkait. Yang pertama adalah model bahasa yang Anda jalankan sendiri, di laptop atau server rumah, yang mendengarkan di port lokal dan menggunakan format obrolan OpenAI. Yang kedua adalah kebiasaan menulis aplikasi Anda sesuai format tersebut sehingga model di baliknya dapat diganti.
Formatnya adalah kontrak sederhana. Aplikasi Anda mengirimkan tubuh JSON dengan nama model dan daftar messages, masing-masing dengan peran sistem, pengguna, atau asisten. Server membalas dengan objek JSON yang berisi pesan yang dihasilkan, atau dengan aliran potongan kecil jika Anda meminta streaming. SDK resmi untuk Python dan JavaScript membungkus ini, dan mereka memungkinkan Anda mengganti base URL, yang merupakan trik utamanya.
Banyak alat lokal mengekspos kontrak ini. Ollama, LM Studio, server llama.cpp, dan vLLM masing-masing menawarkan rute bergaya OpenAI. Layanan host juga melakukannya, itulah sebabnya dua puluh baris kode klien yang sama dapat berkomunikasi dengan keduanya. Endpoint di situs ini adalah salah satu jenis host. Endpoint ini menerima POST /v1/chat/completions dan GET /v1/models, dan dapat diakses di https://api.onekeyllmapi.com/v1.
Lokal versus yang di-host secara sekilas
Tidak ada yang lebih baik secara umum. Mereka menukar kontrol dengan usaha. Tabel ini berfokus pada perbedaan yang berlaku untuk kategori, bukan untuk produk tertentu.
| Pertanyaan | Runner lokal | API bergaya OpenAI yang di-host |
|---|---|---|
| Ke mana prompt pergi | Tetap di mesin Anda | Data dikirim ke penyedia melalui HTTPS |
| Perangkat keras | Anda menyediakan GPU atau CPU dan memori | Tidak ada di sisi Anda |
| Ukuran model | Dibatasi oleh memori Anda | Apa pun yang disajikan oleh penyedia |
| Model biaya | Perangkat keras dan daya | Per token, dari saldo prabayar di sini |
| Ketersediaan | Selama mesin Anda menyala | Server selalu aktif, batas bersama |
| Pengaturan | Instal, unduh bobot, setel | Buat kunci, atur base URL |
Jika data Anda harus tidak pernah meninggalkan mesin yang Anda kendalikan, lokal menang dan yang di-host adalah alat yang salah. Jika Anda membutuhkan model yang lebih besar dari yang dapat ditampung perangkat keras Anda, atau bot yang tetap dapat dijangkau dari banyak tempat, yang di-host menang. Pengaturan umum mempertahankan keduanya dan memilih per tugas.
Mengalih klien dari lokal ke host
Jika kode Anda sudah berbicara dengan runner lokal, perubahannya adalah tiga nilai. Segalanya lainnya, termasuk cara Anda membuat pesan dan membaca potongan yang dialirkan, tetap sama.
- Base URL. Gunakan
https://api.onekeyllmapi.com/v1sebagai pengganti alamat lokal Anda. - Kunci API. Server lokal sering mengabaikan kunci. Yang di-host membutuhkannya sebagai
Authorization: Bearer <key>, dan SDK mengirimkannya untuk Anda. - ID model. Nama lokal adalah apa pun yang Anda unduh. Di sini ID-nya adalah
uncensored.
Cara yang rapi untuk membuat ini fleksibel adalah membaca ketiga nilai tersebut dari variabel lingkungan, sehingga satu file berfungsi di kedua tempat.
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ.get("LLM_BASE_URL", "https://api.onekeyllmapi.com/v1"),
api_key=os.environ.get("LLM_API_KEY", "YOUR_KEY"),
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")
models = client.models.list()
print([m.id for m in models.data])
resp = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Answer in two sentences."},
{"role": "user", "content": "Why do OpenAI-style endpoints make switching models easy?"},
],
temperature=0.5,
)
print(resp.choices[0].message.content)
Panggilan yang sama dari baris perintah, berguna untuk uji asap cepat:
curl https://api.onekeyllmapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "uncensored", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 20}'
Dengan Node, polanya identik:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.LLM_BASE_URL ?? "https://api.onekeyllmapi.com/v1",
apiKey: process.env.LLM_API_KEY,
});
const res = await client.chat.completions.create({
model: process.env.LLM_MODEL ?? "uncensored",
messages: [{ role: "user", content: "Name three uses for JSON mode." }],
});
console.log(res.choices[0].message.content);
Apa yang API kompatibel OpenAI lakukan dan tidak lakukan
Kompatibilitas berarti format jaringan cocok. Ini tidak menjanjikan bahwa setiap fitur yang ditawarkan layanan asli ada. Sebelum Anda memigrasikan aplikasi nyata, periksa setiap poin ini terhadap target.
Apa yang didukung API ini
- Penyelesaian Chat di
POST /v1/chat/completionsdan daftar model diGET /v1/models. - Streaming melalui server-sent events dengan
stream: true, dengan penggunaan dilaporkan di akhir stream. - Pemanggilan alat melalui
toolsdantool_choice, alirantool_calls, dan hasil dikirim kembali sebagai pesanrole: "tool". - Mode JSON melalui
response_format: {"type": "json_object"}. - Kontrol sampling: temperature, top_p, stop, seed, dan parameter penalti diteruskan.
Apa yang tidak dilakukannya
- Tidak ada generasi gambar, audio, atau video. Ini hanya teks.
- Tidak ada endpoint embedding dan tidak ada penyetelan halus. Jika aplikasi Anda membangun indeks vektor, Anda memerlukan sumber embedding terpisah.
- Hanya satu model. Modelnya adalah model bobot terbuka yang dijalankan oleh penyedia independen. Ini bukan API resmi dari vendor besar mana pun, dan ini bukan router lintas vendor, jadi Anda tidak dapat memilih antara keluarga model dengan mengubah ID.
Runner lokal kadang-kadang berbeda dengan cara lain: server lokal mungkin menawarkan endpoint embedding atau memungkinkan Anda memuat beberapa model, dan ukuran konteks adalah apa pun yang Anda konfigurasikan. Baca dokumentasi target untuk masing-masing, dan simpan daftar singkat fitur yang benar-benar digunakan aplikasi Anda. Dokumentasi quickstart menunjukkan bidang permintaan secara penuh.
Perbedaan konteks, batas, dan biaya
Tiga angka berubah ketika Anda meninggalkan server lokal. Yang pertama adalah jendela. Panjang konteks pelari lokal adalah pengaturan yang terkait dengan memori Anda. Di sini, hal itu tetap pada 100.000 token, yang dibagi untuk prompt dan penyelesaian, dan max_tokens bersifat opsional. Yang kedua adalah konkurensi. Mesin Anda sendiri dapat antri sedalam yang Anda inginkan, tetapi kunci penuh di sini mengizinkan 8 permintaan paralel dan 300 per menit, serta kunci uji coba 2 dan 60. Yang ketiga adalah tagihan.
Penggunaan yang di-host biaya $0,15 per 1M token input dan $0,50 per 1M token output, bayar sesuai penggunaan dari saldo prabayar. Kerjakan pekerjaan harian sebagai contoh: peringkasan memproses 400 dokumen sehari, masing-masing 3.000 token masuk dan 300 token keluar. Input adalah 400 x 3.000 = 1.200.000 token, yang biayanya 1,2 x $0,15 = $0,18. Output adalah 400 x 300 = 120.000 token, yang biayanya 0,12 x $0,50 = $0,06. Total hari adalah $0,24, dan bulan 30 hari adalah $7,20. Bandingkan itu dengan biaya menjaga GPU tetap aktif dan kartu itu sendiri sebelum Anda memutuskan.
Ketika Anda melebihi batas, API menjawab HTTP 429 dengan kode rate_limited atau concurrency. Untuk kelebihan beban singkat, itu menambahkan Retry-After: 5. Pertahankan logika retry yang menunggu dan mencoba lagi. Permintaan yang gagal atau ditolak tidak dikenakan biaya. Saldo tidak pernah kedaluwarsa, sehingga bulan tanpa aktivitas tidak mengeluarkan biaya apa pun.
Permintaan yang dialirkan mempertahankan slot konkurensinya hingga aliran berakhir, jadi tutup aliran yang Anda hentikan membaca. Top-up dimulai dari $20; tingkat dan bonus ada di halaman harga.
Men-debug saat pengalihan tidak berfungsi dengan baik
Sebagian besar migrasi yang gagal disebabkan oleh beberapa penyebab utama. Selesaikan masalah ini sesuai urutan berikut.
- Kesalahan 404 atau koneksi. base URL Anda mungkin tidak memiliki akhiran
/v1, atau memiliki path tambahan. Gunakan tepat sepertihttps://api.onekeyllmapi.com/v1. - Kesalahan autentikasi. Kunci API hilang atau dikirim di header yang salah. Formatnya adalah
Authorization: Bearer <key>. Pengguna SDK harus memastikan variabel lingkungan benar-benar dimuat. - Model tidak ditemukan. Nama model lokal lama masih ada di konfigurasi Anda. Panggil
GET /v1/modelsdan gunakan ID yang tercantum, yaituuncensored. - 429 saat beban tinggi. Anda telah melebihi 8 permintaan paralel atau 300 per menit dengan kunci penuh. Tambahkan antrian atau semaphore.
- Parameter tampaknya diabaikan. Periksa apakah itu salah satu bidang yang diteruskan yang tercantum di atas, dan bandingkan perilakunya dengan
seeddan suhu rendah yang tetap.
Setiap respons menyertakan header X-Request-Id. Catat header tersebut di samping ID permintaan Anda sendiri agar jawaban yang buruk dapat dilacak nanti. Jika Anda menjalankan lalu lintas produksi dan ingin mengukur kualitas dari waktu ke waktu, artikel situs LLM Observability: Myths vs Facts adalah bacaan lanjutan yang baik. Header respons X-Balance-USD, X-RateLimit-Limit-Requests, dan X-RateLimit-Limit-Concurrency juga layak untuk ditangkap.
Mencobanya tanpa komitmen
Cara termurah untuk menguji apakah kode Anda dapat diporting dengan lancar adalah menjalankannya sekali. Buat akun dengan Google atau email dan kata sandi, lalu klaim kredit uji coba senilai $0,50 dari halaman kunci. Proses ini membutuhkan satu klik, tidak memerlukan kartu, dibatasi satu per orang, dan berlaku selama 7 hari. Dapatkan kunci Anda di halaman kunci API, atur tiga variabel lingkungan dari di atas, dan jalankan suite pengujian Anda yang ada.
Jika pengujian berhasil dan penggunaan sesuai dengan anggaran Anda, isi saldo mulai dari $20, dengan kartu (Visa, Mastercard, Apple Pay, Google Pay) atau kripto (USDT di TRC20, USDC di Base). Prompt tidak digunakan untuk pelatihan. Model ini disesuaikan untuk menjawab tanpa penolakan untuk penggunaan dewasa yang sah, dengan satu aturan tetap: tidak ada konten seksual yang melibatkan anak di bawah umur.
