ID ▾
Dapatkan kunci API

API Codex dalam Python: Memanggil LLM Pemrograman

Pengaturan api codex python paling sederhana adalah paket openai resmi yang diarahkan ke base URL berbeda. Contoh di bawah mencakup generasi kode, mode JSON, pemanggilan alat, dan streaming terhadap endpoint yang kompatibel dengan OpenAI ini.

Diperbarui

Kabel bercahaya yang melilit melalui blok kode ke dalam kubus server, mengilustrasikan panggilan Python ke API LLM pemrograman
Kabel bercahaya yang menghubungkan laptop ke kubus server, mengilustrasikan mengarahkan klien ke URL dasar API

Poin utama

  • Instal paket openai, atur base_url ke https://api.getcodexapi.com/v1 dan model ke uncensored.
  • Gunakan suhu rendah (0 hingga 0,3) untuk kode dan JSON, lebih tinggi untuk brainstorming.
  • Pemanggilan alat, mode JSON, dan streaming didukung; embedding tidak didukung.
  • Batasi concurrency di angka 8 pada kunci penuh dan lakukan percobaan ulang pada respons 429 setelah jeda singkat.

Pengaturan dan panggilan pertama

Ini adalah layanan independen yang kompatibel dengan OpenAI, bukan API Codex asli dari OpenAI. Model tunggalnya adalah open-weight, hanya teks, dan menangani kode dengan cukup baik untuk tugas generasi, penjelasan, dan refaktoring yang masih harus Anda tinjau. Jika Anda ingin latar belakang terlebih dahulu, halaman tentang OpenAI Codex API menjelaskan bagaimana keduanya berkaitan.

Instal SDK dengan pip install openai, buat kunci di halaman kunci API, dan jalankan:

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

Kredit uji coba pengguna baru senilai $0,50 mencakup ribuan panggilan kecil seperti ini. Suhu 0,2 karena kode mendapat manfaat dari lebih sedikit acak. Jika Anda melihat pembatas markdown di sekitar jawaban, hapus dalam kode atau minta teks mentah dalam pesan sistem. Halaman URL dasar, URL dasar API Codex, mencantumkan alamat pastinya lagi.

Prompting untuk kode yang berjalan

Beberapa kebiasaan meningkatkan output lebih dari parameter apa pun.

  • Tentukan bahasa dan versinya. "Python 3.11, hanya pustaka standar" menghilangkan banyak tebak-tebakan.
  • Beri tanda tangan. Tempel header fungsi dan docstring, dan minta model mengisi tubuh.
  • Tampilkan satu contoh input dan output. Ini menentukan kasus tepi lebih baik daripada teks naratif.
  • Minta satu hal. Hasilkan fungsinya, lalu minta tes dalam panggilan kedua.
  • Minta diff untuk pengeditan. Penulisan ulang file penuh membakar token output, yang lebih mahal daripada input.

Jendela konteks adalah 100.000 token, dan max_tokens bersifat opsional. Untuk tugas kode, Anda dapat menempelkan beberapa modul dan masih memiliki ruang untuk balasan. Menetapkan max_tokens berguna hanya sebagai jaring pengaman terhadap output yang tidak terkendali.

Mode JSON untuk hasil terstruktur

Saat kode mengonsumsi jawaban, gunakan mode JSON. Ini membuat output JSON valid; ini tidak memaksakan skema Anda, jadi beri nama kunci dalam prompt dan periksa kunci tersebut.

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

Pasang ini dengan try/except di sekitar json.loads dan satu kali percobaan ulang yang mengirimkan kesalahan parsing kembali. Dalam praktiknya, ini menangani respons yang jarang tidak sesuai format. Gunakan suhu 0 agar hasil berulang konsisten.

Pemanggilan alat

Dengan alat, Anda mendeskripsikan fungsi dan model memutuskan kapan memanggilnya. Anda menjalankan fungsi, lalu mengirim kembali output dengan peran tool. Ini adalah dasar dari setiap agen pemrograman.

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)

Uji kode yang dihasilkan seperti kontribusi lain: jalankan, lint, dan simpan suite kecil prompt dengan output yang sudah diketahui benar agar Anda menyadari ketika perubahan prompt membuat hasil lebih buruk. Tetapkan seed dan suhu saat Anda membandingkan versi.

