UAS
IF1402 Praktikum
Sesi 16 - UAS Praktikum
Sesi 16 dari 16

UAS Praktikum

UAS praktikum adalah tahap akhir untuk melihat apakah mahasiswa benar-benar memahami alur kerja machine learning untuk teks dan AI generatif, bukan hanya bisa mengikuti contoh. Pada tahap ini mahasiswa diharapkan mampu menunjukkan pemahaman konsep, kemampuan teknis, dan cara berpikir evaluatif sekaligus.

Perumpamaannya seperti ujian mengemudi. Selama latihan, mahasiswa sudah belajar fungsi gas, rem, kopling, setir, dan lampu sein. Pada ujian akhir, yang dinilai bukan hafalan nama komponen, tetapi apakah ia mampu mengendarai kendaraan dengan aman, terarah, dan sadar pada kondisi sekitar. UAS praktikum juga seperti itu.

Fokus: penilaian akhir Cakupan: sesi 9 sampai 15 Format: teori singkat, praktik, presentasi
Pertanyaan inti sesi ini Apa saja yang perlu dikuasai mahasiswa agar siap menghadapi UAS praktikum secara percaya diri dan terarah?
Jawaban singkatnya Mahasiswa perlu menguasai integrasi konsep, mampu menunjukkan contoh kerja sistem, menjelaskan alasan desain, dan menilai kelebihan serta keterbatasan hasil.
Hasil belajar Mahasiswa memahami format UAS, kisi-kisi, rubrik, dan contoh implementasi proyek sehingga dapat mempersiapkan diri dengan strategi yang tepat.

Tujuan UAS praktikum

UAS praktikum bertujuan menilai kemampuan mahasiswa dalam menerapkan konsep AI generatif dan NLP modern secara utuh. Yang dilihat bukan hanya apakah kode berjalan, tetapi juga apakah mahasiswa paham mengapa langkah itu dipilih, bagaimana kualitas hasil dinilai, dan apa risiko yang harus diwaspadai. Dengan kata lain, UAS menilai keterampilan membangun solusi, bukan sekadar menyalin sintaks.

Format UAS yang disarankan

20%

Teori singkat

Mahasiswa menjawab beberapa pertanyaan konseptual tentang LLM, prompt engineering, embedding, semantic search, RAG, evaluasi, dan etika.

50%

Praktik

Mahasiswa membangun atau melengkapi sistem berbasis teks, misalnya semantic search, chatbot RAG, atau rangkaian klasifikasi plus ringkasan.

30%

Presentasi

Mahasiswa menjelaskan tujuan sistem, pipeline, hasil uji, keterbatasan, dan keputusan desain yang diambil selama pengerjaan.

Kisi-kisi UAS

Kisi-kisi UAS berikut dirancang agar mahasiswa tahu apa yang perlu disiapkan. Fokus utamanya adalah materi sesi 9 sampai sesi 15.

9

Pengantar LLM dan AI generatif

Mahasiswa memahami apa itu LLM, token, context window, perbedaan model generatif dan model klasifikasi, serta use case-nya dalam tugas berbasis teks.

10

Prompt engineering

Mahasiswa mampu menyusun prompt yang jelas, memakai zero-shot, one-shot, few-shot, serta mengendalikan gaya jawaban dan batas topik.

11

Text generation, summarization, paraphrasing

Mahasiswa mampu membuat sistem ringkasan atau parafrase dan mengevaluasi apakah hasil generatifnya relevan serta mudah dipahami.

12

Sentence embedding dan semantic search

Mahasiswa mampu membuat embedding kalimat, menghitung similarity, dan mengambil dokumen yang paling mirip makna dengan query pengguna.

13

RAG dasar

Mahasiswa memahami alur chunking, embedding, retrieval, generation, serta tahu mengapa RAG membantu mengurangi hallucination.

14

Evaluasi output dan etika

Mahasiswa mampu menilai kualitas jawaban AI berdasarkan relevansi, factuality, clarity, consistency, dan ethics.

15

Mini project integratif

Mahasiswa mampu menjelaskan masalah, data, pipeline, hasil, serta keterbatasan proyek yang dibuat.

Contoh bentuk soal praktik UAS

Berikut salah satu bentuk soal yang realistis untuk UAS. Mahasiswa diminta membuat sistem tanya jawab sederhana berbasis kumpulan dokumen akademik. Sistem harus mencari dokumen relevan, menyusun jawaban, dan menjelaskan keterbatasannya.

Skenario soal:
Bangun sistem tanya jawab sederhana berbasis dokumen kampus.
Sistem harus:
1. Menerima pertanyaan pengguna
2. Mengambil dokumen yang paling relevan
3. Menyusun jawaban berbasis context
4. Menolak pertanyaan di luar tema
5. Menampilkan contoh evaluasi hasil
6. Menjelaskan keterbatasan sistem

