TR ▾
API anahtarı al

Python ile Codex API: Kodlama LLM'sine Çağrı

Codex API için Python kurulumundaki en basit yöntem, farklı bir base URL'ye işaret eden resmi openai paketidir. Aşağıdaki örnekler, bu OpenAI uyumlu uç noktada kod üretimi, JSON modu, fonksiyon çağırma ve akış işlemlerini kapsar.

güncellendi

Kod bloklarından bir sunucu küpüne uzanan, Python ile kodlama LLM API'sine çağrıları gösteren parlayan bir kablo
Bir dizüstü bilgisayarı bir sunucu küpüne bağlayan, bir istemciyi bir API base URL'sine yönlendirmeyi gösteren parlayan bir kablo

Temel noktalar

  • openai paketini yükleyin, base_url'yi https://api.getcodexapi.com/v1 olarak ayarlayın ve modeli uncensored olarak ayarlayın.
  • Kod ve JSON için düşük sıcaklık (0 ile 0.3 arasında), beyin fırtınası için daha yüksek sıcaklık kullanın.
  • Fonksiyon çağırma, JSON modu ve akış desteklenir; gömme (embeddings) desteklenmez.
  • Tam anahtarınızda eşzamanlılığı 8 ile sınırlayın ve 429 yanıtlarını kısa bir bekleme süresinden sonra yeniden deneyin.

Kurulum ve ilk istek

Bu bağımsız bir OpenAI uyumlu servistir, OpenAI'ın kendi Codex API'si değildir. Tek modeli açık ağırlıklıdır, yalnızca metin içerir ve kodu yeterince iyi yönetir; bu nedenle oluşturma, açıklama ve yeniden düzenleme görevleri için hala gözden geçirmeniz gerekir. İsterseniz önce arka planı öğrenmek için OpenAI Codex API sayfası iki modelin nasıl ilişkili olduğunu açıklar.

SDK'yı pip install openai ile yükleyin, API anahtarı sayfasından bir anahtar oluşturun ve çalıştırın:

# pip install openai
from openai import OpenAI

client = OpenAI(base_url="https://api.getcodexapi.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a senior Python developer. Reply with code only, no commentary."},
        {"role": "user", "content": "Write a function that parses an ISO 8601 date string and returns a datetime."},
    ],
    temperature=0.2,
)
print(resp.choices[0].message.content)

Yeni kullanıcıların $0,50 değerindeki deneme kredisi, bu tür binlerce küçük çağrıyı karşılar. Kod daha az rastgelelikten yarar aldığı için sıcaklık 0.2'dir. Cevabın etrafında bir markdown fence görürseniz, kodda bunu kaldırın veya ham metin için sistem mesajında isteyin. Codex API base URL sayfası tam adresi tekrar listeler.

Çalışan kod için istem yazma

Çıktıyı geliştirmek için herhangi bir parametreden daha etkili olan birkaç alışkanlık vardır.

  • Dili ve sürümü belirtin. "Python 3.11, yalnızca standart kütüphane" tahmin etme ihtiyacını büyük ölçüde azaltır.
  • İmzayı verin. İşlev başlığını ve bir docstring yapıştırın ve modelden gövdeyi doldurmasını isteyin.
  • Bir örnek girdi ve çıktı gösterin. Bu, metinden daha iyi kenar durumları belirler.
  • Tek bir şey isteyin. İşlevi oluşturun, ardından ikinci bir çağrıda testleri isteyin.
  • Düzenlemeler için bir diff isteyin. Tüm dosya yeniden yazmaları çıktı tokenlarını tüketir; bu da girdiden daha pahalıdır.

Bağlam penceresi 100.000 token boyutundadır ve max_tokens isteğe bağlıdır. Bir kod görevi için birkaç modül yapıştırıp hala yanıt için yer bırakabilirsiniz. max_tokens ayarlamak, kontrolsüz çıktılara karşı bir güvenlik ağı olarak yalnızca yararlıdır.

