Cara Menghentikan Mengasuh AI: Tips dan Trik

Ashley Innocent

Ashley Innocent

24 March 2026

Cara Menghentikan Mengasuh AI: Tips dan Trik

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Intisari

Anda berhenti mengawasi agen AI dengan membangun tiga hal: pagar pengaman (kendala yang mencegah kegagalan fatal), observabilitas (log dan metrik yang memberi tahu Anda apa yang terjadi), dan pos pemeriksaan (jeda otomatis di mana manusia memverifikasi keputusan). Setelah ini diatur, agen Anda dapat berjalan secara mandiri selama berjam-jam, bukan hanya beberapa menit. Alat seperti Apidog membantu dengan memungkinkan Anda menentukan kontrak API yang tidak dapat dilanggar oleh agen, mengubah lapisan API Anda menjadi jaring pengaman.

Pendahuluan

Minggu lalu saya melihat seorang pengembang menghabiskan 4 jam mengawasi agen AI yang seharusnya menghemat waktunya. Setiap beberapa menit, dia akan menginterupsi, memperbaiki kesalahan, dan memulai ulang. Pada akhirnya, dia melakukan lebih banyak pekerjaan manual daripada jika dia menulis kodenya sendiri.

Ini adalah masalah pengawasan, dan ini adalah alasan #1 mengapa agen AI gagal memenuhi janjinya. Alatnya berfungsi. Modelnya mampu. Tetapi sebagian besar tim tidak pernah melewati fase pengawasan terus-menerus.

Inilah yang terjadi: sebagian besar pengaturan agen AI memperlakukan LLM seperti pengembang junior yang membutuhkan bimbingan untuk setiap tugas. Tetapi LLM bukanlah junior. Mereka lebih seperti magang yang sangat cepat, terkadang berhalusinasi, yang akan dengan percaya diri melakukan hal yang salah jika Anda tidak menetapkan batasan.

💡
Jika Anda membangun API atau bekerja dengan agen AI yang memanggil API, Apidog membantu Anda menentukan batasan tersebut. Dengan menentukan skema permintaan/respons yang tepat, Anda membuat kontrak yang tidak dapat dilanggar secara tidak sengaja oleh agen. Ini seperti memberi agen Anda peta daripada membiarkannya berkeliaran.
button

Definisikan kontrak API yang dapat diikuti agen AI Anda

Pada akhir panduan ini, Anda akan memiliki:

Mengapa agen memerlukan pengawasan terus-menerus

Agen AI gagal dengan cara yang dapat diprediksi. Memahami mode kegagalan ini adalah langkah pertama untuk memperbaikinya.

Mode Kegagalan 1: Pelebaran ruang lingkup

Anda meminta agen untuk “menambahkan autentikasi ke titik akhir API.” Agen menambahkan autentikasi. Kemudian menambahkan pembatasan laju. Lalu refaktor skema basis data. Lalu menghapus apa yang dianggapnya sebagai file "tidak terpakai", yang ternyata penting.

Agen terus berjalan karena tidak ada yang menyuruhnya berhenti. LLM tidak memiliki pengertian "selesai" yang bawaan. Mereka akan terus melakukan perubahan sampai mereka mencapai batas token atau Anda menginterupsi mereka.

Mode Kegagalan 2: Abstraksi yang salah

Agen yang bertugas "meningkatkan penanganan kesalahan" mungkin akan menambahkan blok try-catch di mana-mana. Secara teknis benar. Secara praktis mengerikan. Kode menjadi tidak terbaca, pencatatan tidak konsisten, dan kasus kesalahan yang sebenarnya tidak ditangani.

Agen memahami permintaan secara harfiah tetapi melewatkan maksudnya. Tanpa contoh penanganan kesalahan yang baik, ia mengasumsikan interpretasi yang paling jelas (dan terburuk).

Mode Kegagalan 3: Kegagalan berjenjang

Agen membuat kesalahan kecil di langkah 1. Pada langkah 10, kesalahan itu telah menyebar melalui setiap keputusan berikutnya. Apa yang dimulai sebagai salah ketik dalam nama fungsi menjadi API yang rusak, tes yang rusak, dan pengembang yang bingung mencoba mencari tahu apa yang salah.

