ID ▾
NSFW Video Generator

API Tanpa Sensor untuk pipa video dewasa

LLM Gratis untuk Python: Model Lokal vs API Terhosting

LLM gratis untuk Python terdiri dari dua jenis: model bobot terbuka yang Anda jalankan di mesin Anda sendiri, dan endpoint terhosting yang dikenakan biaya beberapa sen. Panduan ini membandingkannya dan memberikan kode yang berfungsi untuk jalur terhosting.

Diperbarui

Ilustrasi isometrik mesin lokal yang terhubung ke klaster server terhosting, membandingkan LLM lokal dan terhosting

Poin utama

  1. Model bobot terbuka lokal tidak ada biaya per token tetapi membutuhkan memori, waktu penyiapan, dan pemeliharaan.
  2. API terhosting kompatibel dengan OpenAI: instal paket openai, atur URL dasar, gunakan ID model uncensored.
  3. Streaming, pemanggilan alat, dan mode JSON semuanya berfungsi melalui panggilan penyelesaian obrolan normal.
  4. Kunci uji coba memberikan kredit $0,50 selama 7 hari, dengan 2 permintaan konkuren dan 60 permintaan per menit.

Dua cara untuk memasukkan LLM gratis ke dalam skrip Python

Ketika orang mencari LLM gratis untuk Python, mereka biasanya berarti salah satu dari dua hal. Yang pertama adalah model bobot terbuka yang Anda unduh dan jalankan sendiri, menggunakan sesuatu seperti Ollama, llama.cpp, atau perpustakaan Hugging Face transformers. Yang kedua adalah endpoint ter-host yang biayanya sangat kecil, atau dilengkapi dengan cukup kredit trial, sehingga terasa gratis untuk prototipe. Keduanya sah, dan keduanya cocok untuk pekerjaan yang berbeda.

Menjalankan secara lokal berarti tidak ada tagihan per-token dan tidak ada data yang meninggalkan mesin Anda. Ini juga berarti Anda membutuhkan RAM atau memori GPU yang cukup untuk model yang Anda pilih, Anda menunggu unduhan, dan model kecil yang muat di laptop memberikan hasil yang lebih buruk daripada model besar. API ter-host menghilangkan pertanyaan perangkat keras, tetapi Anda membayar per token setelah masa trial habis. Halaman ini membahas keduanya secara jujur, lalu menunjukkan kode Python untuk opsi ter-host di situs ini, yang kompatibel dengan OpenAI dan berfungsi dengan paket openai standar.

Model lokal dan API terhosting berdampingan

PertanyaanJalankan sendiriAPI terhosting prabayar
Biaya per tokenTidak ada, tetapi Anda membayar untuk perangkat keras dan daya$0,15 per 1M input, $0,50 per 1M output
Waktu penyiapanInstal runtime, unduh bobot, sesuaikan pengaturanInstal satu paket, tempelkan kunci
Panjang konteksDibatasi oleh memori Anda100.000 token, prompt plus penyelesaian
KonkurensiApa pun yang ditangani oleh mesin Anda8 permintaan sekaligus pada kunci penuh, 2 pada kunci trial
PenolakanTergantung pada bobot yang Anda pilihDisesuaikan untuk menjawab tanpa penolakan konten untuk penggunaan dewasa yang sah
Penggunaan offlineYaTidak

Jika Anda memiliki GPU yang mampu dan pekerjaan Anda bersifat pribadi atau offline, lokal adalah jawaban yang baik dan Anda dapat berhenti membaca di sini. Jika Anda menginginkan model yang lebih besar tanpa memiliki mesinnya, atau jika Anda ingin skrip Anda berperilaku sama di laptop, server, dan runner CI, jalur terhosting lebih sederhana. Banyak proyek menggunakan keduanya: model lokal kecil saat pengembangan, yang terhosting saat produksi, dialihkan dengan mengubah satu URL dasar.

Siapkan endpoint terhosting dalam lima menit

Anda memerlukan kunci terlebih dahulu. Daftar dengan Google atau dengan email dan kata sandi, lalu klaim kredit trial $0,50 dengan satu klik di halaman kunci API. Masa trial berlaku selama 7 hari, satu per orang, dan tidak memerlukan pembayaran. Kemudian instal SDK dan simpan kunci di luar kode sumber Anda.

pip install openai
export NOTRACK_API_KEY="sk-your-key-here"

Klien membutuhkan dua perubahan dari pengaturan OpenAI standar: URL dasar dan kunci. ID modelnya adalah uncensored, dan hanya satu model yang ditawarkan.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.nsfwvideogenerator.cc/v1",
    api_key=os.environ["NOTRACK_API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise writing assistant."},
        {"role": "user", "content": "Give me three title ideas for a noir short story."},
    ],
    temperature=0.8,
)

print(resp.choices[0].message.content)
print(resp.usage)