Yapılandırılmış sonuçlar için JSON modu

Kod cevabı tükettiğinde JSON modunu kullanın. Bu, çıktıyı geçerli JSON yapar; şemanızı zorlamaz, bu nedenle anahtarları isteminizde adlandırın ve bunları kontrol edin.

import json
from openai import OpenAI

client = OpenAI(base_url="https://api.getcodexapi.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    response_format={"type": "json_object"},
    messages=[
        {"role": "system", "content": "Return JSON with keys: name, args (list of strings), returns."},
        {"role": "user", "content": "Describe the signature of: def clamp(x, lo, hi)."},
    ],
    temperature=0,
)
data = json.loads(resp.choices[0].message.content)
print(data["name"], data["args"])

Bunu try/except bloğu ile json.loads etrafında eşleştirin ve hata mesajını geri gönderen tek bir yeniden deneme ekleyin. Bu, nadir bozuk yanıtları pratikte çözer. Tekrarlanan çalıştırmaların eşleşmesi için sıcaklığı 0 olarak ayarlayın.

Araç çağırma

Araçlarla işlevleri tanımlersiniz ve model ne zaman çağıracak olduğuna karar verir. İşlevi siz çalıştırırsınız, ardından çıktıyı tool rolü ile geri gönderirsiniz. Bu, her kodlama ajanının temelidir.

import json
from openai import OpenAI

client = OpenAI(base_url="https://api.getcodexapi.com/v1", api_key="YOUR_KEY")

tools = [{
    "type": "function",
    "function": {
        "name": "run_tests",
        "description": "Run the project's test suite and return the output.",
        "parameters": {
            "type": "object",
            "properties": {"path": {"type": "string"}},
            "required": ["path"],
        },
    },
}]

messages = [{"role": "user", "content": "Run the tests in tests/unit and tell me what failed."}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools, tool_choice="auto")
msg = first.choices[0].message

if msg.tool_calls:
    call = msg.tool_calls[0]
    args = json.loads(call.function.arguments)
    output = "2 passed, 1 failed: test_parse_empty"          # replace with a real runner
    messages.append(msg)
    messages.append({"role": "tool", "tool_call_id": call.id, "content": output})
    final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
    print(final.choices[0].message.content)

Oluşturulan kodu diğer katkılar gibi test edin: çalıştırın, lintleyin ve bir istem değişikliğinin sonuçları kötüleştirdiğinde fark etmeniz için bilinen iyi çıktılara sahip küçük bir istem paketi tutun. Sürümleri karşılaştırırken seed ve sıcaklığı sabitleyin.

Notlar: araç açıklamalarını kısa ve doğrudan tutun, bir şey çalıştırmadan önce argümanları doğrulayın ve model çıktısını doğrudan bir kabuğa geçirmeyin. Bir döngü için, tool_calls mevcut olduğu sürece çağrıyı tekrarlayın ve maksimum adım sayısından sonra durun. Her adım geçmişi yeniden gönderir, bu nedenle on adımlı bir çalışma yaklaşık olarak on kat bağlam için ödeme yapar.

Akış ve 429 hatası durumunda yeniden deneme

Etkileşimli araçlar için tokenlar geldikçe akış yapın. Kullanım bilgisi akışın sonunda gelir, bu da maliyet loglamasını kolaylaştırır.

import time
from openai import OpenAI, RateLimitError

client = OpenAI(base_url="https://api.getcodexapi.com/v1", api_key="YOUR_KEY", max_retries=0)

def ask(prompt, tries=4):
    for attempt in range(tries):
        try:
            stream = client.chat.completions.create(
                model="uncensored",
                messages=[{"role": "user", "content": prompt}],
                stream=True,
                stream_options={"include_usage": True},
            )
            text = []
            for chunk in stream:
                if chunk.choices and chunk.choices[0].delta.content:
                    piece = chunk.choices[0].delta.content
                    text.append(piece)
                    print(piece, end="", flush=True)
                if chunk.usage:
                    print("\ntokens:", chunk.usage.prompt_tokens, chunk.usage.completion_tokens)
            return "".join(text)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited")