Ini adalah mode kegagalan yang paling berbahaya karena agen tidak tahu bahwa itu gagal. Setiap langkah tampak masuk akal secara terpisah. Hanya hasil akhir yang menunjukkan masalahnya.

Mode Kegagalan 4: Kelelahan sumber daya

Tanpa pengawasan, beberapa agen akan berulang tanpa henti. Mereka akan mencoba kembali panggilan API yang gagal tanpa batas, membuat sub-agen baru tanpa batas, atau terus menghasilkan kode hingga mencapai batas tagihan Anda.

Tanpa batasan sumber daya, agen tidak tahu kapan harus berhenti.

Kerangka otonomi: pagar pengaman, observabilitas, pos pemeriksaan

Anda menyelesaikan masalah ini dengan tiga lapisan. Anggap saja sebagai piramida: pagar pengaman di bagian bawah (mencegah kegagalan), observabilitas di tengah (mendeteksi kegagalan), dan pos pemeriksaan di atas (memulihkan dari kegagalan).

Lapisan 1: Pagar pengaman (pencegahan)

Pagar pengaman adalah batasan yang mencegah kegagalan fatal. Ini adalah aturan yang tidak dapat dilanggar oleh agen Anda, yang ditegakkan oleh kode, bukan oleh prompt.

Batasan keras melalui kode:

# Jangan: Percayai agen untuk mengikuti instruksi
agent.run("Hanya modifikasi file di direktori src/")

# Lakukan: Terapkan batasan dalam kode
import os
from pathlib import Path

ALLOWED_DIRECTORIES = {"src", "tests", "docs"}

def validate_file_path(path: str) -> bool:
    """Agen tidak dapat menulis di luar direktori yang diizinkan."""
    abs_path = Path(path).resolve()
    return any(
        str(abs_path).startswith(str(Path(d).resolve()))
        for d in ALLOWED_DIRECTORIES
    )

# Gunakan dalam operasi file agen Anda
def agent_write_file(path: str, content: str):
    if not validate_file_path(path):
        raise ValueError(f"Tidak dapat menulis ke {path}: di luar direktori yang diizinkan")
    with open(path, 'w') as f:
        f.write(content)

Batasan skema API:

Saat agen Anda memanggil API, gunakan skema untuk mencegah permintaan yang salah bentuk. Di sinilah Apidog sangat berguna. Tentukan kontrak API Anda sekali, dan agen Anda tidak dapat mengirim bentuk data yang salah.

// apidog-schema.ts
export const CreateUserSchema = {
  type: 'object',
  required: ['email', 'name'],
  properties: {
    email: { type: 'string', format: 'email' },
    name: { type: 'string', minLength: 1, maxLength: 100 },
    role: { type: 'string', enum: ['user', 'admin', 'guest'] }
  },
  additionalProperties: false
}

// Agen harus memvalidasi sebelum memanggil API
function validateRequest(schema: object, data: unknown): void {
  const valid = ajv.validate(schema, data)
  if (!valid) {
    throw new Error(`Permintaan tidak valid: ${JSON.stringify(ajv.errors)}`)
  }
}

Batasan anggaran:

import time
from dataclasses import dataclass

@dataclass
class AgentBudget:
    max_steps: int = 50
    max_tokens: int = 100000
    max_time_seconds: int = 600  # 10 menit
    max_api_calls: int = 100

class BudgetEnforcer:
    def __init__(self, budget: AgentBudget):
        self.budget = budget
        self.start_time = time.time()
        self.steps = 0
        self.tokens_used = 0
        self.api_calls = 0
    
    def check(self) -> bool:
        """Mengembalikan False jika anggaran terlampaui."""
        elapsed = time.time() - self.start_time
        
        if self.steps >= self.budget.max_steps:
            raise RuntimeError(f"Batas langkah tercapai: {self.steps}")
        if self.tokens_used >= self.budget.max_tokens:
            raise RuntimeError(f"Batas token tercapai: {self.tokens_used}")
        if elapsed >= self.budget.max_time_seconds:
            raise RuntimeError(f"Batas waktu tercapai: {elapsed:.0f}s")
        if self.api_calls >= self.budget.max_api_calls:
            raise RuntimeError(f"Batas panggilan API tercapai: {self.api_calls}")
        
        return True
    
    def record_step(self, tokens: int, api_calls: int = 0):
        self.steps += 1
        self.tokens_used += tokens
        self.api_calls += api_calls
        self.check()

