Membuat Program GUI A.I. Chatbot Bersuara Seperti Jarvis Menggunakan Python dan AIML

Program GUI Chatbot Bersuara
Program GUI Chatbot Bersuara
Membuat Program GUI A.I. Chatbot Bersuara Seperti Jarvis Menggunakan Python dan AIML - Apakah kalian pernah mengenal atau mendengar kata - kata atau sebutan JARVIS ? Kata ini  dipopulerkan oleh si Iron Man, Tony Stark dalam 3 sekuel film yang mengagumkan. Jujur admin sendiri dari hero Avengers memang memfavoritkan Iron Man, karena seperti yang kita tahu Tony Stark ini yang paling jenius akan semua hal berbau Teknologi.


Tapi pada postingan kali ini kita tidak akan membahas tentang Tony Stark, melainkan sebuah program kecerdasan buatan atau Artificial Intelligence ( A.I. ) yang selalu menemani Iron Man dalam membasmi kejahatan, yap ! itulah Jarvis !

Mungkin mustahil untuk merealitaskan Jarvis sepenuhnya seperti pada film aslinya. Tapi asal kalian tahu CEO Facebook, Mark Zuckerbeg kabarnya akan membuat Jarvis dalam kehidupan nyata ! Mungkin itu bisa saja terjadi, tapi pastinya membutuhkan dana, storage dan baris code yang tidak sedikit.

Tapi kali ini kita akan membuat Jarvis versi mini. Boleh dikata adiknya Jarvis yang masih sekolah TK . Yang akan saya buat adalah semacam program chatbot ( semacam SimiSimi ) yang dapat mengeluarkan suara. Jadi seolah olah kita nonton webinar atau streaming Youtube, jadi kita hanya menulis text sedangkan jawabannya kepada kita adalah berupa suara.

Tidak hanya itu, agar tidak monoton saya juga akan membuat versi GUI dari chatbot yang saya namakan S.O.B ini, kepanjangan dari SOB ini adalah Smart Online Buddy, yang pastinya cita - cita saya adalah terus mengembangkan software ini sampai sekeren Jarvis.

PERKENALAN DENGAN AIML

Seperti yang saya katakan dijudul, kita akan membangun chatbotnya menggunakan bantuan AIML. Apa itu AIML ? Singkatnya AIML adalah otak dari Chatbot yang akan kita buat, AIML inilah yang kan menghandle seluruh inputan dari user yang nantinya akan direspon berdasarkan data dan code yang telah ia simpan.

AIML atau yang kependekan dari Artificial Inteligence Markup Langunge, menawarkan kemudahan dan kecepatan dalam membangun kecerdasan buatan sendiri. AIML sendiri berbasis XML, yang mana memang memiliki syntax yang clear dan mudah dimengerti. Oleh karena itu kali ini kita akan membahas bagaimana syntax dan kegunaannya masing - masing dalam AIML.

Secara garis besar, syntax AIML hanyalah terdiri dari 3 tag, yaitu <category>, <pattern>, dan <template>.

1 : Category : Pada tag category terdapat pasangan pola dan jawaban / respon. Jadi intinya tag ini merupakan wrapper / pembungkus untuk masing - masing pertanyaan / inputan dan jawaban / respon yang sesuai.

2 : Pattern : Tag ini merupakan pertanyaan atau pola pertanyaan. Tugasnya adalah menghandle inputan dengan mencocokkan dengan pola yang ditulis dan jika sesuai maka output jawaban akan keluar. Disini kita wajib menjebolkan capslock untuk menulis polanya, alias semua pola pertanyaan disini harus menggunakan kapital.

3 ; Template : Tag template merupakan tempat jawaban ditulis. Jika pattern cocok maka isi dari template akan keluar sebagai respon chatbot.

Nah itulah dasarnya dari sebuah bahasa AIML. Ketiga komponen itu harus ada didalam satu file AIML. Contoh penulisan AIML yang baik dan benar.

<aiml>
    <category>
        <pattern>HALO</pattern>
        <template>Halo user !</template>
    </category>
</aiml>


Nah, disana kita membuat pola input yaitu "HALO" yang jika inputan user terdeteksi halo maka akan keluar jawaban "Halo user !". Ingat tahap ini kita belum mengkonfigurasi AIML dengan Python dan Text-to-Speech jadi jawaban yang keluar masih berupa text.
Baca Juga: Program GUI Grafik Maker dengan Python
Selanjutnya adalah optional tag yang juga memainkan peranan penting dalam AIML, yaitu <random>, <li>, <set>, <get>, <srai>, <star>, dan <think>