ask("Explain Python generators in four sentences.")

Yeniden deneme döngüsünün arkasındaki limitler: tam anahtar 8 eşzamanlı istek ve dakikada 300 izin verir; deneme anahtarı ise 2 ve 60 izin verir. Bir limiti aştığınızda, kodu rate_limited veya concurrency olan HTTP 429 alırsınız. Geçici aşırı yüklenme de Retry-After: 5 başlığı ile 429 verir. Örnek, istemcide max_retries=0 ayarlar böylece bekleme sürelerini kendi döngünüz kontrol eder. Akışlı bir istek, akış bitene kadar eşzamanlılık slotunu tutar, bu nedenle akışı her zaman tüketin veya kapatın.

Aynı anda çok sayıda istek gönderme

Yüz işlev için testler oluşturma gibi toplu işler için bir eşzamanlılık sınırı gerekir. Tam anahtarınızda en fazla 8 işçi ile bir iş parçacığı havuzu kullanın.

Basit bir desen, ask çağıran bir işlevin etrafında ThreadPoolExecutor(max_workers=6) kullanmaktır; bu, diğer işler için iki slot boş bırakır. Deneme anahtarı ile 2 işçi kullanın. Daha büyük bir sayı geçerseniz, API ek istekleri concurrency hataları ile yanıt verir ve yeniden deneme döngünüz çalışmak yerine bekleme süresi harcar. Asenkron kod için, her çağrının etrafında asyncio.Semaphore(6) ile AsyncOpenAI kullanın; bu, iş parçacıkları olmadan aynı sınırı sağlar. X-RateLimit-Limit-Requests ve X-RateLimit-Limit-Concurrency yanıt başlıkları anahtarınız için limitleri gösterir.

Kodlama iş yüklerinin maliyeti

Fiyat 1M girdi tokenı başına $0,15 ve 1M çıktı tokenı başına $0,50'dir. Diyelim ki 200 işlev için birim testler oluşturuyorsunuz. Her çağrı 1.500 girdi tokenı gönderir ve 700 token döndürür. Girdi: 200 x 1.500 = 300.000 token veya $0,045. Çıktı: 200 x 700 = 140.000 token veya $0,07. Toplam: $0,115.

Büyük bir dosyanın refaktörlemesi 30.000 token girdisi ve 8.000 token çıktısı gönderir: çalış başına $0,0045 + $0,004 = $0,0085. Başarısız veya reddedilen istekler için ücret alınmaz ve kredi hiç sona ermez. Bakiye yükleme işlemleri $20'den başlar ve kart veya kripto ile yapılabilir; $50'den itibaren %5, $100'den itibaren %10 ve $200'den itibaren %15 bonus sağlanır. fiyatlandırma sayfasına bakın ve tam parametre listesi için dokümantasyon sayfasını okuyun.

Sorular ve cevaplar

Standart openai Python paketini kullanabilir miyim?

Evet. base_url'yi https://api.getcodexapi.com/v1 olarak ayarlayın, anahtarınızı girin ve uncensored model kimliğini kullanın.

Python ile fonksiyon çağırma destekleniyor mu?

Evet. tools ve tool_choice parametrelerini iletin, ardından tool rolü ile sonuçları döndürün. Akışlı tool_calls da çalışır.

Yapılandırılmış çıktı nasıl alırım?

response_format parametresini type json_object olarak kullanın, isteminizdeki anahtarları adlandırın ve sonucu kodda doğrulayın.

Asenkron bir istemci var mı?

openai paketi, bu uç nokta URL'si ile aynı şekilde çalışan AsyncOpenAI sağlar. Tam anahtarınızda eşzamanlılığı 8 veya altında tutun.

Anahtarınız tek bir formun uzağında

Bir hesap oluşturun, anahtarı kopyalayın ve uç nokta URL'sini değiştirin. Kurulum bu kadar basit.

API anahtarı al