Lapisan 2: Observabilitas (deteksi)

Ketika agen berjalan selama berjam-jam, Anda perlu tahu apa yang mereka lakukan tanpa harus mengawasi setiap langkah. Observabilitas memberi Anda garis waktu keputusan.

Pencatatan terstruktur:

import json
from datetime import datetime
from typing import Any

class AgentLogger:
    def __init__(self, log_file: str = "agent_trace.jsonl"):
        self.log_file = log_file
        self.entries = []
    
    def log(self, event: str, data: dict[str, Any] | None = None):
        entry = {
            "timestamp": datetime.utcnow().isoformat(),
            "event": event,
            "data": data or {}
        }
        self.entries.append(entry)
        
        # Tambahkan ke file segera (jangan kehilangan log saat crash)
        with open(self.log_file, 'a') as f:
            f.write(json.dumps(entry) + '\n')
    
    def log_decision(self, decision: str, reasoning: str, confidence: float):
        """Catat saat agen membuat keputusan penting."""
        self.log("decision", {
            "decision": decision,
            "reasoning": reasoning,
            "confidence": confidence
        })
    
    def log_action(self, action: str, params: dict, result: str):
        """Catat tindakan agen dan hasilnya."""
        self.log("action", {
            "action": action,
            "params": params,
            "result": result[:200]  # Pangkas hasil yang panjang
        })
    
    def log_error(self, error: str, context: dict):
        """Catat kesalahan dengan konteks penuh."""
        self.log("error", {
            "error": error,
            "context": context
        })

# Penggunaan dalam agen
logger = AgentLogger()
logger.log_decision(
    decision="Tambahkan pembatasan laju ke API",
    reasoning="Endpoint saat ini tidak memiliki perlindungan terhadap penyalahgunaan",
    confidence=0.85
)
logger.log_action(
    action="write_file",
    params={"path": "src/middleware/rate-limit.ts"},
    result="Berhasil menulis 45 baris"
)

Dasbor metrik:

Untuk agen yang berjalan lebih lama, Anda menginginkan metrik agregat, bukan hanya log individual.

from collections import Counter
from dataclasses import dataclass, field

@dataclass
class AgentMetrics:
    actions_taken: Counter = field(default_factory=Counter)
    files_modified: list[str] = field(default_factory=list)
    api_calls: dict[str, int] = field(default_factory=dict)
    errors: list[str] = field(default_factory=list)
    decisions_by_confidence: dict[str, int] = field(default_factory=lambda: {
        "tinggi (>0.9)": 0,
        "sedang (0.7-0.9)": 0,
        "rendah (<0.7)": 0
    })
    
    def record_action(self, action: str):
        self.actions_taken[action] += 1
    
    def record_file_modification(self, path: str):
        if path not in self.files_modified:
            self.files_modified.append(path)
    
    def record_api_call(self, endpoint: str):
        self.api_calls[endpoint] = self.api_calls.get(endpoint, 0) + 1
    
    def record_error(self, error: str):
        self.errors.append(error)
    
    def record_decision(self, confidence: float):
        if confidence > 0.9:
            self.decisions_by_confidence["tinggi (>0.9)"] += 1
        elif confidence >= 0.7:
            self.decisions_by_confidence["sedang (0.7-0.9)"] += 1
        else:
            self.decisions_by_confidence["rendah (<0.7)"] += 1
    
    def summary(self) -> str:
        return f"""
Ringkasan Metrik Agen
=====================
Tindakan: {dict(self.actions_taken)}
File diubah: {len(self.files_modified)}
Panggilan API: {self.api_calls}
Kesalahan: {len(self.errors)}
Keputusan berdasarkan kepercayaan diri: {self.decisions_by_confidence}
"""

Lapisan 3: Pos pemeriksaan (pemulihan)

Pos pemeriksaan adalah jeda otomatis di mana agen menunggu verifikasi manusia. Ini memungkinkan Anda menangkap masalah sejak dini tanpa pengawasan terus-menerus.

Pos pemeriksaan otomatis:

from enum import Enum
from typing import Callable