1 : Random : Seperti namanya tag ini akan memilih jawaban acak berdasarkan list yang sudah dibuat dengan tag li. Contoh penerapan tag random.

<category>
    <pattern>PRESIDENT OF INDONESIA</pattern>
    <template>
        Absolutely i know,
        <random>
           <li>The first president, is Soekarno</li>
           <li>The second president, is Soeharto</li>
           <li>The third president, is Habibie</li>
           <li>The fourth president, is Abdurrahman Wahid</li>
           <li>The fifth president is, Megawati</li>
           <li>The sixth president is, Susilo Bambang Yudhoyono</li>
           <li>The seventh president is Joko Widodo</li>
        </random>
    </template>
</category>


Terlihat seperti list pada HTML kan. Jadi jika code diatas mendeteksi inputan "PRESIDENT OF INDONESIA" maka salah satu dari tujuh opsi akan keluar sebagai output. Dan juga disana terlihat bahwa template biasa dapat digabung dengan tag random.

2 : Set, Get dan Star : Tag set berfungsi mengingat value, dan Tag Get berfungsi memanggil value dari tag Set.  Sedangkan star mengambil inputan user. Contohnya

<category>
    <pattern>_ MY NAME IS *</pattern>
    <template>Oh Hello <set name="nama"><star index="2" /></set></template>
</category>

<category>
    <pattern>WHO AM I</pattern>
    <template>You are <get name="nama"></get></template>
</category>


Nah maksudnya saya membuat pola dengan 2 special karakter, yaitu * (star) dan _ (underscore). Star berarti satu kata setelah atau sebelum pola tergantung penempatannya, sedangkan underscore berarti banyak kata sesudah atausebelum pola tergantung penempatannya.

Kemudian saya set nama user yang telah didapat dari tag star dengan atribut index yang berarti input yang diambil adalah spesial karakter ke dua. Nama sudah didapat, dan jika user bertanya siapa dirinya, maka cukup menggunakan tag get untuk mendapatkan value awal. Jangan lupa atribut valuenya harus sama.

3 : Srai : Tag ini gunannya untuk menggabungkan output dari pertanyaan sejenis / sinonimnya. Maksudnya begini misal ada pola "SMART", user meletakkan smart ini tidak selalu satu kata dan kadang kala menggantinya dengan kata "GENIUS" maka daripada menulis template berulang kali berikan saja tag srai. Contoh

<category>
    <pattern>SMART</pattern>
    <template>Thank You !</template>
</category>

<category>
    <pattern>_ SMART</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>_ SMART _</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>SMART _</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>GENIUS</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>_ GENIUS</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>GENIUS _</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>_ GENIUS _</pattern>
    <template><srai>SMART</srai></template>
</category>


Nah, semua kondisi tersebut dimana ada kata smart dan genius dimanapun letaknya dalam sebuah kalimat maka akan terkoneksi dengan satu jawaban / output yaitu "Thank You !"
Baca Juga: Program GUI Pengubah Decimal ke Hex, Octal dan Biner dengan Python
4 : Think : Tag think ini gunanya mengescape karakter agar tidak keluar sebagai output. Ini biasanya digunakan untuk tag set. Jadi value didapat tanpa mendisplay value tersebut kepada user.

Itulah beberapa tag dan spesial karakter yang lazim dan saya sendiri gunakan dalam membuat chatbot saya. Cukup simple bukan ?! Dengan sedikit latihan dan pembiasaan maka AIML akan mudah ditulis seperti menulis puisi. Jangan lupa juga simpan file kalian dengan format .aiml (dot aiml).

MENGKONFIGURASI AIML DENGAN PYTHON

Sekarang adalah bagaimana kita menggabungkan Python dengan AIML yang telah kita pelajari diawal. Untuk mengkonfigurasinya kita memerlukan Module external bernama PyAIML 3. Modul ini hanya tersedia untuk Python 2 jika diinstall menggunakan PIP, oleh karena itu unutk mendapatkan PyAIML 3 silahkan kalian Download pada Laman GitHub PyAIML 3.

Jika sudah didownload silahkan kalian letakkan folder aiml pada directory site-packages Python kalian. Jika sudah terinstal kita memerlukan beberapa baris code saja untuk memulai menjalankan program chatbot yang sudah kita buat otaknya dengan aiml.

Langkah pertama adalah kita buat kernelnya, kemudian kita load file aiml kita dan kita loop selamanya untuk menjawab segala pertanyaan kita. Berikut code matangnya.

import aiml

bot = aiml.Kernel()
bot.learn("File aiml kamu.aiml")

