diff --git a/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts b/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts index f8973f7..3141656 100644 --- a/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts +++ b/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts @@ -14,10 +14,7 @@ import type { import { llmChat, llmVision } from "./llmClient.js"; import { buildSystemPrompt as buildSystemPromptModular } from "./moderationPrompt.js"; -import { - initializeUserReputation, - getUserRecentInfractions, -} from "./userReputationStore.js"; +import { initializeUserReputation } from "./userReputationStore.js"; import { getChannelCulture } from "./channelCultureStore.js"; import { logModerationAnalysis, logModerationError } from "./responseLogger.js"; import { @@ -1108,19 +1105,12 @@ async function runTextOnlyBatch( const batch = subBatches[i]; const targetIds = batch.map((t) => t.id); - // Fetch user context for this batch + // Abstract user reputation (no history — prevents confirmation bias) const userContexts = new Map(); for (const msg of batch) { if (!userContexts.has(msg.user_id)) { const rep = await initializeUserReputation(msg.user_id, msg.guild_id); - const history = await getUserRecentInfractions(msg.user_id); - - let historyStr = ""; - if (history.length > 0) { - historyStr = `\n \n${history.map(h => ` - Flagged for ${h.flags} (Severity: ${h.severity}) pada pesan: "${h.content}"`).join("\n")}\n `; - } - - const contextStr = `${historyStr}`; + const contextStr = ``; userContexts.set(msg.user_id, contextStr); } } @@ -1670,12 +1660,7 @@ async function _runSingleMediaAnalysis( const channelCulture = channelCultureObj ? channelCultureObj.culture_summary : undefined; const rep = await initializeUserReputation(target.user_id, target.guild_id); - const history = await getUserRecentInfractions(target.user_id); - let historyStr = ""; - if (history.length > 0) { - historyStr = `\n \n${history.map(h => ` - Flagged for ${h.flags} (Severity: ${h.severity}) pada pesan: "${h.content}"`).join("\n")}\n `; - } - const userCtx = `${historyStr}`; + const userCtx = ``; // XML delimiters wrap the message content (R1) const messageBlock = `\n ${userCtx}\n ${content}${mediaContext ? ` ${mediaContext}` : ""}${webContext}${mediaAnalysisContext}\n`; diff --git a/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts b/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts index bf6eb5e..f0953d6 100644 --- a/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts +++ b/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts @@ -455,7 +455,7 @@ export function buildSystemPrompt(options: BuildSystemPromptOptions): string { parts.push(`## Kultur Channel (Pembelajaran AI)\n${channelCulture}`); } - parts.push(`## Konteks Pengguna (Ingatan & Kebijaksanaan)\nSetiap pesan mungkin memiliki tag dan . *Gunakan Kebijaksanaan: Jika trust_score tinggi, beri benefit of the doubt pada ambiguitas. Jika trust_score rendah dan memiliki riwayat pelanggaran serupa, jadilah lebih tegas.*`); + parts.push(`## Konteks Pengguna\nSetiap pesan mungkin memiliki tag . Tag ini hanya indikator **referensi**, bukan bukti pelanggaran. Nilai trust_score yang rendah bukan alasan untuk memflag pesan yang bersih. Nilai trust_score yang tinggi bukan alasan untuk mengabaikan pelanggaran nyata. **Setiap pesan harus dinilai berdasarkan isinya sendiri.**`); parts.push(OUTPUT_INSTRUCTIONS);