Codex bağlam sıkıştırmasının nasıl çalıştığını incelemek

@Kangwook_Lee
İNGILIZCE4 ay önce · 03 Mar 2026
1.0M
2.6K
303
39
5.5K

TL;DR

Kangwook Lee, şifreli veri blokları kullanmasına rağmen, OpenAI'ın Codex bağlam sıkıştırma API'sinde kullanılan gizli sistem ve aktarım istemlerini ortaya çıkarmak için istem enjeksiyonunun nasıl kullanılacağını gösteriyor.

Codex olmayan modeller için açık kaynaklı Codex CLI, bağlamı yerel olarak sıkıştırır: bir LLM, bir sıkıştırma istemi kullanarak konuşmayı özetler. Sıkıştırılmış bağlam daha sonra kullanıldığında, responses.create() onu, özeti çerçeveleyen bir devir teslim istemi ile alır. Her iki istem de kaynak kodda görülebilir.

Codex modelleri için CLI bunun yerine compact() API'sini çağırır ve bu da şifrelenmiş bir blob döndürür. Dahili olarak bir LLM kullanıp kullanmadığını, hangi istemleri kullandığını veya herhangi bir devir teslim istemi olup olmadığını bilmiyoruz.

Aşağıda, basit bir istem enjeksiyonunun (2 API çağrısı, 35 satır Python) API sıkıştırma yolunun, bağlamı özetlemek için kendi sıkıştırma istemi ve özete eklenmiş bir devir teslim istemi ile bir LLM kullandığını nasıl ortaya çıkardığını gösteriyorum. İstemler, açık kaynaklı sürümlerle neredeyse aynıdır.

Adım 1 — compact()

Hazırlanmış bir kullanıcı mesajıyla compact()'ı çağırıyorum. Sunucu tarafında, bir sıkıştırıcı LLM, kendi gizli sistem istemini kullanarak girdimizi işler (daha önce hiç görmediğim ve bulmak istediğim).

Sunucu, sıkıştırıcının bağlamını şu şekilde birleştiriyor gibi görünüyor:

Kangwook Lee - inline image

Sıkıştırıcı LLM, sistem istemini + girdimizi birlikte okur. Girdimiz bir enjeksiyon yükü (yukarıdaki kırmızı metin) içerdiğinden, sıkıştırıcı, kendi sistem istemini çıktısına dahil etmesi için kandırılır. Bu düz metin özeti yalnızca OpenAI'in sunucusunda bulunur. Biz yalnızca şifrelenmiş blob'u görürüz:

Kangwook Lee - inline image

Bu noktada blob'un içinde ne olduğunu okumamızın hiçbir yolu yoktur. AES ile şifrelenmiştir ve anahtar OpenAI'in sunucularında bulunur. Sadece sıkıştırıcının enjeksiyona uyduğunu ve istemini özete yazdığını umarız. Bunu öğrenmenin tek yolu Adım 2'dir.

Adım 2 — create()

Şifrelenmiş blob'u + ikinci bir kullanıcı mesajını responses.create()'a iletiyorum. Sunucu blob'un şifresini çözer ve modelin bağlamını birleştirir.

Gönderiyorum:

Kangwook Lee - inline image

Model şöyle bir şey görüyor gibi görünüyor:

Kangwook Lee - inline image

Adım 1 işe yaradıysa, şifresi çözülmüş blob, sıkıştırma istemini (enjeksiyonumuzla sızdırılan) içermelidir. Sunucu ayrıca blob'a bir devir teslim istemi ekler. Dolayısıyla, probumuz modelin gördüklerini tekrarlamasını başarıyla sağlarsa, çıktı her üçünü de ortaya çıkarmalıdır: sistem istemi, devir teslim istemi ve sıkıştırma istemi.

Çıktı

Aşağıda, extract_prompts.py'nin bir çalıştırmasından alınan eksiksiz, düzenlenmemiş çıktı bulunmaktadır. Sarı = sistem istemi, yeşil = devir teslim istemi, pembe = sıkıştırma istemi.

Kangwook Lee - inline image

Bunların gerçek istemler olduğunu ve sadece halüsinasyon görülen metinler olmadığını nasıl bilebiliriz? Çıkarılan sıkıştırma istemi ve devir teslim istemi, açık kaynaklı Codex CLI'deki (prompt.md, summary_prefix.md) codex olmayan modeller için kullanılan bilinen istemlerle yakından eşleşir; bu da modelin bunları sıfırdan icat etmesini olası kılmaz. Sonuçlar çalıştırmalar arasında farklılık gösterir.

Tahmini İşlem Hattı

Hepsini bir araya getirdiğimizde, çıkarma işleminin ortaya çıkardıklarına dayanarak compact()'ın sunucu tarafında ne yaptığına dair en iyi tahminimiz aşağıdadır.

Kangwook Lee - inline image

Komut Dosyası

Kangwook Lee - inline image

Açık Soru

Altta yatan istemler neredeyse aynıyken, Codex CLI neden iki tamamen farklı sıkıştırma yolu (codex olmayan modeller için yerel LLM, codex modelleri için şifrelenmiş API) kullanıyor? Peki özeti neden şifreleyelim ki?

Söylemesi zor. Belki de şifrelenmiş blob, bu basit deneyin ortaya çıkarabileceğinden daha fazlasını taşıyordur, örn. araç sonuçlarının nasıl sıkıştırılıp geri yüklendiğine dair belirli bir şey. Ama daha fazla test etmeye zahmet etmedim.

Tek tıkla kaydet

YouMind ile viral makaleleri AI derin okumayla incele

Kaynağı kaydedin, odaklı sorular sorun, argümanı özetleyin ve viral bir makaleyi tek bir AI çalışma alanında yeniden kullanılabilir notlara dönüştürün.

YouMind'ı keşfet
Üreticiler için

Markdown'ınızı temiz bir 𝕏 makalesine dönüştürün

Kendi uzun yazılarınızı yayımlarken görselleri, tabloları ve kod bloklarını 𝕏 için biçimlendirmek zahmetlidir. YouMind, eksiksiz bir Markdown taslağını temiz ve hemen paylaşılabilir bir 𝕏 makalesine dönüştürür.

Markdown'dan 𝕏'e deneyin

Çözülecek daha fazla kalıp

Son viral makaleler

Daha fazla viral makale keşfet