while True:
    a = bot.respond(input(">> "))
    print(a)


Dengan code begitu saja Chatbot kita sudah jadi dalam bentuk CLI. Jangan lupa untuk meletakkan file aiml amu pada folder yang sama dengan Python Script kamu. Coba jalankan dan pastikan kamu mendapat tulisan load sukses semacam Loading test.aiml... done (1.43 seconds)

MEMBUAT CHATBOT VERSI GUI DAN BERSUARA

Nah pada penghujung tutorial kali ini kita akan mencoba membuat S.O.B menjadi sedikit lebih mirip dengan Jarvis, yaitu kita akan membuatnya berbicara dan mengubahnya dari CLI menjadi versi GUI.

Disini saya ingin memberi semacam label atau foto cover bertuliskan S.O.B agar GUI nya nanti terlihat lebih keren. Dan untuk suara, saya tidak menggunakan modul Text-To-Speech pada Python, hal ini karena tidak ada modul yang berfungsi dengan benar - benar baik.

Oleh karena itu, setelah berkeliling Google dan StackOverflow akhirnya saya menemukan software bernama Espeak. Espeak ini memiliki semacam versi CLI melalui CMD yang terbundle dalam paketnya. Dengan begitu kita panggil mode CLI itu kedalam script Python kita dengan modul OS.

Langkah pertama kamu harus mendownload dan install software Espeak, terlebih dahulu. Jika sudah menginstallnya silahkan cari direktori file Espeak yang kamu pilih tadi saat proses install. Pilih folder command line, kemudian copy file espeak.exe kedalam file script Python dan AIML kamu.

Jika sudah maka kita tinggal merangkai semuanya kedalam versi GUI yang tentunya lebih keren sedikit. Langsung saja begini kode yang sudah saya buat.

import aiml
import os
from tkinter import *

root = Tk()
root.title("Smart Online Buddy")

bot = aiml.Kernel()
bot.learn("test.aiml")

def suara(event):
    a = bot.respond(masukan.get())
    os.system('.\\espeak.exe %(a)s' % locals())
    masukan.delete(0, END)

atas = Frame(root).pack()
bawah = Frame(root).pack(side=BOTTOM)

foto = PhotoImage(file="sob.png")
fotone = Label(atas, image=foto).pack()
masukan = Entry(bawah, width=90)
masukan.pack()

masukan.bind("", suara)

b = '"Hello Anonym User !"'
os.system('.\\espeak.exe %(b)s' % locals())


root.mainloop()

Pada kode tersebut saya pack file suara dan menghapus pertanyaan user sebelumnya kedalam satu function yang akan dipanggil ketika user menekan tombol shift + panah atas. Oh ya jangan lupa jika ingin semua respon terbaca dan disuarakan kamu harus menambah tanda kutip " " pada isi tag template di file AIML. Contoh : <template>"Halo User !"</template>
Baca Juga: Program Stopwatch Sederhana menggunakan Python
Sebenarnya kita bisa menambahkan speech recognition atau membuat suara kita menjadi text agar kita merasa benar - benar seperti Tony Stark, tapi saya masih dalam proses downloading software speech recognition yang akurat yaitu Dragon. Karena speech recognition bawaan Windows begitu kampret :)

Seperti inilah penampakan Smart Online Buddy milik saya

Smart Online Buddy
Smart Online Buddy

KESIMPULAN CHATBOT 

Pada akhirnya Python benar - benar gila ! Mana mungkin baris code yang hanya sedikit kita bisa membuat versi mini dari kecerdasan buatan. Memang Python luar biasa ! 4 Jempol buat Python, Mantap !

Nah, kita telah belajar untuk Membuat Program GUI A.I. Chatbot Bersuara Seperti Jarvis Menggunakan Python dan AIML, silahkan kalian praktekkan dan jika ada Ide atau pertanyaan silahkan berkomentar dibawah !

Share this

Related Posts

Previous
Prev Post »

47 komentar

komentar
30 Mei, 2017 18:11 delete

cara instal aiml nya gimana master?udah coba instal tp gk bisa
bisa dijelaskan detail nya?terima kasih

Reply
avatar
30 Mei, 2017 19:52 delete

menggunakan Python berapa sob ?

Reply
avatar
01 Jun, 2017 21:37 delete

gampang kok, cari folder python kamu pas instalasi dulu, pakai search juga bsa, tarus cari folder "Lib" dalam lib cari lagi "site-packages" trus paste deh folder "aiml" dri github disitu, silahkan cek di console apakah aiml sudah bs dengan "import aiml" :)

