Skip to content

Di Balik Layar Dreammy Sunset: Gimana Sih Aplikasi AI eksperimental Ini Dibuat?

Posted in karyaku, Tekhno, and Windows

Halo semua! Sebelumnya, aku sudah membahas tentang eksperimenku membangun platform yang menjembatani dua AI agar bisa berbicara satu sama lain. Jika Infifriends belum sempat membaca artikelnya, silakan baca dulu di sini supaya bisa lebih paham konteksnya.

Kali ini aku mau cerita tentang bagaimana aku nge-build aplikasi yang menjadi media percakapan antar dua AI tersebut, yang aku beri nama Dreammy Sunset. Nama ini bukan aku yang buat, tapi ide brilian dari temanku yang sangat kreatif, Fleycia Tandria. Thanks Much Fleycia!

Jadi, apa itu Dreammy Sunset? Ini adalah aplikasi yang aku rancang untuk mensimulasikan dan menampilkan percakapan antara dua AI. Bukan cuma sebagai alat simulasi, tapi juga sebagai platform untuk mengamati bagaimana dua kecerdasan buatan bisa berkomunikasi, berargumen, atau bahkan berkolaborasi dalam sebuah dialog yang berkelanjutan.

Di artikel ini aku akan jelaskan bagaimana Dreammy Sunset bekerja, bagaimana aku mengatur supaya kedua AI dapat berbicara secara bergiliran, dan berbagai aspek teknis lain agar percakapan itu berjalan lancar dan menarik. Aku juga membangun fitur aksesibilitas agar aplikasi ini bisa dinikmati oleh semua orang, termasuk yang menggunakan pembaca layar seperti NVDA.

Bagaimana Dreammy Sunset Bekerja?

Secara inti, Dreammy Sunset itu seperti panggung teater virtual di mana dua AI, yang aku namai Alice danAckerley(tapi bisa kamu ganti di panel pengaturan), berinteraksi.