class CheckpointTrigger(Enum):
    BEFORE_FILE_WRITE = "sebelum_menulis_file"
    BEFORE_API_CALL = "sebelum_memanggil_api"
    BEFORE_GIT_COMMIT = "sebelum_git_commit"
    BEFORE_DELETE = "sebelum_menghapus"
    AFTER_N_STEPS = "setelah_n_langkah"

@dataclass
class Checkpoint:
    trigger: CheckpointTrigger
    description: str
    data: dict
    requires_approval: bool = True

class CheckpointManager:
    def __init__(self, auto_approve: set[CheckpointTrigger] | None = None):
        self.auto_approve = auto_approve or set()
        self.pending: list[Checkpoint] = []
    
    def create_checkpoint(
        self, 
        trigger: CheckpointTrigger, 
        description: str, 
        data: dict
    ) -> bool:
        """Mengembalikan True jika disetujui, False jika ditolak."""
        
        # Otomatis menyetujui pemicu tertentu
        if trigger in self.auto_approve:
            return True
        
        checkpoint = Checkpoint(
            trigger=trigger,
            description=description,
            data=data
        )
        self.pending.append(checkpoint)
        
        # Dalam sistem nyata, ini akan memberitahukan manusia dan menunggu
        # Untuk saat ini, kami mengembalikan False untuk menghentikan eksekusi
        return False
    
    def approve(self, checkpoint_id: int) -> None:
        """Manusia menyetujui pos pemeriksaan yang tertunda."""
        if 0 <= checkpoint_id < len(self.pending):
            self.pending.pop(checkpoint_id)
    
    def reject(self, checkpoint_id: int) -> None:
        """Manusia menolak pos pemeriksaan yang tertunda."""
        raise RuntimeError(f"Pos pemeriksaan ditolak: {self.pending[checkpoint_id]}")

# Penggunaan dalam agen
checkpoints = CheckpointManager(
    auto_approve={CheckpointTrigger.BEFORE_FILE_WRITE}  # Percayakan penulisan file
)

# Sebelum tindakan destruktif
if not checkpoints.create_checkpoint(
    trigger=CheckpointTrigger.BEFORE_DELETE,
    description="Akan menghapus direktori src/legacy/",
    data={"path": "src/legacy/", "files": ["old_handler.ts", "deprecated.ts"]}
):
    # Tunggu persetujuan manusia
    agent.pause("Menunggu persetujuan untuk menghapus file")

Membangun agen otonom dengan Apidog

Ketika agen AI Anda berinteraksi dengan API, risiko terbesar adalah permintaan yang salah bentuk yang menyebabkan kegagalan hilir. Apidog membantu dengan memungkinkan Anda menentukan skema API yang tepat yang harus diikuti oleh agen Anda.

Menyiapkan kontrak API:

  1. Impor atau definisikan spesifikasi OpenAPI Anda di Apidog
  2. Hasilkan kode klien dengan validasi bawaan
  3. Berikan agen Anda klien yang divalidasi daripada HTTP mentah
// Alih-alih membiarkan agen memanggil API secara langsung
const response = await fetch('/api/users', {
  method: 'POST',
  body: JSON.stringify(data)  // Tanpa validasi
})

// Beri agen klien yang divalidasi
import { UsersApi } from './generated/apidog-client'

const usersApi = new UsersApi()
// Agen hanya dapat mengirim permintaan yang valid - skema ditegakkan
const response = await usersApi.createUser({
  email: 'user@example.com',
  name: 'Test User',
  role: 'user'  // Harus merupakan nilai enum yang valid
})

Ini mengubah lapisan API Anda menjadi pagar pengaman. Agen secara harfiah tidak dapat mengirim data yang tidak valid karena klien menolaknya sebelum permintaan keluar.

Hasilkan klien API yang divalidasi untuk agen AI Anda

Pola yang terbukti dan kesalahan umum

Pola 1: Sandwich persetujuan

Untuk operasi berisiko, mintalah persetujuan sebelum DAN sesudah.

def risky_operation(agent, operation):
    # Pra-persetujuan
    if not agent.checkpoint(f"Akan melakukan: {operation.description}"):
        return "Dibatalkan oleh pengguna"
    
    # Lakukan operasi
    result = operation.execute()
    
    # Pasca-persetujuan (verifikasi hasilnya)
    if not agent.checkpoint(f"Verifikasi hasil dari: {operation.description}"):
        operation.rollback()
        return "Digulirkan kembali oleh pengguna"
    
    return result

