Yapay Zeka Destekli Moderasyon (AI Moderation)
Cloudflare Workers AI (Llama 3.1 8B) ile otomatik şikayet kalkanı, şikayet analizi ve kurs kalite ön incelemesi.
Achidemy, Cloudflare Workers AI (Meta Llama 3.1 8B Instruct) kullanarak DMCA/şikayet süreçlerini ve kurs onay akışını destekleyen yapay zeka tabanlı moderasyon sistemine sahiptir. Bu sistem, yöneticilerin iş yükünü azaltır ve platformun Safe Harbor yükümlülüklerini güçlendirir.
Genel Bakış
Section titled “Genel Bakış”| Özellik | Açıklama |
|---|---|
| Model | Cloudflare Workers AI: @cf/meta/llama-3.1-8b-instruct |
| Binding | context.cloudflare.env.AI — wrangler.toml’da [ai] binding tanımlı olmalı |
| Erişim | Şikayet analizi ve kurs incelemesi sadece admin rolü |
| Otomatik kalkan | Öğrenci şikayetinde tetiklenir; eşik aşılırsa kurs otomatik yayından kaldırılır |
1. Otomatik Moderasyon Kalkanı (Auto-Takedown)
Section titled “1. Otomatik Moderasyon Kalkanı (Auto-Takedown)”Öğrenci bir kursu şikayet ettiğinde (reportCourse mutation), sistem aktif (pending) şikayet sayısını kontrol eder. Eşik değerine (varsayılan 5) ulaşıldığında kurs otomatik olarak incelemeye alınır ve pazardan kaldırılır.
Tetikleyici
Section titled “Tetikleyici”- Mutation:
reportCourse(input: ReportCourseInput!): Boolean - Dosya:
app/graphql/schema.ts—Mutation.reportCourseresolver
- Şikayet
course_reportstablosuna insert edilir. - Aynı kurs için
status = "pending"olan şikayet sayısı hesaplanır. - Sayı ≥ 5 ise:
- Kurs
status = "pending_review",isMarketplaceVisible = falseyapılır. - Eğitmene uyarı bildirimi gönderilir (
createNotification+runBackground). - Bildirim dili
getNotificationLangForUserile eğitmenin ülkesine göre seçilir (TR/EN). sendEmailOpt: trueile e-posta da tetiklenir.
- Kurs
Eşik Değeri
Section titled “Eşik Değeri”- Sabit: 5 (kod içinde
if (pendingCount >= 5)). - Değiştirmek için
app/graphql/schema.tsiçindekireportCourseresolver’ında eşik kontrolünü güncelleyin.
2. AI Şikayet Analizi (analyzeCourseReports)
Section titled “2. AI Şikayet Analizi (analyzeCourseReports)”Admin, bir kursa gelen tüm şikayetleri yapay zeka ile özetleyebilir. Model; ortak nedenleri, metinlerdeki linkleri, kritiklik skorunu ve eylem tavsiyesini üretir.
GraphQL Sorgusu
Section titled “GraphQL Sorgusu”query AnalyzeCourseReports($courseId: ID!) { analyzeCourseReports(courseId: $courseId) { summary commonReasons extractedLinks criticalityScore recommendation }}Dönüş Tipi — AIReportAnalysis
Section titled “Dönüş Tipi — AIReportAnalysis”| Alan | Tip | Açıklama |
|---|---|---|
summary | String! | Tüm şikayetlerin genel özeti (Türkçe) |
commonReasons | [String!]! | Tespit edilen ortak sorun etiketleri (örn. Telif, Spam) |
extractedLinks | [String!]! | Şikayet metinlerinden çıkarılan URL’ler |
criticalityScore | Int! | 1–10 arası kritiklik (10 en acil) |
recommendation | String! | Yöneticiye eylem tavsiyesi |
- Sadece
user.role === "admin"erişebilir. - Kurs için hiç şikayet yoksa
"Bu kurs için henüz şikayet bulunmuyor."hatası döner.
AI Prompt Özeti
Section titled “AI Prompt Özeti”- Sistem yönergesi: Platform güvenlik yöneticisi rolü.
- Görevler: Ortak problemleri bul, URL’leri ayıkla, kritiklik skoru ver, sadece JSON dön.
- Girdi: Her şikayet
Şikayet N - Neden: X | Açıklama: Yformatında birleştirilir.
Frontend Entegrasyonu
Section titled “Frontend Entegrasyonu”- Bileşen:
AIReportAnalyzer—app/routes/admin.reports.$courseId.tsxiçinde tanımlı (inline). - Sayfa:
/admin/reports/:courseId— Şikayet detay sayfasında “Achidemy AI Moderatör” paneli. - Buton: “Tüm Şikayetleri Analiz Et” — GraphQL query tetikler, sonuç kartlarda gösterilir.
- Görsel: Kritiklik skoruna göre renk (8+ kırmızı, 5–7 amber, <5 yeşil).
3. AI Kurs Kalite Ön İncelemesi (analyzeCourseContentForAdmin)
Section titled “3. AI Kurs Kalite Ön İncelemesi (analyzeCourseContentForAdmin)”Admin, bir kursu onaylamadan önce yapay zeka ile kalite ve uyumluluk kontrolü yapabilir. Model; başlık, açıklama, müfredat, fiyat, kapak görseli ve tanıtım videosu durumunu inceler.
GraphQL Sorgusu
Section titled “GraphQL Sorgusu”query AnalyzeCourseContentForAdmin($courseId: ID!) { analyzeCourseContentForAdmin(courseId: $courseId) { summary contentIssues missingAssets profanityDetected qualityScore recommendation }}Dönüş Tipi — AICourseAnalysis
Section titled “Dönüş Tipi — AICourseAnalysis”| Alan | Tip | Açıklama |
|---|---|---|
summary | String! | Kursun genel durumu hakkında 2 cümlelik özet |
contentIssues | [String!]! | Argo/küfür içeren başlıklar veya sorunlu metinler |
missingAssets | [String!]! | Eksik gereksinimler (kapak görseli, tanıtım videosu vb.) |
profanityDetected | Boolean! | Küfür/argo tespit edildi mi? |
qualityScore | Int! | 1–10 arası kalite skoru |
recommendation | String! | Yöneticiye eylem tavsiyesi (onaylanmaya hazır / eksikler giderilmeli) |
- Sadece
user.role === "admin"erişebilir. - Kurs bulunamazsa
"Kurs bulunamadı."hatası döner.
AI’a Verilen Girdi
Section titled “AI’a Verilen Girdi”- Kurs meta: Başlık, açıklama (HTML etiketleri temizlenmiş), fiyat, kapak görseli var mı, tanıtım videosu var mı.
- Müfredat: Bölüm başlıkları ve her dersin adı + süresi (saniye).
AI Prompt Özeti
Section titled “AI Prompt Özeti”- Sistem yönergesi: Global eğitim platformu “Kalite ve Uyumluluk Kontrol (QA)” asistanı.
- Görevler:
- Argo, küfür, nefret söylemi, spam veya anlamsız metin var mı?
- Fiyat mantıklı mı?
- Kapak görseli ve tanıtım videosu eksik mi?
- Müfredat yeterli mi? (ders yok, süre sıfır vb.)
- 1–10 arası kalite skoru ver.
- Çıktı: Sadece geçerli JSON; markdown veya normal metin yasak.
Frontend Entegrasyonu
Section titled “Frontend Entegrasyonu”- Bileşen:
AICourseReviewer—app/components/admin/AICourseReviewer.tsx - Sayfa:
/admin/course/:slug/preview— Kurs önizleme sayfasında sağ sütunda, video ve fiyat kartının arasında. - Buton: “Otomatik Tara” — GraphQL query tetikler.
- Görsel:
profanityDetected→ Kırmızı (ShieldAlert) veya yeşil (CheckCircle) kart.missingAssets→ Amber uyarı kartı.qualityScore→ 8+ yeşil, 5–7 amber, <5 kırmızı dairesel badge.
Teknik Detaylar
Section titled “Teknik Detaylar”Cloudflare AI Binding
Section titled “Cloudflare AI Binding”- wrangler.toml:
[ai]binding ileAIdeğişkeni tanımlanmalı. - Context: GraphQL resolver’larında
context.cloudflare.env.AIveya(cloudflare as any)?.env?.AIkullanılır. - Kontrol:
if (!AI?.run)→"AI servisi kapalı."hatası.
JSON Yanıt İşleme
Section titled “JSON Yanıt İşleme”Model bazen markdown kod bloğu içinde JSON döndürebilir. Tüm AI resolver’larında:
const raw = aiResponse?.response?.trim() ?? "";const cleanJsonStr = raw .replace(/```json\s*/gi, "") .replace(/```\s*/g, "") .trim();const parsed = JSON.parse(cleanJsonStr);Parse hatasında log + kullanıcıya "Yapay zeka analizi şu anda yapılamıyor." mesajı.
Hata Yönetimi
Section titled “Hata Yönetimi”- AI binding yoksa veya
AI.runbaşarısız olursa →throw new Error("Yapay zeka analizi şu anda yapılamıyor."). - Frontend’de
toast.error(...)ile kullanıcıya gösterilir.
İlgili Dosyalar
Section titled “İlgili Dosyalar”| Dosya | Açıklama |
|---|---|
app/graphql/schema.ts | reportCourse (auto-takedown), analyzeCourseReports, analyzeCourseContentForAdmin resolver’ları |
app/routes/admin.reports.$courseId.tsx | AIReportAnalyzer (şikayet analizi UI) |
app/components/admin/AICourseReviewer.tsx | Kurs kalite ön incelemesi UI |
app/routes/admin.course.$slug.preview.tsx | AICourseReviewer entegrasyonu |
İlgili Mimari
Section titled “İlgili Mimari”- İçerik Moderasyon Sistemi — Statik küfür/nefret kontrolü, DMCA şikayet akışı.
- Admin Yönetim Paneli — Şikayet listesi, kurs önizleme.
- Eğitmen Asistanı (Instructor Copilot) — Cloudflare AI kullanımı, Llama 3.1 8B.