TR ▾
NSFW Video Generator

Yetişkin video iş akışları için sansürsüz API

Python için Ücretsiz LLM'ler: Yerel Modeller vs Sunulan API

Python için ücretsiz LLM'ler iki türlüdür: kendi makinenizde çalıştıracağınız açık ağırlıklı modeller ve birkaç sentlik ücretle çalışan sunulan uç noktalar. Bu rehber bunları karşılaştırır ve sunulan yol için çalışan kod sağlar.

güncellendi

Yerel makinenin sunulan sunucu kümesine bağlandığını gösteren izometrik illüstrasyon, yerel ve sunulan LLM'leri karşılaştırır

Temel noktalar

  1. Yerel açık ağırlıklı modeller token başına ücretsizdir ancak bellek, kurulum süresi ve bakım gerektirir.
  2. Sunulan API OpenAI uyumludur: openai paketini yükleyin, base URL'yi ayarlayın, model ID'si olarak uncensored'ı kullanın.
  3. Akış, fonksiyon çağırma ve JSON modu normal sohbet tamamlama çağrısı üzerinden çalışır.
  4. Deneme anahtarı 7 gün boyunca $0.50 kredi verir, 2 eşzamanlı istek ve dakikada 60 istek ile.

Python betiğine ücretsiz bir LLM ekleme yolları

Ücretsiz llms for python araması yapanlar genellikle iki şeyden birini kastediyor. İlki Ollama, llama.cpp veya Hugging Face transformers kütüphanesi gibi bir şey kullanarak indireceğiniz ve çalıştıracağınız açık ağırlıklı bir modeldir. İkincisi ise prototip için ücretsiz gibi hissettirecek kadar ucuz veya yeterli deneme kredisi olan sunulan bir uç noktadır. İkisi de meşrudur ve farklı işler için uygundur.

Yerel çalıştırma, token başına fatura olmaması ve verilerinizin makinenizden çıkmaması anlamına gelir. Ayrıca seçtiğiniz model için yeterli RAM veya GPU belleğine sahip olmanız, indirmeleri beklemeniz ve dizüstü bilgisayara sığan küçük modellerin büyük modellere göre daha zayıf yanıt vermesi demektir. Barındırılan bir API donanım sorununu ortadan kaldırır, ancak deneme süresi bittikten sonra token başı ödeme yaparsınız. Bu sayfa her iki seçeneği de dürüstçe ele alır, ardından bu sitedeki barındırılan seçenek için Python kodunu gösterir; bu API OpenAI ile uyumludur ve standart openai paketiyle çalışır.

Yerel modeller ve sunulan API yan yana

SoruKendi başınıza çalıştırınSunulan ön ödemeli API
Token başına maliyetYok, ancak donanım ve elektrik için ödeme yaparsınız1M giriş için $0,15, 1M çıkış için $0,50
Kurulum süresiÇalışma zamanını yükleyin, ağırlıkları indirin, ayarları ince ayarlayınBir paket yükleyin, bir anahtar yapıştırın
Bağlam uzunluğuBelleğinizle sınırlıdır100.000 token, istem ve tamamlama
EşzamanlılıkMakinenizin kaldırabildiği her şeyTam anahtarda eşzamanlı 8 istek, deneme anahtarında 2
RedlerSeçtiğiniz ağırlıklara bağlıdırYasal yetişkin kullanımı için içerik reddi olmadan yanıt verecek şekilde ayarlanmıştır
Çevrimdışı kullanımEvetHayır

Kapasiteli bir GPU'nuz varsa ve işiniz gizli veya çevrimdışı ise yerel bir çözüm iyidir ve okumayı burada bitirebilirsiniz. Makineye sahip olmadan daha büyük bir modele ihtiyacınız varsa veya betiğinizin dizüstü bilgisayarda, sunucuda ve CI çalıştırıcısında aynı şekilde davranmasını istiyorsanız sunulan yol daha basittir. Birçok proje hem geliştirme sırasında küçük bir yerel model hem de üretimde sunulan modeli, tek bir temel URL değiştirerek kullanır.

Sunulan uç noktayı beş dakikada kurun

Önce bir anahtara ihtiyacınız var. Google veya e-posta ve şifre ile kaydolun, ardından API anahtarı sayfası üzerinde tek tıkla $0.50 deneme kredisi talep edin. Deneme 7 gün boyunca geçerlidir, kişi başı bir kez ve ödeme gerektirmez. Ardından SDK'yı yükleyin ve anahtarı kaynak kodunuzun dışında tutun.

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

