← Semua artikel

API LLM Tanpa Penapisan untuk Red-Teaming dan Penyelidikan Keselamatan

20 Ogos 2026 · 6 min bacaan · red-teaming, security

Jika anda pernah membina harness red-teaming automatik, anda sudah tahu mod kegagalannya: model penyerang anda enggan menjana serangan, model hakim anda enggan membaca output yang sepatutnya diskornya, dan kadar kejayaan serangan anda merosot secara senyap. Tiada apa-apa yang mengembalikan ralat. Anda bukan mengukur sasaran anda menjadi lebih selamat — anda mengukur alatan anda menjadi lebih berhati-hati. API LLM tanpa penapisan wujud untuk membuang pemboleh ubah itu daripada pengukuran.

Ini bukan hujah bahawa pagar keselamatan (guardrail) itu buruk. Ini hujah tentang di mana ia sepatutnya berada. Pagar keselamatan pada produk sembang pengguna sedang melakukan tugasnya. Pagar keselamatan yang sama di dalam gelung penilaian ialah pembaur tidak terkawal yang duduk di antara anda dan nombor yang cuba anda kira.

Penolakan ialah negatif palsu, dan ia kelihatan seperti kejayaan

Sebab perkara ini begitu menyakitkan ialah penolakan bukan ralat. Anda mendapat HTTP 200. Anda mendapat finish_reason: "stop". Anda mendapat JSON yang terbentuk rapi dan dihurai dengan bersih. Rentetan di dalamnya ialah "Saya tidak dapat membantu dengan itu," dan pipeline anda menulisnya ke dalam lajur set data, medan label, atau bahagian laporan, lalu meneruskan kerja.

Secara konkrit, di tiga tempat yang paling terasa:

Model penyerang. Dalam carian jailbreak berlelaran — PAIR, TAP, penghalusan gaya GCG, apa-apa sahaja yang ada penyerang dalam gelung — penolakan menamatkan cabang carian itu. Kadar kejayaan serangan yang anda laporkan menjadi fungsi kesudian penyerang anda, bukan keteguhan sasaran anda. Tukar penyerang kepada yang kurang berhati-hati dan "penambahbaikan" yang anda hantar ke model sasaran anda lenyap begitu sahaja.

Model hakim dan penggred. Penskoran LLM-sebagai-hakim terhadap output berbahaya memerlukan hakim itu benar-benar membaca output berbahaya. Apabila ia menolak, anda mendapat skor yang tidak boleh dihurai. Kebanyakan harness menggugurkan baris itu. Baris yang digugurkan tidak hilang secara rawak — ia tertumpu tepat pada output paling teruk yang paling anda perlukan skornya, jadi agregat anda condong ke arah selamat.

Kerja analisis. Tanya model arus perdana apa yang dilakukan oleh rutin yang dinyahkompil, dan ia sering menolak berdasarkan kehadiran token berbentuk malware, bukan berdasarkan permintaan sebenar anda. Tugasnya defensif; pengelas tercetus oleh kosa kata. Cerita yang sama untuk mentriaj trafik eksploit dalam log, melabel korpus phishing untuk melatih pengesan, atau menulis penemuan CTF.

Oleh sebab penolakan berlaku secara senyap, pasukan akhirnya menulis pengesan penolakan — yang merupakan masalah tersendiri yang belum selesai:

python
REFUSAL_MARKERS = ("i can't", "i cannot", "i'm unable", "i won't", "as an ai")

def looks_like_refusal(text: str) -> bool:
    """Substring heuristic. Good enough to alarm on, not good enough to trust:
    it misses polite deflections that never use the phrase, and it fires on any
    completion that quotes a refusal. Both error directions corrupt a dataset."""
    return any(m in text[:200].lower() for m in REFUSAL_MARKERS)

Membina pengesan yang tidak boleh dipercayai untuk masalah yang boleh anda hapuskan dari punca adalah pertukaran yang salah.

Memanggil API

unbleep menggunakan skema OpenAI Chat Completions, jadi mana-mana klien yang sudah anda ada akan berfungsi. Tukar base URL, tukar kunci, kekalkan SDK.

python
import json
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://unbleep.ai/v1",
    api_key=os.environ["UNBLEEP_API_KEY"],
)

TRIAGE = """You are a malware analyst writing notes for a detection engineer.
Given a decompiled routine, describe what it does, the observable artefacts it
would leave on a host, and where a defender could detect it. Reply as JSON with
keys: behaviour, artefacts, detection_surface, confidence."""


def triage(decompiled: str) -> dict:
    """One sample in, one structured verdict out — no refusal branch to handle."""
    resp = client.chat.completions.create(
        model="unbleep",
        messages=[
            {"role": "system", "content": TRIAGE},
            {"role": "user", "content": decompiled},
        ],
        response_format={"type": "json_object"},
        temperature=0.2,
    )
    return json.loads(resp.choices[0].message.content)

Yang setara melalui curl, di sini melabel korpus phishing untuk membina data latihan bagi pengesan:

bash
curl https://unbleep.ai/v1/chat/completions \
  -H "Authorization: Bearer $UNBLEEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "unbleep",
    "messages": [
      {"role": "system", "content": "Label each email for a phishing detector. Answer with one word: phishing or benign."},
      {"role": "user", "content": "Subject: Payroll update required\n\nYour direct deposit is on hold. Confirm at hxxp://payroll-verify.example.com"}
    ],
    "temperature": 0,
    "max_tokens": 4
  }'

temperature: 0 dan max_tokens yang ketat lebih penting daripada biasa dalam gelung pelabelan — anda mahukan labelnya, bukan satu perenggan yang menerangkan label itu.

Memilih peringkat

Tiga model, semuanya tanpa penapisan, berbeza dari segi konteks dan harga:

unbleep dan unbleep-high ialah peringkat penaakulan: ia berfikir sebelum menjawab dan mengembalikan jejaknya dalam medan reasoning_content di samping content. Bagi model hakim, jejak itu benar-benar berguna — ia memberitahu anda mengapa sesuatu baris mendapat skor tersebut, iaitu apa yang anda perlukan apabila mengaudit percanggahan skor. Ia juga dicaj sebagai output, jadi hantar "thinking": false pada kerja yang tidak memerlukannya. unbleep-mini menjawab terus dan tidak mengembalikan jejak.

Tadbir urus yang anda kawal

Membuang penolakan daripada model tidak bermaksud membuang pengawasan daripada pipeline anda. Parameter policy yang bersifat pilihan menjalankan tadbir urus di pihak kami, bagi setiap permintaan:

python
resp = client.chat.completions.create(
    model="unbleep",
    messages=[...],
    extra_body={"policy": "research"},  # recorded on the usage row; answers exactly like off
)

off ialah garis asas tanpa tapisan yang lalai. research menjawab sama seperti off — tahapnya direkodkan pada baris penggunaan, jadi anda boleh mengasingkan trafik penilaian daripada trafik garis asas dalam pelaporan anda sendiri. Ia tidak mengenakan sebarang saringan tambahan. strict mengimbas teks mesej terhadap senarai sekat perkhidmatan yang diselenggara oleh pengendali kami dan mengembalikan 422 apabila ada padanan. Senarai itu sama untuk semua orang yang memilihnya — tiada senarai sekat per akaun untuk dikonfigurasi — jadi anggap ia sebagai pengadang terakhir, bukan sebagai dasar kandungan produksi anda.

Satu perkara yang perlu diselesaikan sebelum anda menghalakan pipeline ke sini: kami menyimpan apa yang anda hantar dan apa yang dikembalikan. Badan permintaan, kandungan respons dan IP sumber bagi setiap panggilan yang kami terima dan majukan ke model ditulis ke dalam pangkalan data kami dan disimpan selama 30 hari, untuk siasatan penyalahgunaan, sokongan dan pertikaian bil. Badan dipotong pada 64 KB. IP sumber kekal lebih lama daripada 30 hari itu — ia turut ditulis pada baris penggunaan yang mengecaj panggilan tersebut, dan baris itu ialah rekod kewangan yang kami simpan lebih lama. Satu-satunya perkara yang tidak disimpan ialah permintaan yang ditolak oleh strict sebelum sampai ke model: ia muncul dalam sejarah penggunaan anda tanpa kandungannya. Tiada yang lain dikecualikan, dan tiada tetapan untuk mematikannya. Jika korpus anda cukup sensitif sehingga salinan 30 hari di luar perimeter anda menjadi masalah — malware hidup, data pelanggan, tugasan di bawah NDA — itu kekangan yang nyata, dan dasar privasi ialah halaman yang perlu dibaca sebelum anda bermula, bukan selepasnya.

Ralat mengikut sampul OpenAI, jadi pengendali sedia ada berfungsi: 401 kunci tidak sah, 402 kredit habis, 422 disekat oleh dasar, 429 had kadar, 5xx boleh dicuba semula. Setiap respons membawa pengepala x-ratelimit-* supaya kerja kelompok boleh mengatur kadarnya sendiri tanpa perlu meneka.

Apa yang API LLM tanpa penapisan tidak berikan kepada anda

Model tanpa penapisan ialah alat yang lebih tajam, bukan alat yang serba membenarkan. Ia akan menjawab soalan yang model asasnya ditala untuk menolak, termasuk soalan yang tidak sepatutnya anda tanya, dan ia akan berbuat demikian dengan keyakinan yang sama seperti terhadap semua perkara lain — yang juga bermaksud di mana model berpagar akan menolak kerana kejahilan, model ini mungkin sekadar mereka-reka jawapan. Pastikan ada manusia yang bertanggungjawab terhadap apa yang keluar. Dasar penggunaan boleh terima menyatakan dengan jelas untuk apa API ini dibuat dan sekumpulan kecil perkara yang ia tidak sekali-kali dibenarkan; kebenaran dan niat yang menjadi ujian, bukan kosa kata. Penggunaan yang sah adalah tanggungjawab anda.

Dapatkan kunci API dan berhenti mengukur sikap berhati-hati alatan anda.