Reply
avatar
05 Jun, 2017 14:38 delete Ulasan ini telah dialihkan keluar oleh pengarang.
avatar
05 Jun, 2017 15:21 delete

setelah saya RUN kok error yaa, error nya kayak gini
AttributeError: module 'aiml' has no attribute 'Kernel'

Reply
avatar
05 Jun, 2017 21:33 delete

Seriusan ? Punya saya bisa kok, coba di cek lagi, pyaiml harus yg untuk Python 3, terus di folder aiml, harus ada Kernel.py

Reply
avatar
08 Jun, 2017 17:37 delete

Referensi nya dari site mana nih Bal ? (y)

Reply
avatar
08 Jun, 2017 21:07 delete

Sebenarnya ini referensinya dari status bang Sonny yg AIML, terus penasaran mampir ke web aslinya, baca2 doc, cari tutor, trus bikin sendiri dan akhirnya nemu PyAIML, trus lanjut nyari Text-to-speech dan beres, bikin deh tutor biar bermanfaaf buat orang banyak :)

Reply
avatar
14 Ogos, 2017 17:38 delete

python 3.5 gk bisa ya ?

Reply
avatar
19 Ogos, 2017 14:41 delete

Tentu bisa, yg penting versi 3 keatas ...

Reply
avatar
04 September, 2017 01:07 delete

ok. kawan, sya coba dulu, sprtinya memng mantap!

Reply
avatar
30 September, 2017 04:42 delete

tutorial nya kurang jelas nih bro. installing AIML nya gmna, dan gmna kita tau run AIML ny, dan dimana masukkin script nya. ga ada di infoin

Reply
avatar
10 Oktober, 2017 16:58 delete

Gak ada untuk install AIML sob, cukup letakkan folder AIML di directory site-packages seperti letak module python kalian sob, jadi untuk aksesnya tinggal import saja, krn AIML terdeteksi sebagai modul

Reply
avatar
26 Oktober, 2017 16:10 delete

import aiml

bot = aiml.Kernel()
bot.learn("File aiml kamu.aiml")

while True:
a = bot.respond(input(">> "))
print(a)

maksudnya script diatas itu disimpan sebagai kernel.py? atau gimana?

Reply
avatar
26 Oktober, 2017 16:23 delete

..dan "...Coba jalankan dan pastikan kamu mendapat tulisan load sukses semacam Loading test.aiml... done (1.43 seconds)"

itu maksudnya gimana cara menjalankannya? masih newbie banget ini ;D

Reply
avatar
01 November, 2017 22:30 delete

bukan sob, itu hanyalah untuk mangetes apakah aiml load sepenuhnya untuk membaca file aiml kita :)

Reply
avatar
01 November, 2017 22:30 delete

Script pythonnya di run sob :)

Reply
avatar
07 Disember, 2017 14:10 delete

Saya download dari punya mas iqbal folder aiml, tapi tetep ga bisa,.. dan ga aada kernel.py

Reply
avatar
07 Disember, 2017 14:20 delete

Problemnya seperti ini
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
= RESTART: C:/Users/Effendi/AppData/Local/Programs/Python/Python36-32/cv.py =
Traceback (most recent call last):
File "C:/Users/Effendi/AppData/Local/Programs/Python/Python36-32/cv.py", line 3, in
bot = aiml.Kernel()
File "C:\Users\Effendi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\aiml\Kernel.py", line 35, in __init__
self._brain = PatternMgr()
File "C:\Users\Effendi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\aiml\PatternMgr.py", line 26, in __init__
self._whitespaceRE = re.compile("\s+", re.LOCALE | re.UNICODE)
File "C:\Users\Effendi\AppData\Local\Programs\Python\Python36-32\lib\re.py", line 233, in compile
return _compile(pattern, flags)
File "C:\Users\Effendi\AppData\Local\Programs\Python\Python36-32\lib\re.py", line 301, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\Users\Effendi\AppData\Local\Programs\Python\Python36-32\lib\sre_compile.py", line 562, in compile
p = sre_parse.parse(p, flags)
File "C:\Users\Effendi\AppData\Local\Programs\Python\Python36-32\lib\sre_parse.py", line 865, in parse
p.pattern.flags = fix_flags(str, p.pattern.flags)
File "C:\Users\Effendi\AppData\Local\Programs\Python\Python36-32\lib\sre_parse.py", line 832, in fix_flags
raise ValueError("cannot use LOCALE flag with a str pattern")
ValueError: cannot use LOCALE flag with a str pattern
>>>

Reply
avatar
12 Disember, 2017 02:02 delete