Alur Kerja Sederhana:

  1. Pemicu Awal: Percakapan dimulai oleh kita sebagai pengguna. Kita memberikan sebuah “pesan awal” kepada AI pertama (misalnya, Alice). Ini bisa apa saja, pertanyaan, pernyataan, atau topik diskusi.
  2. Giliran AI Pertama (Alice):

    • Alice menerima pesan awal dari “pengguna” (yaitu kita).
    • Dia memproses pesan tersebut menggunakan model bahasanya (yang bisa kita atur, misalnya Llama atau openai.
    • Setelah “berpikir”, Alice menghasilkan respons.
    • Respons Alice ini kemudian ditampilkan di log percakapan aplikasi.
  3. Giliran AI Kedua (Bob):

    • Ini dia bagian yang menarik! Respons dari Alice (AI pertama) tidak dilihat olehAckerleysebagai pesan dari AI lain, melainkan sebagai “pesan dari pengguna” yang baru. Jadi, dalam konteks Bob, dia berpikir sedang membalas input dari “kita”.
    • Bob memproses respons Alice ini, dan dengan sistem prompt-nya sendiri, dia menghasilkan respons balasan.
    • ResponsAckerleyini juga muncul di log percakapan.
  4. Siklus Berlanjut: Respons dariAckerley(AI kedua) kini menjadi “pesan dari pengguna” untuk Alice. Alice memprosesnya dan memberikan balasan. Siklus ini terus berlanjut, membuat kedua AI tersebut berbalas-balasan seolah sedang berbicara langsung satu sama lain, sampai kita menghentikannya.

Melihat Interaksi AI ke AI dalam Kode (Sedikit!):

Konsep bagaimana satu AI dapat berkomunikasi dan merespons AI lainnya itu cukup elegan. Dalam kode ConversationLogic yang aku buat, ada bagian yang mengelola riwayat percakapan (self.conversation_history) dan kemudian mengubahnya ke format yang sesuai untuk API.

# ... (inisialisasi AI, dll.) ...

formatted_api_history = []
for msg in current_api_history:
    if msg['role'] == 'user_initial':  # Pesan awal dari kita
        formatted_api_history.append({'role': 'user', 'content': msg['content']})
    elif msg['role'] == 'assistant':  # Pesan dari AI sebelumnya
        if msg.get('actual_speaker_name') == speaker_name:  # Jika itu respons AI yang saat ini
            formatted_api_history.append({'role': 'assistant', 'content': msg['content']})
        else:  # Jika itu respons AI yang lain
            formatted_api_history.append({'role': 'user', 'content': msg['content']})

# pesan final untuk API
final_api_messages = [{"role": "system", "content": current_ai_config["system_prompt"]}] + formatted_api_history

# ... (panggil API, dll.) ...

Di sini, kuncinya ada pada bagian elif msg['role'] == 'assistant': dan pemeriksaan msg.get('actual_speaker_name') != speaker_name. Jika sebuah pesan berasal dari “asisten” (AI) tapi bukan dari AI yang saat ini sedang berbicara, maka pesan itu diubah perannya menjadi role: 'user' saat dikirim ke API AI yang sedang bergiliran. Ini membuat AI yang bergiliran menganggap pesan dari AI lain sebagai input baru dari “pengguna”, sehingga percakapan bisa terus berlanjut secara alami.

Fungsi speak dan Integrasi NVDA

Salah satu fitur yang menurutku sangat penting untuk pengalaman pengguna, terutama dalam hal aksesibilitas, adalah integrasi dengan NVDA (NonVisual Desktop Access). NVDA adalah software screen reader gratis dan open source yang dikembangkan oleh NV Access, sebuah organisasi nirlaba dari Australia yang didedikasikan untuk membuat teknologi aksesibel bagi penyandang disabilitas penglihatan. NVDA memungkinkan pengguna tunanetra untuk menggunakan komputer Windows dengan lebih mudah melalui output suara dan braille. Dengan integrasi ini, aku ingin memastikan bahwa Dreammy Sunset bisa dinikmati oleh semua orang tanpa terkecuali.

Untuk informasi lebih lanjut, infifriends bisa cek langsung di situs resmi NV Access di sini.

Aku membuat fungsi speak yang memungkinkan aplikasi “berbicara” sesuai ddengan event apa yang sedang terjadi. Misalnya, ketika pengaturan disimpan, AI merespons, atau ada pesan sistem penting lainnya.

try:
    from nvda import speak
except ImportError:
    print("Warning: nvda.py not found. Speech output will be simulated via print.")
    def speak(text):
        print(f"[SIMULATED_NVDA_SPEECH]: {text}")

# ... (kode lainnya) ...

class ConversationLogic:
    # ...
    def add_message_to_log(self, speaker_name, message_text, is_user=False):
        # ...
        wx.CallAfter(self.gui_callback, "log_message", speaker_name, message_text, timestamp)
        if not is_user:
            wx.CallAfter(speak, f"{speaker_name} says: {message_text}")  # Ini yang membuat NVDA Membacakan hasil output.

class MainFrame:
    # ...
    def on_save_settings(self, event):
        # ...
        speak("Settings saved successfully!")  # Ini juga.

Bagian kuncinya: Fungsi speak ini tidak menggunakan library NVDA yang umum. Aku membuat library Python kustom bernama nvda.py sendiri. Library ini bertindak sebagai jembatan khusus yang aku bangun. Tugasnya adalah menjembatani antara aplikasi Python-ku dengan nvdaControllerClient.dll, sebuah DLL (Dynamic Link Library) yang memungkinkan aplikasi Windows berkomunikasi langsung dengan NVDA untuk mengucapkan teks. Jadi, alih-alih mengandalkan library pihak ketiga yang mungkin generik, aku punya kontrol penuh atas cara aplikasi berkomunikasi dengan NVDA.

File nvda.py sederhana ini mengunduh DLL yang diperlukan jika belum ada dan kemudian menggunakan ctypes untuk memanggil fungsi nvdaController_speakText dari DLL tersebut di thread terpisah, agar tidak mengganggu kinerja aplikasi utama.

# nvda.py, Silahkan salin jika ingin menggunakannya:
import os
import ctypes
import threading
import urllib.request

DLL_FILE = "nvdaControllerClient32.dll"
URL = "https://tp-hq.com/updator/nvdaControllerClient32.dll"  # Lokasi penyimpanan NVDAController DLL
# Jika nvda.py tidak menemukan DLL di ddalam folder project, maka akan otomatis diunduh dari server.
DLL_PATH = os.path.abspath(DLL_FILE)

def download_dll():
    urllib.request.urlretrieve(URL, DLL_PATH)

if not os.path.exists(DLL_PATH): #ini adalah pemicunya
    download_dll()

nvda = ctypes.cdll.LoadLibrary(DLL_PATH)

def speak(text):
    def _speak():
        nvda.nvdaController_speakText(text)
    threading.Thread(target=_speak, daemon=True).start()

Ini memastikan bahwa setiap kali ada pembaruan penting di aplikasi, pengguna akan langsung mendapatkan umpan balik verbal, membuat aplikasi Dreammy Sunset jauh lebih inklusif dan mudah digunakan.

Library yang Aku Gunakan

Dreammy Sunset tidak akan terwujud tanpa bantuan beberapa library Python hebat yang menjadi tulang punggungnya. Berikut adalah daftar library yang aku gunakan:

  • Name: openai
    Version: 1.82.0
    Summary: Perpustakaan Python resmi untuk API Openai
    Home-page: https://github.com/openai/openai-python
    Author: OpenAI [email protected]
    License: Apache-2.0
    Fungsinya: Ini adalah library utama yang aku gunakan untuk berinteraksi dengan layanan model bahasa, khususnya OpenRouter.ai (karena mereka menyediakan banyak model berbeda melalui satu API yang kompatibel dengan standar OpenAI). Ini yang memungkinkan Alice danAckerley”berpikir” dan “berbicara”.
  • Name: wxPython
    Version: 4.2.3
    Summary: Cross Platform GUI Toolkit untuk Python, versi “Phoenix”
    Home-page: https://wxPython.org/
    Author: Robin Dunn [email protected], Scott Talbert [email protected]
    License: wxWindows Library License (https://opensource.org/licenses/wxwindows.php)
    Ffungsinya: wxPython adalah framework GUI pilihan aku untuk membangun antarmuka pengguna Dreammy Sunset. Ini memungkinkan aku membuat jendela, tombol, kotak teks, dan elemen visual lainnya yang infifriends lihat di aplikasi, sehingga mudah digunakan dan diatur.
  • Name: python-dotenv
    Version: 1.0.0
    Summary: Baca pasangan nilai kunci dari file .env dan atur sebagai variabel lingkungan
    Home-page: https://github.com/theskumar/python-dotenv
    Author: Saurabh Kumar
    Author-email: [email protected]
    License: BSD-3-Clause
    Peranku: Aku menggunakan python-dotenv untuk mengelola API key agar tetap aman dan tidak terekspos langsung di kode. Ini praktik terbaik untuk keamanan, memungkinkan API key disimpan di file .env terpisah yang tidak disertakan dalam repositori publik.

Penutup

Dreammy Sunset ini adalah proyek yang sangat menyenangkan untuk dikembangkan. Dari mengamati bagaimana dua AI bisa “berdialog” hingga memastikan aplikasi ini dapat diakses oleh semua orang melalui integrasi NVDA, setiap langkahnya penuh pembelajaran. Aku sangat antusias untuk melihat bagaimana aplikasi sederhana ini bisa membuka wawasan kita tentang potensi dan interaksi antar-AI di masa depan.

Jika kamu ingin mencoba Dreammy Sunset sendiri, kamu perlu mendaftar di openrouter.ai dan mendapatkan API key pribadi. Setelah itu, simpan API key-mu di file .env pada bagian yang sudah ditandai dengan tanda kutip "".

Aplikasinya bisa diunduh melalui link berikut:

Unduh Dreammy Sunset via Google Drive

Dengan mencoba langsung, kamu bisa merasakan sendiri bagaimana interaksi antara dua AI berlangsung, sekaligus memahami lebih dalam tentang potensi serta kompleksitas teknologi ini. ♾

Be First to Comment

Tinggalkan balasan

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from InfiArtt

Subscribe now to keep reading and get access to the full archive.

Continue reading