İstemci, varsayılan OpenAI kurulumundan iki değişiklik gerektirir: base URL ve anahtar. Model ID'si uncensored'dir ve yalnızca bir model sunulur.

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)

Kimlik doğrulama, SDK'nın sizin için eklediği standart Authorization: Bearer başlığıdır. İki yöntem vardır: POST /v1/chat/completions ve GET /v1/models. Bağlantıyı client.models.list() ile onaylayabilirsiniz; bu kullanılabilir model kimliğini döndürür. Tam parametre listesi belgeleme sayfasında yer alır.

Akış yanıtları

Bir insanın izlediği her şey için akış kullanın. stream=True ayarlayın ve sunucu gönderilen olaylar geldikçe parçalara göre yineleyin. Kullanım akışın sonunda raporlanır, böylece token sayılarını hala günlüğe kaydedebilirsiniz.

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)

İnsanları yakalayan bir ayrıntı: akışlı bir istek, akış bitene kadar eşzamanlılık yuvasını tutar. 2 yuvalı bir deneme anahtarında, iki açık akış üçüncü bir çağrıda concurrency koduyla 429 hatası alır. Her zaman akışı tüketin veya kapatın.

Araç çağırma ve JSON modu

Uç nokta tools, tool_choice, akışlı tool_calls ve role: "tool" olarak gönderilen sonuçları destekler. İşte bir fonksiyonla tam istek-cevap döngüsü.

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)

arguments'i her zaman savunmacı olarak ayrıştırın; model bunu bir JSON dizgesi olarak döndürür ve herhangi bir model bazen hatalı bir tane üretebilir. Araçlar olmadan yapılandırılmış çıktı için JSON modunu kullanın.

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

JSON kelimesini söyleyin ve isteminizdeki anahtarları adlandırın, sıcaklığı düşük tutun. Üretim kodu için json.loads'i bir try bloğu içine alın.

Hız limitleri, hatalar ve yeniden denemeler

Tam anahtar 8 eşzamanlı istek ve dakikada 300 istek yapmanızı sağlar. Deneme anahtarı 2 ve 60 yapmanıza izin verir. Aşıp geçerseniz HTTP 429 alırsınız: rate_limited (dakikada çok fazla) veya concurrency (aynı anda çok fazla). Geçici aşırı yüklenmede API ayrıca 429 döndürür ve Retry-After: 5 başlığı gönderir. SDK bazı hataları kendi başına yeniden dener; dallanan bir betik için küçük bir açık sarmalayıcı daha nettir.

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

max_workers'i anahtarınızın eşzamanlılık limitine eşleştirmek çoğu 429'u önler. Her yanıt ayrıca X-Request-Id, X-Balance-USD ve iki hız limiti başlığı taşır, bunları hata ayıklama veya destek için ihtiyaç duyduğunuzda client.chat.completions.with_raw_response.create(...) üzerinden okuyabilirsiniz.

Yerel ve sunulan arasında nasıl seçim yapılır

İdeolojiden kaçının ve projeniz hakkında dört soruyu yanıtlayın.

  1. Verilerin makinenizde kalması mı gerekiyor? Bir sözleşme veya alışkanlık evet diyorsa, yerel çalıştırın. Barındırılan istemler burada eğitim için kullanılmaz, ancak ağ üzerinden iletilirler.
  2. Ne kadar belleğiniz var? Model boyutu kaliteyi belirler. Dahili GPU'suz bir dizüstü bilgisayar sizi küçük modellere sınırlar ve yanıtlar bunu gösterecektir. Sunulan bir model size 100,000 token bağlam penceresi ile büyük bir model verir, bu evde eşleşmesi zordur.
  3. Kaç istek göndereceksiniz? Haftada birkaç yüz her iki tarafta da önemsizdir. Ayda yüz binlerce, sunulan faturayı gerçek bir sayıya dönüştürür ve makine boşta duruyorsa yerel bir kutu çekici görünmeye başlar. Toplamı hesaplayın: 100.000 istek, 1.000 girdi ve 500 çıktı tokeni 100.000 x $0.0004 = $40'a mal olur.
  4. Reddettiği durumların belirli bir şekilde ele alınmasını ister misiniz? Çoğu açık ağırlıklı model yerleşik reddetme davranışıyla gelir, diğerleri ise bunu kaldırmak için ayarlanmıştır. Burada sunulan model, yasal yetişkin kullanımı için içerik reddetmeleri olmadan yanıt verecek şekilde ayarlanmıştır, bu yüzden doğru ağırlıkları aramanıza gerek yoktur.