Catatan: pertahankan deskripsi fungsi pendek dan literal, validasi argumen sebelum menjalankan apa pun, dan jangan pernah meneruskan output model langsung ke shell. Untuk loop, ulangi panggilan selama tool_calls ada dan berhenti setelah jumlah langkah maksimum. Setiap langkah mengirim ulang riwayat, sehingga menjalankan sepuluh langkah memakan biaya sekitar sepuluh kali konteks.

Streaming dan percobaan ulang pada 429

Untuk alat interaktif, alirkan token saat tiba. Penggunaan ada di akhir streaming, yang memudahkan pencatatan biaya.

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

Batas di balik loop retry itu: kunci penuh memungkinkan 8 permintaan paralel dan 300 per menit, dan kunci uji coba 2 dan 60. Di atas batas, Anda mendapatkan HTTP 429 dengan kode rate_limited atau concurrency. Beban berlebih sementara juga memberikan 429 dengan header Retry-After: 5. Contoh mengatur max_retries=0 pada klien sehingga loop Anda sendiri mengendalikan jeda. Permintaan streaming memegang slot konkurensinya hingga streaming selesai, jadi selalu konsumsi atau tutup streaming.

Menjalankan banyak permintaan sekaligus

Pekerjaan batch seperti menghasilkan pengujian untuk seratus fungsi membutuhkan batas concurrency. Gunakan kumpulan utas dengan maksimal 8 pekerja pada kunci penuh.

Pola sederhana adalah ThreadPoolExecutor(max_workers=6) di sekitar fungsi yang memanggil ask, meninggalkan dua slot tersedia untuk pekerjaan lain. Dengan kunci uji coba gunakan 2 pekerja. Jika Anda melewati angka yang lebih besar, API akan menjawab permintaan tambahan dengan kesalahan concurrency, dan loop retry Anda akan menghabiskan waktu menunggu alih-alih bekerja. Untuk kode asinkron, gunakan AsyncOpenAI dengan asyncio.Semaphore(6) di sekitar setiap panggilan; ini memberikan batas yang sama tanpa thread. Header respons X-RateLimit-Limit-Requests dan X-RateLimit-Limit-Concurrency menunjukkan batas untuk kunci Anda.

Biaya beban kerja pemrograman

Harganya adalah $0,15 per 1M token input dan $0,50 per 1M token output. Katakan Anda menghasilkan pengujian unit untuk 200 fungsi. Setiap panggilan mengirim 1.500 token input dan mengembalikan 700 token. Input: 200 x 1.500 = 300.000 token, atau $0,045. Output: 200 x 700 = 140.000 token, atau $0,07. Total: $0,115.

Refaktor file besar mengirim 30.000 token masuk dan 8.000 keluar: $0,0045 + $0,004 = $0,0085 per eksekusi. Permintaan gagal atau ditolak tidak dibebani biaya, dan saldo prabayar tidak pernah habis. Isi saldo dimulai dari $20 dan dapat dibayar dengan kartu atau kripto, dengan bonus 5% dari $50, 10% dari $100, dan 15% dari $200. Lihat harga, dan baca dokumentasi untuk daftar parameter lengkap.

Tanya jawab

Bisakah saya menggunakan paket Python openai standar?

Ya. Atur base_url ke https://api.getcodexapi.com/v1, masukkan kunci Anda, dan gunakan ID model uncensored.

Apakah mendukung pemanggilan fungsi dari Python?

Ya. Berikan tools dan tool_choice, lalu kembalikan hasil dengan peran tool. tool_calls yang di-stream juga berfungsi.

Bagaimana saya mendapatkan output terstruktur?

Gunakan response_format dengan type json_object, beri nama kunci dalam prompt Anda, dan validasi hasilnya dalam kode.

Apakah ada klien async?

Paket openai menyediakan AsyncOpenAI, yang bekerja dengan cara yang sama dengan base URL ini. Pertahankan concurrency di bawah atau sama dengan 8 pada kunci penuh.

Kunci Anda hanya selangkah lagi dari satu formulir

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

Dapatkan kunci API