Otentikasi adalah header Authorization: Bearer standar, yang ditambahkan oleh SDK untuk Anda. Ada dua metode: POST /v1/chat/completions dan GET /v1/models. Anda dapat mengkonfirmasi koneksi dengan client.models.list(), yang mengembalikan ID model yang tersedia. Daftar parameter lengkap ada di halaman dokumentasi.

Respons streaming

Untuk apa pun yang dilihat orang, gunakan streaming. Atur stream=True dan iterasi melalui bagian-bagian saat Server-Sent Events tiba. Penggunaan dilaporkan di akhir stream, sehingga Anda masih dapat mencatat jumlah token.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a four-line poem about rain on a tin roof."}],
    stream=True,
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    usage = getattr(chunk, "usage", None)
    if usage:
        print("\n", usage)

Satu detail yang menjebak orang: permintaan streaming memegang slot konkurensinya hingga stream selesai. Pada kunci uji coba dengan 2 slot, dua stream terbuka berarti panggilan ketiga akan mendapatkan 429 dengan kode concurrency. Selalu konsumsi atau tutup stream.

Pemanggilan alat dan mode JSON

Endpoint mendukung tools, tool_choice, streaming tool_calls, dan hasil dikirim kembali sebagai role: "tool". Berikut adalah perjalanan lengkap dengan satu fungsi.

import json

tools = [{
    "type": "function",
    "function": {
        "name": "word_count",
        "description": "Count the words in a piece of text.",
        "parameters": {
            "type": "object",
            "properties": {"text": {"type": "string"}},
            "required": ["text"],
        },
    },
}]

