Header Ads

CODEFLARE ADVERTISING
OPEN AD SPACE
Pasang Iklan di Mobzter
Promosikan bisnis, produk, website atau layanan Anda.
SLOT TERSEDIA
PASANG IKLAN
  • Mulai Bikin Jarvis di PC dari app.py: Kode Pertama yang Bisa Langsung Dipakai

    Membuat Jarvis app.py untuk Windows

    Kalau ingin membuat AI seperti Jarvis, jangan mulai dari voice cloning, model besar, atau dashboard futuristik. Mulailah dari satu file sederhana: app.py. File ini menjadi pusat kontrol yang menerima perintah, memilih fungsi, lalu menjalankan tindakan di Windows.

    Versi pertama di artikel ini sengaja dibuat tanpa API key dan tanpa library tambahan. Tujuannya sederhana: pembaca yang baru belajar Python bisa benar-benar menjalankannya hari ini, lalu mengembangkan fitur satu per satu setelah fondasinya bekerja.

    Hasil akhir versi pertamaJarvis Mini bisa membuka aplikasi, folder dan website, mengecek storage, menyimpan catatan, mencari file, menampilkan waktu, serta menerima command dari terminal.

    Apa yang perlu disiapkan?

    Gunakan Windows 10 atau Windows 11 dan install Python 3 dari situs resmi Python. Saat installer muncul, centang Add Python to PATH supaya perintah python bisa dipakai dari Command Prompt atau PowerShell.

    1Install Python
    2Buat folder jarvis-mini
    3Buat file app.py
    4Paste kode
    5Jalankan python app.py

    Buat folder project

    Buat folder baru, misalnya:

    D:\jarvis-mini

    Masuk ke folder tersebut, lalu buat file bernama:

    app.py

    Kalau menggunakan VS Code, pilih File → Open Folder, buka folder jarvis-mini, lalu buat file app.py dari panel Explorer.

    Isi app.py dengan kode lengkap ini

    from pathlib import Path
    from datetime import datetime
    import os
    import shutil
    import subprocess
    import webbrowser
    
    APP_NAME = "Jarvis Mini"
    BASE_DIR = Path.home()
    NOTES_FILE = BASE_DIR / "jarvis_notes.txt"
    
    ALLOWED_FOLDERS = {
        "downloads": BASE_DIR / "Downloads",
        "documents": BASE_DIR / "Documents",
        "desktop": BASE_DIR / "Desktop",
    }
    
    APPS = {
        "notepad": ["notepad.exe"],
        "calculator": ["calc.exe"],
        "explorer": ["explorer.exe"],
    }
    
    WEBSITES = {
        "google": "https://www.google.com",
        "youtube": "https://www.youtube.com",
        "gmail": "https://mail.google.com",
    }
    
    def say(message):
        print(f"Jarvis: {message}")
    
    def open_app(name):
        command = APPS.get(name)
        if not command:
            return f"Aplikasi '{name}' belum ada di whitelist."
        subprocess.Popen(command)
        return f"Membuka {name}."
    
    def open_folder(name):
        path = ALLOWED_FOLDERS.get(name)
        if not path:
            return f"Folder '{name}' belum diizinkan."
        path.mkdir(parents=True, exist_ok=True)
        os.startfile(path)
        return f"Membuka folder {name}."
    
    def open_website(name):
        url = WEBSITES.get(name)
        if not url:
            return f"Website '{name}' belum terdaftar."
        webbrowser.open(url)
        return f"Membuka {name}."
    
    def storage_info():
        total, used, free = shutil.disk_usage(BASE_DIR.drive + "\\")
        gb = 1024 ** 3
        return (
            f"Drive {BASE_DIR.drive} terpakai {used/gb:.1f} GB "
            f"dari {total/gb:.1f} GB. Sisa {free/gb:.1f} GB."
        )
    
    def add_note(text):
        if not text.strip():
            return "Isi catatan masih kosong."
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
        with NOTES_FILE.open("a", encoding="utf-8") as file:
            file.write(f"[{timestamp}] {text.strip()}\n")
        return f"Catatan disimpan di {NOTES_FILE}."
    
    def find_file(keyword):
        keyword = keyword.strip().lower()
        if len(keyword) < 2:
            return "Masukkan minimal 2 karakter untuk pencarian."
    
        results = []
    
        for folder in ALLOWED_FOLDERS.values():
            if not folder.exists():
                continue
    
            try:
                for item in folder.rglob("*"):
                    if item.is_file() and keyword in item.name.lower():
                        results.append(item)
    
                        if len(results) == 5:
                            break
            except (PermissionError, OSError):
                pass
    
            if len(results) == 5:
                break
    
        if not results:
            return f"Tidak menemukan file dengan kata '{keyword}'."
    
        lines = "\n".join(f"- {item}" for item in results)
        return f"Ditemukan {len(results)} file:\n{lines}"
    
    def show_help():
        return """Perintah yang bisa dicoba:
    - buka notepad
    - buka calculator
    - buka explorer
    - buka downloads
    - buka documents
    - buka desktop
    - buka google
    - buka youtube
    - buka gmail
    - storage
    - waktu
    - catat beli SSD minggu depan
    - cari invoice
    - bantuan
    - keluar"""
    
    def handle_command(command):
        text = command.strip()
        lower = text.lower()
    
        if not text:
            return "Perintah kosong."
    
        if lower in {"keluar", "exit", "quit"}:
            return "__EXIT__"
    
        if lower in {"bantuan", "help"}:
            return show_help()
    
        if lower == "waktu":
            return datetime.now().strftime(
                "Sekarang %H:%M, %d %B %Y."
            )
    
        if lower == "storage":
            return storage_info()
    
        if lower.startswith("catat "):
            return add_note(text[6:])
    
        if lower.startswith("cari "):
            return find_file(text[5:])
    
        if lower.startswith("buka "):
            target = lower[5:].strip()
    
            if target in APPS:
                return open_app(target)
    
            if target in ALLOWED_FOLDERS:
                return open_folder(target)
    
            if target in WEBSITES:
                return open_website(target)
    
            return f"Saya belum mengenal target '{target}'."
    
        return "Perintah belum dikenali. Ketik 'bantuan'."
    
    def main():
        print(f"{APP_NAME} siap.")
        print("Ketik 'bantuan' untuk melihat perintah.\n")
    
        while True:
            try:
                command = input("Anda: ")
                result = handle_command(command)
    
                if result == "__EXIT__":
                    say("Sampai jumpa.")
                    break
    
                say(result)
    
            except KeyboardInterrupt:
                print()
                say("Program dihentikan.")
                break
    
            except Exception as error:
                say(f"Terjadi error: {error}")
    
    if __name__ == "__main__":
        main()

    Jalankan app.py

    Buka terminal di folder jarvis-mini, lalu jalankan:

    python app.py

    Kalau berhasil, terminal akan menampilkan:

    Jarvis Mini siap.
    Ketik 'bantuan' untuk melihat perintah.
    
    Anda:

    Coba command berikut satu per satu:

    buka notepad
    buka calculator
    buka downloads
    buka google
    storage
    waktu
    catat beli SSD minggu depan
    cari invoice
    bantuan
    keluar

    Kenapa kodenya dibuat seperti ini?

    Bagian terpenting bukan tampilannya, tetapi struktur handle_command(). Fungsi ini menjadi router: ia membaca teks dari pengguna lalu memilih fungsi yang sesuai.

    Inputbuka notepad
    Routerhandle_command()
    Actionopen_app()

    Nanti ketika kita menambahkan voice input atau LLM, bagian router ini tetap bisa dipakai. Yang berubah hanya sumber inputnya: dari keyboard menjadi suara atau perintah natural language.

    Bagian APPS adalah whitelist

    Perhatikan bagian ini:

    APPS = {
        "notepad": ["notepad.exe"],
        "calculator": ["calc.exe"],
        "explorer": ["explorer.exe"],
    }

    Jarvis hanya boleh membuka aplikasi yang kita daftarkan. Cara ini lebih aman daripada membiarkan AI menjalankan command shell apa saja.

    Kalau ingin menambahkan Paint, misalnya:

    "paint": ["mspaint.exe"],

    Lalu command-nya menjadi:

    buka paint

    Bagian folder juga dibatasi

    Versi ini hanya mencari file di Downloads, Documents dan Desktop. Kalau ingin menambahkan folder kerja sendiri, tambahkan satu baris:

    ALLOWED_FOLDERS = {
        "downloads": BASE_DIR / "Downloads",
        "documents": BASE_DIR / "Documents",
        "desktop": BASE_DIR / "Desktop",
        "project": Path(r"D:\Project"),
    }

    Setelah itu:

    buka project
    cari composer

    Bagaimana fungsi pencarian file bekerja?

    find_file() memakai Path.rglob() untuk mencari nama file di folder yang sudah diizinkan. Agar pencarian tidak terlalu lama, hasil dibatasi maksimal lima file.

    Contoh:

    Anda: cari invoice
    Jarvis: Ditemukan 3 file:
    - C:\Users\Nama\Downloads\invoice-januari.pdf
    - C:\Users\Nama\Documents\invoice-client.xlsx
    - C:\Users\Nama\Desktop\invoice-final.pdf

    Catatan disimpan di mana?

    Command:

    catat beli SSD minggu depan

    akan membuat atau menambahkan isi ke file:

    C:\Users\Nama\jarvis_notes.txt

    Setiap catatan otomatis diberi timestamp. Jadi kita sudah punya fungsi kecil yang benar-benar berguna tanpa database.

    Kenapa belum pakai AI atau voice?

    Karena kalau fondasi command router belum berjalan, menambahkan speech-to-text, wake word dan LLM hanya membuat debugging lebih sulit. Versi pertama sebaiknya dibuktikan dulu dengan input keyboard.

    Untuk melihat bagaimana app.py, voice, local LLM, tool automation dan NPU bisa digabung menjadi satu asisten PC, lihat cara membangun Jarvis di PC. Di halaman ini fokusnya tetap pada app.py yang menjalankan tindakan di Windows.

    Setelah app.py berhasil, baru tambahkan fitur satu per satu

    Urutan pengembangan yang paling mudah:

    app.pyRouter dan action dasar
    voice.pySpeech-to-text
    speak.pyText-to-speech
    brain.pyLocal LLM
    tools.pyAutomation tambahan

    Dengan pola ini, project tidak langsung berubah menjadi satu file raksasa yang sulit dirawat.

    Kalau error “python is not recognized”

    Biasanya Python belum masuk PATH. Tutup terminal, buka installer Python lagi, lalu pilih opsi untuk menambahkan Python ke PATH. Setelah itu buka terminal baru dan cek:

    python --version

    Kalau tampil versi Python, misalnya Python 3.13.x, environment sudah siap.

    Kalau Notepad atau Calculator tidak terbuka

    Coba jalankan langsung dari Run Windows:

    notepad.exe
    calc.exe

    Kalau command itu gagal juga, berarti masalahnya bukan pada Python. Sesuaikan path aplikasi di dictionary APPS.

    Tempat mencari variasi kode dan ide fitur

    Setelah versi dasar ini bekerja, ada beberapa komunitas yang bagus untuk melihat cara orang lain menyusun assistant:

    Yang perlu ditiru dari komunitas bukan seluruh project sekaligus, tetapi pola strukturnya: command router, whitelist tools, pemisahan modul, serta konfirmasi untuk perintah berisiko.

    Jangan tambahkan fungsi exec atau shell bebas duluUntuk pemula, hindari kode yang membiarkan model AI menulis lalu mengeksekusi command Python atau PowerShell secara otomatis. Gunakan whitelist seperti contoh di atas supaya setiap aksi tetap bisa diaudit.

    Target versi pertama sudah tercapai kalau ini bekerja

    Kalau python app.py sudah bisa membuka Notepad, mencari file, mengecek storage dan membuat catatan, fondasi Jarvis pertama sudah jadi. Belum bisa bicara, belum punya LLM, dan belum punya memory canggih — tetapi ia sudah bisa melakukan pekerjaan nyata di komputer.

    Langkah berikutnya yang paling masuk akal adalah mengganti input keyboard dengan suara tanpa mengubah router yang sudah ada. Dengan begitu, kita menambah satu kemampuan baru tanpa merombak fondasi.

    Tidak ada komentar

    Post Top Ad

    Post Bottom Ad