fix: vision model hanya deskripsi, tidak memutuskan moderasi

Root cause: vision model diminta untuk 'flag' dan 'menilai' gambar,
sehingga screenshot terminal/chat biasa diklaim sebagai 'situs perjudian'.

Fix:
- vision prompt: HANYA deskripsi objektif (objek, teks, layout, jenis gambar)
- larang tegas kata 'gambling', 'judi', 'pelanggaran', 'harus dihapus'
- tambah buildGeneralImageVisionPrompt di discord-gateway stickerPrompt
- MEDIA_INSTRUCTIONS: tegaskan batch LLM adalah hakim, vision hanya saksi mata
- deskripsi netral (terminal, chat, editor kode) tidak boleh jadi dasar flag

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
MythEclipse
2026-06-02 11:08:41 +07:00
co-authored by Claude Opus 4.8
parent 5f419a6f0f
commit 55ee8ade16
5 changed files with 88 additions and 82 deletions
@@ -22,6 +22,7 @@ import {
} from "./stickerCache.js";
import {
buildCustomEmojiVisionPrompt,
buildGeneralImageVisionPrompt,
buildStickerTextOnlyWarning,
buildStickerVisionPrompt,
} from "./stickerPrompt.js";
@@ -587,34 +588,7 @@ const analyzeSingleMediaImage = async (
? buildStickerVisionPrompt(image.stickerName, messageId)
: image.customEmojiName
? buildCustomEmojiVisionPrompt(image.customEmojiName, messageId)
: [
`Analisis media Discord berikut sebagai evidence moderasi. ${image.sourceLabel}`,
``,
`Jelaskan SECARA SPESIFIK apa yang TERLIHAT di gambar (objek, teks, warna dominan, layout).`,
`Jangan menebak-nebak atau mengasumsikan konten yang tidak terlihat langsung.`,
``,
`HANYA flag jika gambar secara JELAS dan TIDAK AMBIGU menampilkan:`,
`- Antarmuka situs judi yang JELAS TERLIHAT (ada chip, kartu, meja taruhan, odds, deposit/withdraw)`,
`- Konten seksual eksplisit/NSFW/pornografi`,
`- Darah/luka/gore nyata (BUKAN kartun/meme/animasi)`,
`- Narkoba atau obat terlarang yang bisa diidentifikasi spesifik`,
`- Simbol kebencian (swastika, simbol teroris) yang JELAS`,
`- Ajakan bunuh diri atau self-harm eksplisit`,
`- Informasi pribadi (alamat, nomor telepon, KTP) yang bocor`,
``,
`Jika gambar HANYA berisi: chat biasa, meme lucu, foto makanan, selfie,`,
`screenshot discord/wa/media sosial biasa, landscape, hewan, screenshot game,`,
`atau konten sehari-hari lainnya → JELASKAN ISI YANG TERLIHAT dan KONFIRMASI AMAN.`,
``,
`JANGAN PERNAH mengklaim gambar adalah "antarmuka judi" atau "situs perjudian"`,
`KECUALI ada BUKTI VISUAL SPESIFIK seperti chip, kartu remi, meja taruhan,`,
`odds, deposit/withdraw, atau logo situs judi yang DIKENALI.`,
`Screenshot aplikasi chat atau media sosial BUKAN situs judi.`,
``,
`Jawab Bahasa Indonesia, maksimal 3 kalimat. Berikan deskripsi objektif,`,
`bukan asumsi. Jika aman, katakan "aman" dengan jelas.`,
].join("\n");
: buildGeneralImageVisionPrompt(image.sourceLabel, messageId);
try {
const completion = await withLlmConcurrency(async () =>