Pola 2: Ambang kepercayaan diri

Jangan biarkan agen bertindak berdasarkan keputusan dengan tingkat kepercayaan diri rendah.

MIN_CONFIDENCE = 0.75

def agent_decide(options: list[dict]) -> dict:
    best = max(options, key=lambda x: x.get('confidence', 0))
    
    if best['confidence'] < MIN_CONFIDENCE:
        # Eskalasi ke manusia
        return {
            'action': 'escalate',
            'reason': f"Opsi terbaik memiliki kepercayaan diri {best['confidence']:.2f} < {MIN_CONFIDENCE}",
            'options': options
        }
    
    return best

Pola 3: Operasi Idempoten

Rancang tindakan agen Anda agar dapat diulang tanpa efek samping.

import hashlib

def idempotent_write(path: str, content: str) -> bool:
    """Hanya tulis jika konten berubah."""
    content_hash = hashlib.sha256(content.encode()).hexdigest()
    
    existing_hash = None
    if os.path.exists(path):
        with open(path, 'r') as f:
            existing_hash = hashlib.sha256(f.read().encode()).hexdigest()
    
    if content_hash == existing_hash:
        logger.log_action("write_file", {"path": path}, "Dilewati - tidak ada perubahan")
        return False
    
    with open(path, 'w') as f:
        f.write(content)
    logger.log_action("write_file", {"path": path}, f"Menulis {len(content)} byte")
    return True

Kesalahan umum yang harus dihindari

Percaya pada prompt sebagai batasan. "Jangan hapus file" dalam prompt bukanlah batasan. Izin file adalah batasan.

Tidak ada rencana pemulihan. Ketika agen membuat kesalahan, Anda perlu membatalkannya. Jika Anda tidak menggunakan git atau cadangan, Anda mempercayai agen dengan tindakan yang tidak dapat dipulihkan.

Mengabaikan skor kepercayaan. Sebagian besar LLM mengeluarkan kepercayaan atau dapat dipromosikan untuk itu. Kepercayaan rendah = jeda dan tanyakan manusia.

Pengawasan berlebihan. Jika Anda mengawasi setiap langkah, Anda belum membangun sistem otonom. Anda telah membangun sistem manual yang lambat.

Kurangnya spesifikasi keberhasilan. Agen perlu tahu kapan ia selesai. "Perbaiki bug" tidak memiliki kondisi akhir. "Perbaiki bug DAN semua tes lulus" memiliki kondisi akhir.


Alternatif dan perbandingan

Pendekatan Otonomi Risiko Terbaik untuk
Pengkodean manual Tidak ada Rendah Pekerjaan kompleks, kritis
Pemrograman berpasangan dengan AI Rendah Rendah Pembelajaran, eksplorasi
Agen yang diawasi Sedang Sedang Tugas rutin
Agen otonom dengan pagar pengaman Tinggi Terkontrol Operasi massal, migrasi
Agen otonom penuh Sangat tinggi Tinggi Alur kerja terpercaya, teruji dengan baik

Sebagian besar tim harus bertujuan untuk "otonom dengan pagar pengaman." Ini adalah titik manis di mana Anda mendapatkan 80% penghematan waktu dengan 10% risiko.


Kasus penggunaan dunia nyata

Migrasi basis kode. Sebuah tim menggunakan agen otonom untuk memigrasi 200 titik akhir API dari REST ke GraphQL. Pagar pengaman mencegah perubahan skema. Pos pemeriksaan memerlukan persetujuan sebelum menghapus titik akhir lama. Migrasi memakan waktu 3 hari alih-alih 3 minggu, tanpa insiden produksi.

Pembuatan dokumentasi. Agen secara otomatis menghasilkan dokumen API dari kode. Pagar pengaman memastikan agen hanya membaca dari direktori tertentu. Pos pemeriksaan menjeda sebelum publikasi. Tim meninjau seminggu sekali alih-alih menulis dokumen secara manual.

