Proyek AI Pertama: Membuat Chatbot Sederhana dengan Python π¬π€
Setelah belajar teori AI, saatnya praktek! Chatbot adalah project AI yang sempurna untuk pemulaβnggak terlalu kompleks tapi bikin paham konsep NLP dan conversational AI. Yuk, bikin chatbot pertama kamu!
Level 1: Rule-Based Chatbot (Mudah)
Cara paling sederhana: pattern matching dengan respons yang sudah ditentukan.
Setup
pip install nltk
Kode
import re
import random
class SimpleChatbot:
def __init__(self):
self.patterns = {
r'\b(halo|hi|hey)\b': [
"Halo! Ada yang bisa saya bantu?",
"Hi! Senang bertemu denganmu!",
"Hey! Mau ngobrol tentang apa?"
],
r'\b(nama|namamu)\b': [
"Saya adalah BotPintar, asisten virtual kamu!",
"Panggil saja Bot. Saya di sini untuk membantu!"
],
r'\b(apa kabar|how are you)\b': [
"Saya baik-baik saja! Kamu gimana?",
"Luar biasa! Siap membantu kamu hari ini."
],
r'\b(bantu|help|bantuan)\b': [
"Saya bisa jawab pertanyaan dasar atau ngobrol santai. Coba tanya!",
"Tentu! Ada topik spesifik yang ingin dibahas?"
],
r'\b(terima kasih|thanks|makasih)\b': [
"Sama-sama! Senang bisa membantu.",
"Dengan senang hati! Ada lagi yang bisa dibantu?"
],
r'\b(dadah|bye|selamat tinggal)\b': [
"Dadah! Sampai jumpa lagi!",
"Selamat tinggal! Semoga harimu menyenangkan!"
]
}
self.fallback = [
"Maaf, saya belum mengerti. Bisa dijelaskan dengan cara lain?",
"Hmm, bisa ulangi dengan kata-kata berbeda?",
"Saya masih belajar. Coba tanya yang lebih spesifik!"
]
def get_response(self, user_input):
user_input = user_input.lower()
for pattern, responses in self.patterns.items():
if re.search(pattern, user_input):
return random.choice(responses)
return random.choice(self.fallback)
# Jalankan chatbot
bot = SimpleChatbot()
print("π€ BotPintar: Halo! Saya BotPintar. Ketik 'exit' untuk keluar.")
while True:
user_input = input("\nπ€ Kamu: ")
if user_input.lower() in ['exit', 'quit', 'keluar']:
print("π€ BotPintar: Dadah! π")
break
response = bot.get_response(user_input)
print(f"π€ BotPintar: {response}")
Contoh Percakapan
π€ BotPintar: Halo! Saya BotPintar. Ketik 'exit' untuk keluar.
π€ Kamu: halo
π€ BotPintar: Hey! Mau ngobrol tentang apa?
π€ Kamu: namamu siapa?
π€ BotPintar: Panggil saja Bot. Saya di sini untuk membantu!
π€ Kamu: terima kasih ya
π€ BotPintar: Sama-sama! Senang bisa membantu.
Level 2: Intent-Based Chatbot (Menengah)
Menggunakan NLP untuk mengenali βintentβ (maksud) di balik pesan.
Setup
pip install scikit-learn
Kode
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
import numpy as np
class IntentChatbot:
def __init__(self):
# Training data: (text, intent)
training_data = [
("halo", "greeting"),
("hi", "greeting"),
("selamat pagi", "greeting"),
("hey there", "greeting"),
("terima kasih", "thanks"),
("thanks", "thanks"),
("makasih banyak", "thanks"),
("selamat tinggal", "goodbye"),
("dadah", "goodbye"),
("sampai jumpa", "goodbye"),
("bantu saya", "help"),
("aku butuh bantuan", "help"),
("tolong", "help"),
]
texts, intents = zip(*training_data)
# Create pipeline
self.pipeline = Pipeline([
('tfidf', TfidfVectorizer()),
('classifier', MultinomialNB())
])
# Train
self.pipeline.fit(texts, intents)
# Response mapping
self.responses = {
'greeting': ["Halo!", "Hi!", "Selamat datang!"],
'thanks': ["Sama-sama!", "Dengan senang hati!", "Tidak masalah!"],
'goodbye': ["Dadah!", "Sampai jumpa!", "Semoga harimu menyenangkan!"],
'help': ["Saya siap membantu!", "Ada apa? Ceritakan masalahmu."]
}
def get_response(self, user_input):
intent = self.pipeline.predict([user_input])[0]
confidence = np.max(self.pipeline.predict_proba([user_input]))
if confidence > 0.5 and intent in self.responses:
return random.choice(self.responses[intent])
else:
return "Maaf, saya belum mengerti. Bisa dijelaskan lebih spesifik?"
# Jalankan
bot = IntentChatbot()
print("π€ BotNLP: Halo! Saya chatbot pintar (v2). Ketik 'exit' untuk keluar.")
while True:
user_input = input("\nπ€ Kamu: ")
if user_input.lower() in ['exit', 'quit']:
break
response = bot.get_response(user_input)
print(f"π€ BotNLP: {response}")
Level 3: AI-Powered Chatbot (Advanced)
Menggunakan OpenAI API untuk respons yang natural dan kontekstual.
Setup
pip install openai
Kode
import openai
class AIChatbot:
def __init__(self, api_key):
openai.api_key = api_key
self.conversation_history = [
{"role": "system", "content": "Kamu adalah asisten AI yang ramah dan membantu. Jawab dalam Bahasa Indonesia yang santai."}
]
def get_response(self, user_input):
# Add user message
self.conversation_history.append(
{"role": "user", "content": user_input}
)
# Get response from GPT
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=self.conversation_history,
max_tokens=150,
temperature=0.7
)
assistant_message = response.choices[0].message.content
# Add to history
self.conversation_history.append(
{"role": "assistant", "content": assistant_message}
)
# Keep only last 10 messages to save tokens
if len(self.conversation_history) > 11:
self.conversation_history = [self.conversation_history[0]] + self.conversation_history[-10:]
return assistant_message
# Jalankan (ganti dengan API key kamu)
# bot = AIChatbot("your-api-key-here")
# print("π€ BotAI: Halo! Saya AI Assistant. Ketik 'exit' untuk keluar.")
#
# while True:
# user_input = input("\nπ€ Kamu: ")
# if user_input.lower() in ['exit', 'quit']:
# break
# response = bot.get_response(user_input)
# print(f"π€ BotAI: {response}")
Level 4: Chatbot dengan Web Interface
Bikin chatbot yang bisa diakses via browser menggunakan Flask.
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
bot = SimpleChatbot() # atau IntentChatbot()
@app.route('/')
def home():
return render_template('index.html')
@app.route('/chat', methods=['POST'])
def chat():
user_message = request.json['message']
response = bot.get_response(user_message)
return jsonify({'response': response})
if __name__ == '__main__':
app.run(debug=True)
HTML Sederhana (templates/index.html)
<!DOCTYPE html>
<html>
<head>
<title>Chatbot Saya</title>
<style>
body { font-family: Arial; max-width: 600px; margin: 50px auto; }
#chatbox { border: 1px solid #ccc; height: 400px; overflow-y: auto; padding: 20px; }
.user { color: blue; margin: 10px 0; }
.bot { color: green; margin: 10px 0; }
input { width: 80%; padding: 10px; }
button { padding: 10px 20px; }
</style>
</head>
<body>
<h1>π€ Chatbot Saya</h1>
<div id="chatbox"></div>
<input type="text" id="userInput" placeholder="Ketik pesan...">
<button onclick="sendMessage()">Kirim</button>
<script>
async function sendMessage() {
const input = document.getElementById('userInput');
const chatbox = document.getElementById('chatbox');
const message = input.value;
chatbox.innerHTML += `<div class="user">π€ ${message}</div>`;
input.value = '';
const response = await fetch('/chat', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({message: message})
});
const data = await response.json();
chatbox.innerHTML += `<div class="bot">π€ ${data.response}</div>`;
chatbox.scrollTop = chatbox.scrollHeight;
}
</script>
</body>
</html>
Tips Mengembangkan Chatbot
β Best Practices
- Mulai sederhana: Rule-based dulu, baru upgrade ke AI
- Logging: Simpan percakapan untuk analisis
- Fallback: Selalu siapkan respons untuk input yang tidak dikenali
- Personality: Beri chatbot karakter yang konsisten
- Testing: Uji dengan berbagai jenis input
π§ Improvement Ideas
- Tambahkan integrasi database untuk menyimpan history
- Gunakan sentiment analysis untuk deteksi emosi user
- Integrasi dengan WhatsApp API (Twilio)
- Voice input dengan speech-to-text
- Multi-language support
π Next Steps
- Pelajari Rasa atau Dialogflow untuk chatbot production
- Eksplor LangChain untuk chatbot dengan memory dan tools
- Coba Hugging Face Transformers untuk model open-source
Kesimpulan
Chatbot adalah gateway yang sempurna ke dunia AI development. Mulai dari yang sederhana (rule-based), naik level ke NLP-based, dan akhirnya ke AI-powered. Yang penting: start small, iterate often!
Challenge: Deploy chatbot Level 1 kamu ke PythonAnywhere atau Heroku, lalu share link-nya ke teman!
Artikel #20 (FINAL) dari seri Belajar AI. Sudah bikin chatbot? Share kodenya! π
Selamat! Kamu sudah menyelesaikan seri Belajar AI Level Pemula & Menengah. Terus eksplor dan praktek! π
Dibuat otomatis oleh Bibot π€