Template starter code UAS: semantic retrieval plus jawaban LLM

Kode berikut bisa menjadi kerangka dasar UAS karena memadukan retrieval, context injection, dan generation.

from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import requests

GROQ_API_KEY = "gsk_XXXX...."
GROQ_MODEL = "llama-3.1-8b-instant"
GROQ_URL = "https://api.groq.com/openai/v1/chat/completions"

model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")

documents = [
    "Mahasiswa wajib melakukan registrasi ulang pada awal semester sesuai jadwal akademik.",
    "Pengajuan cuti akademik dilakukan sebelum masa pengisian KRS berakhir.",
    "Praktikum yang melebihi batas ketidakhadiran dinyatakan tidak lulus.",
    "Pembayaran UKT dilakukan melalui bank mitra yang tercantum pada portal akademik.",
    "Mahasiswa dapat mengajukan surat aktif kuliah melalui sistem layanan akademik."
]

doc_embeddings = model.encode(documents)

def retrieve(query, top_k=2):
    query_embedding = model.encode([query])
    scores = cosine_similarity(query_embedding, doc_embeddings)[0]
    idxs = np.argsort(scores)[::-1][:top_k]
    return [documents[i] for i in idxs], [float(scores[i]) for i in idxs]

def answer_question(question):
    contexts, scores = retrieve(question, top_k=2)
    context_text = "\n".join(contexts)

    system_prompt = (
        "Anda adalah asisten untuk mata kuliah Pembelajaran Mesin untuk Teks dan AI Generatif. "
        "Jawab hanya jika pertanyaan masih sesuai tema NLP, machine learning teks, AI generatif, semantic search, RAG, evaluasi, atau etika. "
        "Jika di luar tema, jawab: Maaf Pembahasan diluar Tema. "
        "Jawab tanpa markdown, gunakan paragraf biasa, jelas, dan sertakan perumpamaan sederhana bila membantu."
    )

    user_prompt = (
        f"Context dokumen:\n{context_text}\n\n"
        f"Pertanyaan mahasiswa: {question}\n\n"
        "Jawab hanya berdasarkan context yang tersedia. Jika context belum cukup, katakan dengan jujur."
    )

    response = requests.post(
        GROQ_URL,
        headers={
            "Authorization": f"Bearer {GROQ_API_KEY}",
            "Content-Type": "application/json"
        },
        json={
            "model": GROQ_MODEL,
            "messages": [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": user_prompt}
            ],
            "temperature": 0.3
        },
        timeout=60
    )

    data = response.json()
    answer = data["choices"][0]["message"]["content"]
    return answer, contexts, scores

question = "Bagaimana aturan cuti akademik?"
answer, contexts, scores = answer_question(question)
print("Jawaban:", answer)
print("Context:", contexts)
print("Scores:", scores)

Contoh alternatif UAS: klasifikasi sentimen plus ringkasan otomatis

Bagi kelas yang ingin penekanan lebih kuat pada fondasi NLP klasik dan generatif, bentuk soal dapat berupa klasifikasi sentimen lalu meringkas komentar negatif yang dominan.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
import requests

# Dataset contoh
reviews = pd.DataFrame({
    "text": [
        "Aplikasi sangat membantu kegiatan belajar saya",
        "Sering keluar sendiri ketika sedang digunakan",
        "Menunya mudah dipahami dan responsif",
        "Notifikasi sering terlambat muncul",
        "Pelayanan sangat memuaskan"
    ],
    "label": ["positif", "negatif", "positif", "negatif", "positif"]
})

X_train, X_test, y_train, y_test = train_test_split(
    reviews["text"], reviews["label"], test_size=0.4, random_state=42
)

model = Pipeline([
    ("tfidf", TfidfVectorizer()),
    ("clf", MultinomialNB())
])

model.fit(X_train, y_train)
pred = model.predict(X_test)
print(classification_report(y_test, pred))

new_reviews = [
    "Aplikasi lambat saat unggah file",
    "Sangat nyaman dipakai untuk tugas kuliah",
    "Sistem sering error saat login"
]
labels = model.predict(new_reviews)
negative_reviews = [text for text, label in zip(new_reviews, labels) if label == "negatif"]

summary_prompt = (
    "Ringkas inti keluhan berikut dalam bahasa Indonesia yang mudah dipahami. "
    "Tambahkan satu saran perbaikan singkat."
)