Yanıtlarınız her iki yöne de işaret ediyorsa, ilk hafta için sunulan ile başlayın. Deneme ücretsizdir ve donanım satın almadan veya başka bir çok gigabytlık dosya indirmeden önce istemlerinizin neye ihtiyaç duyduğunu öğreneceksiniz.

Python betiklerinde yaygın hatalar

İnsanların karşılaştığı sorunların çoğu küçük ve düzeltilebilirdir.

  • Yanlış base URL. /v1 ile bitmelidir. Eksik sonek bir 404 verir, yardımcı bir mesaj değil. Şüphe halinde client.base_url yazdırın.
  • Anahtar kodda. Yukarıdaki gibi bir ortam değişkeninden okuyun ve .env dosyanızı .gitignore dosyasına ekleyin.
  • Yanlış model adı. Tek model ID'si uncensored'dir. Diğer sağlayıcılardan isimler çalışmaz, bu yüzden kodu aktarırken değiştirin.
  • Sonsuz döngüler. Sonlanmayan bir fonksiyon çağırma döngüsü pahalı bir hatadır. Örneğin beş tur ile sınırlayın.
  • Bağlam bütçesini görmezden gelme. İstem ve tamamlama 100.000 tokeni paylaşır. Her dönüşü sonsuza kadar eklerseniz, nihayetinde limite çarparsınız. Eski mesajları kısaltın veya özetleyin.
  • JSON'un her zaman geçerli olduğu varsayımı. JSON modunda bile, kullanmadan önce ihtiyacınız olan anahtarları kontrol edin.

Sunucu tarafında bir şeyler yanlış görünürse, support adresine yazarken yanıtın X-Request-Id değerini belirtin. Bu, operatörlerin tam çağrınızı bulmasını sağlar.

Python işleri için sunulan seçeneğin maliyeti

1.000 giriş ve 500 çıkış token'ı içeren tipik bir betik çağrısı $0,00015 + $0,00025 = $0,0004 tutarındadır. $0,50 deneme kredisi yaklaşık 1.250 çağrıyı karşılar. Minimum $20 bakiye yükleme 50.000 çağrıyı karşılar. Kredi süresi dolmaz, başarısız veya reddedilen istekler için ücret alınmaz ve istemler eğitim için kullanılmaz. Bakiye yükleme $500'e kadar çıkabilir, $50 ve üzeri yüklemelerde bonus sağlanır. Ödeme kripto para ile yapılır: TRC20 üzerinden USDT veya Base üzerinden USDC. Detaylar için fiyatlandırma sayfasına bakın.

Sadece metin destekler: resim, ses, video, gömme (embedding) veya ince ayar (fine-tuning) yoktur. Tek katı kural, reşit olmayanlar ile ilgili cinsel içeriklerin yasaklanmasıdır. Daha az reddedilme ile metin üretimi yapan bir Python projesi için bu, tüm yelpazeyi kapsar.

Sorular ve cevaplar

Hangi Python paketine ihtiyacım var?

Resmi openai paketi. base_url'yi https://api.nsfwvideogenerator.cc/v1 olarak ayarlayın, anahtarınızı api_key olarak iletin ve model kimliği olarak uncensored'ı kullanın.

LangChain veya diğer çerçeveleri kullanabilir miyim?

API, chat tamamlama formatını takip ettiği için, bir OpenAI uyumlu temel URL ve anahtarı ayarlamanıza olanak tanıyan herhangi bir istemci çalışmalıdır. Temel URL'yi işaret edin ve model adı olarak uncensored'ı kullanın.

Ücretsiz yerel modeller, barındırılan bir modele eşdeğer mi?

Model ve donanımınıza bağlıdır. Bir dizüstü bilgisayara sığan modeller genellikle büyük bir barındırılan modele göre daha küçük ve daha zayıftır, ancak token başına maliyetleri yoktur ve çevrimdışı çalışır.

Python'da 429 hatalarından nasıl kaçınılır?

İş parçacığı sayısını eşzamanlılık limitinizde veya altında tutun (deneme anahtarında 2, tam anahtarında 8). rate_limited, concurrency veya Retry-After: 5 yanıtı aldığınızda kısa bir bekleme süresinden sonra yeniden deneyin.

Anahtarınız bir formla hemen elinizde

Bir hesap oluşturun, anahtarı kopyalayın ve base URL'yi değiştirin. Kurulum bu kadar.