Seorang pembantu pengekodan dipacu AI pada barisan pelayan tier percuma telah menulis fail migrasi skema selepas peraturan "bekukan migrasi" sistem hilang semasa pemampatan konteks automatik. Insiden ini menunjukkan bahawa bergantung kepada arahan berasaskan prompt untuk menguatkuasakan keselamatan boleh memakan diri apabila sesi sembang yang panjang diringkaskan.
Apa yang berlaku
Seorang ejen pengekodan kongsi dijalankan dengan prompt sistem yang mengandungi satu peraturan tunggal: jangan cipta atau ubah suai fail migrasi. Peraturan tersebut memastikan migrasi skema kekal dibekukan pada cawangan (branch) pelepasan sementara pembangun menggunakan ejen tersebut untuk suntingan rutin.
Semasa sesi yang berlarutan, perbualan tersebut telah melebihi had token model. Pelayan telah memanggil pemampatan konteks (context compaction), menggantikan sejarah sembang penuh dengan ringkasan pendek untuk kekal dalam bajet token. Ringkasan tersebut mengekalkan sebutan laluan fail tetapi membuang kekangan negatif (“jangan tulis ke migrations/**”). Apabila model menjana respons seterusnya, peraturan pembekuan tersebut tidak lagi berada dalam memori kerjanya.
Ejen tersebut kemudian mencadangkan pengubahsuaian SQL untuk meningkatkan kelajuan pertanyaan (query). Alat yang menyertainya menyimpan perubahan tersebut sebagai fail migrasi pada cakera. Ujian unit (unit tests) lulus kerana ia tidak pernah melaksanakan migrasi SQL mentah, dan pengubahan itu hanya dikesan kemudian dalam perbezaan (diff) semakan kod.
Mengapa ia penting
- Pagar keselamatan (guardrails) hilang: Polisi pada tahap prompt adalah tidak stabil. Apabila konteks model dimampatkan, sebarang klausa “jangan” boleh hilang, menyebabkan sistem bebas untuk melakukan tindakan yang dilarang.
- Ujian unit tidak mencukupi: Ujian yang tidak menjalankan skrip migrasi boleh memberikan rasa selamat yang palsu. Perubahan tersebut terlepas kerana set ujian tidak pernah menguji SQL baharu tersebut.
- Semakan manusia lewat: Menjelang masa penyemak melihat diff tersebut, fail migrasi telah pun dikomitkan, memerlukan proses rollback atau pembersihan tambahan.
Ralat tersebut tidak menyebabkan gangguan perkhidmatan (outage), tetapi ia memaksa kerja tambahan untuk membatalkan migrasi yang tidak perlu dan meningkatkan risiko kesilapan serupa menjejaskan pangkalan data langsung.
Bagaimana pagar keselamatan gagal
- Peraturan berasaskan prompt sahaja – Pembekuan tersebut wujud sebagai teks biasa dalam prompt sistem.
- Sesi panjang – Sembang berkembang melampaui tetingkap konteks model.
- Pemampatan – Pelayan menukar transkrip penuh dengan ringkasan yang padat dengan kata nama.
- Kehilangan kekangan negatif – Ringkasan tersebut menggugurkan arahan “jangan”, sekali gus memadamkan peraturan tersebut.
- Output model – Tanpa peraturan tersebut, model menjana respons yang mencipta migrasi.
Alat peringkas cenderung mengekalkan kata nama (laluan fail, nama fungsi) dan menggugurkan penafian (negations), itulah sebabnya peraturan tersebut hilang secara senyap.
Penyelesaian: pindahkan pagar keselamatan ke laluan penulisan (write path)
Daripada menyematkan larangan dalam prompt, kuatkuasakan ia di tempat kod menyentuh cakera.
- Cipta fail polisi (cth.,
agent_policy.txt) yang menyenaraikan laluan yang disenaraihitamkan sepertischema/**ataumigrations/**. - Tambah skrip pra-aplikasi yang membaca fail polisi dan mengimbas setiap diff sebelum alat aplikasi dijalankan.
- Gagal secara tertutup (fail closed) jika fail polisi hilang, kosong, atau jika diff menyentuh laluan yang dilarang.
- Jangan minta model untuk mengesahkan senarai larangan; pengesahan hanyalah isyarat, bukan penguatkuasaan.
Pagar keselamatan berasaskan prompt sahaja vs. berasaskan cakera
| Aspek | Pembekuan berasaskan prompt sahaja | Pintu gerbang berasaskan cakera |
|---|---|---|
| Risiko pemampatan | Peraturan boleh hilang | Fail polisi kekal utuh |
| Liputan ujian unit | Mungkin terlepas penulisan yang dilarang | Semakan laluan menyekat penulisan tanpa mengira ujian |
| Masa semakan manusia | Kerosakan mungkin telah dikomitkan | Penulisan tidak pernah bermula, penyemak tidak melihat sebarang perubahan |
| Usaha pelaksanaan | Minimum (hanya satu baris dalam prompt) | Skrip kecil + fail polisi |
Pandangan balas
Apa yang perlu diperhatikan seterusnya
Kesimpulan
Jika anda memerlukan peraturan yang tidak boleh diabaikan—seperti “tiada migrasi semasa pembekuan”—simpan ia pada cakera dan kuatkuasakannya pada titik penulisan. Teks prompt sahaja tidak dapat menjamin ketahanan sebaik sahaja konteks model dimampatkan.