response = requests.post(
    "https://api.groq.com/openai/v1/chat/completions",
    headers={
        "Authorization": "Bearer gsk_XXXX....",
        "Content-Type": "application/json"
    },
    json={
        "model": "llama-3.1-8b-instant",
        "messages": [
            {"role": "system", "content": "Anda membantu dosen menganalisis ulasan mahasiswa."},
            {"role": "user", "content": summary_prompt + "\n\n" + " ".join(negative_reviews)}
        ]
    }
)

print(response.json()["choices"][0]["message"]["content"])

Rubrik penilaian yang disarankan

Agar penilaian adil dan transparan, rubrik perlu dibuat jelas sejak awal. Contoh pembobotan berikut dapat dipakai pada UAS praktikum.

Rubrik UAS praktikum:
1. Ketepatan memahami masalah dan tujuan sistem = 10
2. Kualitas pipeline dan implementasi teknis = 25
3. Kualitas hasil atau jawaban sistem = 20
4. Evaluasi, analisis kesalahan, dan kesadaran etika = 15
5. Kerapian kode dan dokumentasi = 10
6. Kualitas presentasi dan kemampuan menjawab pertanyaan = 20

Contoh evaluasi sederhana hasil UAS

Mahasiswa tidak cukup menunjukkan bahwa sistem berhasil memberi jawaban. Mereka juga perlu menunjukkan apakah jawaban itu masuk akal. Contoh tabel penilaian manual berikut bisa dipakai.

import pandas as pd

hasil = pd.DataFrame([
    {
        "pertanyaan": "Bagaimana aturan cuti akademik?",
        "relevansi": 5,
        "factuality": 4,
        "clarity": 5,
        "consistency": 5,
        "ethics": 5
    },
    {
        "pertanyaan": "Siapa juara liga tadi malam?",
        "relevansi": 1,
        "factuality": 1,
        "clarity": 4,
        "consistency": 4,
        "ethics": 5
    }
])

hasil["rata_rata"] = hasil[["relevansi", "factuality", "clarity", "consistency", "ethics"]].mean(axis=1)
print(hasil)

Pada contoh di atas, pertanyaan kedua seharusnya ditolak karena di luar tema. Dengan demikian mahasiswa menunjukkan bahwa sistem tidak hanya bisa menjawab, tetapi juga tahu kapan harus menolak.

Contoh implementasi ringan dalam PHP

Jika ujian akhir ingin menggunakan antarmuka web sederhana, berikut kerangka minimal untuk memanggil LLM dengan batas tema yang jelas.

<?php
function askGroq($question) {
    $apiKey = 'gsk_XXXX....';
    $model = 'llama-3.1-8b-instant';
    $url = 'https://api.groq.com/openai/v1/chat/completions';

    $payload = [
        'model' => $model,
        'messages' => [
            [
                'role' => 'system',
                'content' => 'Anda asisten mata kuliah Pembelajaran Mesin untuk Teks dan AI Generatif. Jika pertanyaan di luar topik mata kuliah, jawab: Maaf Pembahasan diluar Tema. Jawab dengan paragraf biasa, jelas, dan mudah dipahami.'
            ],
            [
                'role' => 'user',
                'content' => $question
            ]
        ],
        'temperature' => 0.4
    ];

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json'
    ]);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));

    $response = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($response, true);
    return $data['choices'][0]['message']['content'] ?? 'Jawaban tidak tersedia.';
}
?>

Saran strategi belajar menjelang UAS

Mahasiswa sebaiknya tidak mempelajari semuanya secara acak. Cara paling efektif adalah mulai dari satu proyek contoh yang utuh, lalu memahami bagian-bagiannya. Dari situ baru berlatih menjawab pertanyaan teori. Strategi ini membuat hubungan antar topik terasa lebih jelas.

Yang harus dikuasai

Memahami problem, membuat pipeline, menulis prompt yang tepat, retrieval dokumen, evaluasi, dan kemampuan menjelaskan keterbatasan sistem.

Yang sering dilupakan

Mahasiswa sering lupa menjelaskan alasan desain, misalnya mengapa memilih semantic search, mengapa temperature dibuat rendah, atau mengapa model harus menolak pertanyaan di luar tema.

UAS praktikum yang baik tidak menuntut jawaban sempurna. Yang dicari adalah proses berpikir yang rapi, sistem yang dapat diuji, dan kejujuran dalam menjelaskan kelemahan hasil.

Diskusi Mahasiswa dengan Sistem LLM

Tanyakan materi yang masih terkait Pembelajaran Mesin untuk Teks dan AI Generatif.

Siap Diskusi
Halo, saya siap membantu memahami materi praktikum, konsep, kode, studi kasus, UTS, UAS, dan mini project pada mata kuliah ini. Silakan tulis pertanyaan Anda.

Pembahasan dibatasi pada topik mata kuliah ini. Pertanyaan di luar tema akan ditolak secara otomatis.