messages = [{"role": "user", "content": "How many words are in: the quick brown fox jumps"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message

if msg.tool_calls:
    messages.append(msg)
    for call in msg.tool_calls:
        args = json.loads(call.function.arguments)
        result = len(args["text"].split())
        messages.append({
            "role": "tool",
            "tool_call_id": call.id,
            "content": str(result),
        })
    final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
    print(final.choices[0].message.content)

Selalu uraikan argumen arguments secara defensif; model mengembalikannya sebagai string JSON dan model apa pun dapat secara berkala menghasilkan string yang berformat buruk. Untuk output terstruktur tanpa alat, gunakan mode JSON.

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply with a JSON object with keys title and tags (list of strings)."},
        {"role": "user", "content": "Describe a lighthouse keeper's diary."},
    ],
    response_format={"type": "json_object"},
    temperature=0.2,
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

Sebutkan kata JSON dan nama kunci dalam prompt Anda, dan jaga suhu tetap rendah. Bungkus json.loads dalam blok try untuk kode produksi.

Batas laju, kesalahan, dan percobaan ulang

Kunci penuh memungkinkan 8 permintaan konkuren dan 300 permintaan per menit. Kunci trial memungkinkan 2 dan 60. Lewati batas dan Anda akan mendapatkan HTTP 429 dengan kode rate_limited (terlalu banyak per menit) atau concurrency (terlalu banyak sekaligus). Saat kelebihan beban sementara, API juga mengembalikan 429, dengan header Retry-After: 5. SDK mencoba lagi beberapa kesalahan secara otomatis; untuk skrip yang menyebar, pembungkus eksplisit kecil lebih jelas.

import time
from concurrent.futures import ThreadPoolExecutor
from openai import RateLimitError

def ask(prompt, tries=4):
    for attempt in range(tries):
        try:
            r = client.chat.completions.create(
                model="uncensored",
                messages=[{"role": "user", "content": prompt}],
                max_tokens=300,
            )
            return r.choices[0].message.content
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited")

prompts = [f"Summarize idea number {i} in one sentence." for i in range(20)]
with ThreadPoolExecutor(max_workers=2) as pool:   # 8 on a full key
    results = list(pool.map(ask, prompts))

Mencocokkan max_workers dengan batas konkurensi kunci Anda mencegah sebagian besar 429 sebelum terjadi. Setiap respons juga membawa X-Request-Id, X-Balance-USD dan dua header batas laju, yang dapat Anda baca melalui client.chat.completions.with_raw_response.create(...) ketika Anda membutuhkannya untuk debugging atau dukungan.

Cara memilih antara lokal dan terhosting

Lewati ideologi dan jawab empat pertanyaan tentang proyek Anda.

  1. Apakah data harus tetap di mesin Anda? Jika kontrak atau kebiasaan mengatakan ya, jalankan secara lokal. Prompt ter-host tidak digunakan untuk pelatihan di sini, tetapi mereka memang melintas melalui jaringan.
  2. Berapa banyak memori yang Anda miliki? Ukuran model menentukan kualitas. Laptop tanpa GPU khusus membatasi Anda pada model kecil, dan jawabannya akan menunjukkannya. Model terhosting memberi Anda model besar dengan jendela konteks 100.000 token, yang sulit dicocokkan di rumah.
  3. Berapa banyak permintaan yang akan Anda kirim? Beberapa ratus per minggu adalah hal sepele di kedua sisi. Ratusan ribu per bulan mengubah tagihan ter-host menjadi angka nyata, dan kotak lokal mulai terlihat menarik jika menganggur. Hitung jumlahnya: 100.000 permintaan dengan 1.000 token input dan 500 token output biaya 100.000 x $0,0004 = $40.
  4. Apakah Anda memerlukan penolakan yang ditangani dengan cara tertentu? Banyak model bobot terbuka dilengkapi dengan perilaku penolakan bawaan, dan yang lain disesuaikan untuk menghilangkannya. Model ter-host di sini disesuaikan untuk menjawab tanpa penolakan konten untuk penggunaan dewasa yang sah, sehingga Anda tidak perlu mencari bobot yang tepat.

Jika jawaban Anda mengarah ke kedua arah, mulailah dengan terhosting selama minggu pertama. Uji coba tidak ada biayanya, dan Anda akan mempelajari apa yang dibutuhkan prompt Anda sebelum membeli perangkat keras atau mengunduh file multi-gigabyte lainnya.

Kesalahan umum dalam skrip Python

Kebanyakan masalah yang dihadapi orang kecil dan dapat diperbaiki.

  • URL dasar yang salah. Harus diakhiri dengan /v1. Akhiran yang hilang memberikan 404, bukan pesan yang membantu. Cetak client.base_url jika ragu.
  • Kunci dalam kode. Bacalah dari variabel lingkungan, seperti di atas, dan tambahkan file .env Anda ke .gitignore.
  • Nama model yang salah. Satu-satunya ID model adalah uncensored. Nama dari penyedia lain tidak akan berfungsi, jadi ubahlah saat Anda memport kode.
  • Loop tak terbatas. Loop pemanggilan alat yang tidak pernah berakhir adalah bug yang mahal. Batasi hingga, misalnya, lima putaran.
  • Mengabaikan anggaran konteks. Prompt dan penyelesaian berbagi 100.000 token. Jika Anda menambahkan setiap giliran selamanya, Anda akan akhirnya mencapai batas. Potong atau ringkas pesan lama.
  • Mengasumsikan JSON selalu valid. Bahkan dalam mode JSON, periksa kunci yang Anda butuhkan sebelum menggunakannya.

Ketika sesuatu terlihat salah di sisi server, kutip nilai X-Request-Id dari respons saat Anda menulis ke dukungan. Ini memungkinkan operator menemukan panggilan tepat Anda.

Berapa biaya opsi terhosting untuk pekerjaan Python

Panggilan skrip tipikal dengan 1.000 input dan 500 token output biaya $0,00015 ditambah $0,00025, jadi $0,0004. Trial $0,50 mencakup sekitar 1.250 dari mereka. Top-up $20, minimum, mencakup 50.000. Saldo prabayar tidak pernah kedaluwarsa, permintaan yang gagal atau ditolak tidak dikenakan biaya, dan prompt tidak digunakan untuk pelatihan. Top-up hingga $500 dengan bonus dari $50, dan pembayaran dalam kripto, USDT pada TRC20 atau USDC pada Base. Lihat halaman harga untuk detailnya.

Ini hanya teks: tidak ada gambar, audio, video, embedding, atau fine-tuning. Dan satu aturan kerasnya adalah tidak ada konten seksual yang melibatkan anak di bawah umur. Untuk proyek Python yang membutuhkan generasi teks dengan lebih sedikit penolakan, itu adalah seluruh permukaannya.

Tanya jawab

Paket Python mana yang saya butuhkan?

Paket openai resmi. Atur base_url ke https://api.nsfwvideogenerator.cc/v1, masukkan kunci Anda sebagai api_key, dan gunakan ID model uncensored.

Bisa menggunakan LangChain atau framework lain?

Klien apa pun yang memungkinkan Anda mengatur URL dasar dan kunci yang kompatibel dengan OpenAI seharusnya berfungsi, karena API mengikuti format penyelesaian obrolan. Arahkan ke URL dasar dan gunakan uncensored sebagai nama model.

Apakah model lokal gratis sama baiknya dengan yang ter-host?

Hal ini bergantung pada model dan perangkat keras Anda. Model yang muat di laptop biasanya lebih kecil dan lebih lemah dibandingkan model ter-host yang besar, tetapi tidak ada biaya per token dan dapat digunakan secara offline.

Bagaimana cara saya menghindari kesalahan 429 di Python?

Jaga jumlah utas pekerja tetap di bawah atau sama dengan batas konkurensi Anda (2 pada kunci uji coba, 8 pada kunci penuh), dan coba lagi setelah jeda singkat saat Anda mendapatkan respons rate_limited, concurrency, atau Retry-After: 5.

Kunci Anda hanya selangkah lagi dari satu formulir

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