Kalau begitu silahkan sobat tambah manual script Kernel.py kedalam folder aiml. Kernel.py => https://github.com/weddige/pyaiml3/blob/master/aiml/Kernel.py

Reply
avatar
14 Disember, 2017 16:34 delete

Wah keren, kalau bisa dibuat bersuara.
Apakah jenis suara nya bisa kita pilih juga ?
-----------------------------------
Qiscus

Reply
avatar
01 Januari, 2018 20:28 delete

Bisa aja sob, tapi terbatas hanya yang dibawa oleh software e-speaknya sendiri, sobat bisa googling lagi untuk mengubah suara pada software e-speaknya :)

Reply
avatar
05 Januari, 2018 19:38 delete

Kalau saya menngunakan linux. cara nya ga terlalu susah. hanya dengan mengetik apt-get install python-aiml

Reply
avatar
19 Januari, 2018 10:07 delete

terima kasih...., dengan susah payah akhirnya jadi juga

Reply
avatar
19 Januari, 2018 21:47 delete

Mantap :) Keep up the spirit sob (y)

Reply
avatar
30 Januari, 2018 09:10 delete

mohon bantunaya download aimlnya dimana ya sob ?

Reply
avatar
31 Januari, 2018 21:45 delete

Disini sob => http://riffhold.com/2Y6Q

Reply
avatar
28 April, 2018 21:31 delete

apakah hasil akhirnya bisa menjadi file .exe ?

Reply
avatar
06 Mei, 2018 11:23 delete

coba dibuat versi video nya juga mas ikbal buat yang baru belajar biar bisa lebih paham dengan cepat..hehe

Semangattt....
#Happy_Coding ^_^

Reply
avatar
18 Mei, 2018 13:37 delete

Kalo boleh Tau IDE nya pake apa it ya ?

Reply
avatar
14 Jun, 2018 21:11 delete

PyCharm community edition sob :D

Reply
avatar
03 Ogos, 2018 16:47 delete

Kok nggak bisa sih mas

Reply
avatar
05 Ogos, 2018 20:10 delete

Loading test.aiml...done (0.07 seconds)
Traceback (most recent call last):
File "C:/Users/asus/PycharmProjects/belajar AIML/tampilan.py", line 24, in
masukan.bind("", suara)
File "C:\Users\asus\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1248, in bind
return self._bind(('bind', self._w), sequence, func, add)
File "C:\Users\asus\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1203, in _bind
self.tk.call(what + (sequence, cmd))
_tkinter.TclError: no events specified in binding

solusinya gmna ya?

Reply
avatar
16 Mac, 2019 18:59 delete

Coba ah, sapa tau bisa haha

Reply
avatar
16 Jun, 2019 22:13 delete

waduh terlalu pusing saya,coba dari awal banget tutorialnya,dari cara instal pyAiml 3 sampai di mana saya bisa tulis code nya.

Reply
avatar
25 Jun, 2019 08:19 delete Ulasan ini telah dialihkan keluar oleh pengarang.
avatar
25 Jun, 2019 11:07 delete

Syntaxerror, gimana nih, padahal dah persis, tolong bantuannya, soalnya pemula😅

Reply
avatar
26 Julai, 2019 23:32 delete

Wah, sangat membantu ga sengaja nemuin ni blog. Saya juga pemula gan dan Lagi buat Project kecil juga ini. Salam kenal ya./HappyCoding

Reply
avatar
31 Julai, 2019 16:11 delete

Saya bingung sama istilahnya bantuin dong mas :(

Reply
avatar
23 November, 2019 15:00 delete

Bagi source codenya dong bro

Reply
avatar
04 Jun, 2020 19:30 delete

Mantap nih, coba dulu gan

Reply
avatar
20 Ogos, 2021 15:18 delete

maaf gan itu link untuk Modul ini hanya tersedia untuk Python 2 jika diinstall menggunakan PIP, oleh karena itu unutk mendapatkan PyAIML 3 ko gak bisa ya

Reply
avatar
03 Februari, 2022 19:05 delete

Halo mas izin bertanya, di python sendiri ada ga ya fitur kaya tag Srai di aiml. jadi tidak perlu banyak baris kode

Reply
avatar
26 November, 2023 09:25 delete

Bagaimana caranya agar bisa di aplikasikan seperti ke helmet ironman itu. Setelah programnya di buat dari segi tampilan dan llnnya.

Reply
avatar

Visitor baik, selalu tinggalkan jejak.
Silahkan komen yang relevan & tidak berlebihan, tidak berbau SARA & Pornografi, tidak mengandung promosi.
^ _ ^ Happy Blogging !