Cakupan pengujian. Agen menganalisis kode dan menulis pengujian yang hilang. Batasan anggaran mencegah pembuatan pengujian yang tidak terkontrol. Ambang kepercayaan menandai pengujian yang tidak pasti untuk ditinjau oleh manusia. Cakupan meningkat dari 60% menjadi 85% dalam satu bulan.

Ringkasan

Berikut adalah apa yang telah Anda pelajari:

button

Langkah Anda selanjutnya:

  1. Identifikasi tugas yang paling berulang yang dibantu AI
  2. Tentukan pagar pengaman: apa yang tidak boleh dilakukan agen?
  3. Tambahkan pencatatan terstruktur untuk melihat apa yang terjadi
  4. Buat pos pemeriksaan untuk operasi berisiko tinggi
  5. Biarkan berjalan selama 30 menit dan periksa lognya

Tujuannya bukan untuk menghilangkan manusia dari lingkaran. Ini adalah menempatkan manusia di tempat yang tepat dalam lingkaran: membuat keputusan tingkat tinggi daripada mengoreksi kesalahan tingkat rendah.

Bangun pagar pengaman API untuk agen AI Anda - gratis

FAQ

Apa perbedaan antara agen AI dan asisten AI?Asisten merespons permintaan Anda dan menunggu instruksi Anda berikutnya. Agen mengambil tujuan dan secara otonom merencanakan serta melaksanakan langkah-langkah untuk mencapainya. Asisten membutuhkan Anda di setiap putaran. Agen berjalan hingga mencapai pos pemeriksaan atau selesai.

Bagaimana saya tahu jika agen saya siap untuk berjalan secara otonom?Jalankan dalam mode diawasi selama 10 sesi. Catat setiap kali Anda harus campur tangan. Jika intervensi turun di bawah 2 per sesi dan semuanya kecil (klarifikasi, bukan koreksi), agen sudah siap. Jika intervensi sering atau memerlukan pembatalan pekerjaan, tambahkan lebih banyak pagar pengaman.

Apa risiko terbesar dengan agen otonom?Kegagalan berjenjang yang tidak dikenali oleh agen. Kesalahan kecil di awal menjadi masalah besar di kemudian hari, dan agen terus berjalan karena setiap langkah tampak masuk akal secara terpisah. Pos pemeriksaan memutus kaskade ini dengan memaksakan verifikasi.

Dapatkah saya menggunakan pola ini dengan LLM apa pun?Ya. Pola-pola ini (pagar pengaman, observabilitas, pos pemeriksaan) adalah agnostik model. Mereka berfungsi dengan Claude, GPT-4, Gemini, atau model lainnya. Detail implementasi spesifik mungkin bervariasi, tetapi konsepnya dapat diterapkan.

Seberapa besar observabilitas memperlambat agen?Dapat diabaikan. Menulis ke file log membutuhkan mikrodiketik. Perlambatan berasal dari pos pemeriksaan yang menunggu input manusia. Untuk jalankan yang benar-benar otonom, Anda hanya melakukan pos pemeriksaan pada saat-saat berisiko tinggi, bukan setiap langkah.

Bagaimana jika agen membuat keputusan yang saya tidak setujui?Itulah gunanya pos pemeriksaan. Ketika Anda melihat keputusan yang tidak Anda setujui, tolak pos pemeriksaan tersebut. Agen akan membatalkan atau mencoba pendekatan yang berbeda. Lebih baik: sertakan preferensi Anda dalam instruksi agen agar ia belajar gaya Anda seiring waktu.

Haruskah saya memulai dengan agen yang diawasi atau otonom?Selalu mulai dengan diawasi. Jalankan agen dengan pos pemeriksaan pada setiap tindakan signifikan sampai Anda mempercayainya. Secara bertahap hapus pos pemeriksaan untuk tindakan berisiko rendah. Ini membangun kepercayaan secara bertahap daripada mengambil risiko kegagalan fatal pada jalankan otonom pertama Anda.

Bagaimana Apidog secara spesifik membantu agen AI?Apidog menghasilkan klien API yang divalidasi dari skema Anda. Ketika agen menggunakan klien ini, permintaan yang salah bentuk akan ditolak sebelum mencapai backend Anda. Ini mencegah seluruh kelas kegagalan di mana agen mengirimkan bentuk data yang salah atau nilai yang tidak valid.

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.

Cara Menghentikan Mengasuh AI: Tips dan Trik