Kanonik bencode çıktısı
Baytları, sınırlı tamsayıları, listeleri ve bayt anahtarlı sözlükleri sıralı kanonik bencode olarak en fazla 65536 çıktı baytına kodlayın.
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
- Proje
- Boş kapsayıcıları ve iç içeliği test edip döngüleri, Boolean değerleri, ±10^18 dışını, kapsayıcı başına 64 üzeri girdiyi, 16 üzeri derinliği veya 2048 üzeri ziyaret edilen değeri reddedin.
- Uygulamadan önce inceleyin
- Gerçek davranışı beklenen sonuçla karşılaştırın. Bir kontrol başarısız olursa yeni değişikliklerden önce nedenini araştırın.
- Modeller
- Temel URL ve gerekiyorsa API anahtarıyla OpenAI uyumlu veya Anthropic endpoint yapılandırın. Bağlantıyı test edin. Yerel model sunucusu çalışıyor olmalıdır; uzak araçlar ayrıca veri aktarabilir.
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
Serileştirme değişikliklerini uyumlu ve sınırlı tutun
İkili çıktı, sıradan bir metin farkında farklı görünmeden anlam değiştirebilir. Bencora, bu riski dikkate alarak serileştirme kodunu incelemek için bir Windows yapay zeka kodlama çalışma alanıdır. Projenizi açın ve bağlı modelden yama önermeden önce kabul edilen değerleri, çıktı sözleşmesini ve çıktıyı kullanan kodu incelemesini isteyin.
Somut bir görev, meta veri yazıcısı için kanonik bencode çıktısını incelemek olabilir. Asistandan bayt anahtarlarının sıralamasını, iç içe kapsayıcıları ve desteklenmeyen türlerin reddedilmesini incelemesini isteyin. Bilinen çıktı test verileri sağlayın ve uygulamanızın ihtiyaç duyduğu sınırları açıklayın. Bir serileştirici değişikliğinin geçerli görünen baytlar ürettiği için zararsız olduğunu varsaymak yerine öneriyi o yazıcıya ve çağıran kodlarına odaklayın.
Olağan gidiş-dönüş dönüşümlerinin yanında kaynak sınırlarını denetleyin. En yüksek derinlik, aşırı büyük çıktı ve döngüsel kapsayıcılar için kendi testlerinizi çalıştırın; temsili sözlüklerin kesin baytlarını karşılaştırın. Başarısız bir denemenin sonraki çalışmayı bozmaması için reddetme sonrası temizleme yollarını inceleyin. Uyumluluk, başarıyla kodlanan örneklerin yanı sıra projenin tüketicilerinden de kanıt gerektirir.
Bencora, OpenAI uyumlu veya Anthropic uç noktalarına bağlantıları destekler. Yapılandırılmış hizmetiniz sunuyorsa sansürsüz bir yapay zeka modeli seçilebilir; araçları, kısıtlamaları ve bağlamı bu kurulum belirler. Değişikliği açıklamak için görüşmeyi kullanın; çıktı sözleşmesinin korunup korunmadığını test verileriniz belirlesin.
İkili yazıcıyı güvenli biçimde inceleme
Neden yalnızca çözümlenmiş değerler yerine kesin baytları karşılaştırmalıyım?
Eşdeğer çözümlenmiş değerler, kanonik biçim için önemli olan sıralama veya gösterim farklarını gizleyebilir. Bu gereksinimler için bilinen bayt test verilerini tutun ve projenizin zaten kullandığı gidiş-dönüş denetimleriyle birlikte inceleyin.
Sözlük sıralaması için hangi bağlam önemlidir?
Gerçek anahtar türlerini ve kodlanmış çıktıya bağımlı tüketicileri gösterin. Asistandan bayt sırasını dile özgü metin sırasından ayırmasını isteyin. Kolaylık sağlayan bir metne dönüştürme işlemi, ham baytlar üzerinde tanımlanmış bir sözleşmeyi değiştirebilir.
Çıktı boyutu sınırları yalnızca kodlamadan sonra mı denetlenmeli?
Uygulamanızın ihtiyaç duyduğu kaynak ilkesini inceleyin. Son boyut denetimi, önemli miktarda iş veya bellek ayırmadan sonra yapılabilir. Önerinin sınırları nerede uyguladığını sorun ve izin verilen çıktıyı aşan iç içe değerler dahil reddetme yollarını test edin.
Neden döngüsel kapsayıcı durumu eklemeliyim?
Yazıcının sıradan sonlu bir ağaç gibi açımlanamayan girdiyi nasıl ele aldığını denetler. Açık reddetmeyi ve temizlemeyi doğrulayın. Modelin başarılı kodlama örnekleri, bozuk kapsayıcı yapılarının doğru biçimde sonlandığını kanıtlamaz.
Bencora · Güncellendi 2026-10-25