progrez.cloud

(Journey To Get Into LLM) Night 2: Now, Make It A Bot

10 Desember 2024

# Visualize It


Setelah sebelumnya berhasil berinteraksi dengan Model LLM via Ollama, saatnya kita bikin lebih menarik.


Yang kita lakukan sebelumnya adalah membuat sebuah program python sederhana yang berinteraksi dengan ollama menggunakan Ollama Rest API.



Sebelumnya kita sebagai user perlu ngelakuin encode message yang ingin kita kirim ke dalam bentuk raw HTTP Request secara manual lalu dikirim ke service yang kita buat, dan selanjutnya diteruskan ke ollama.


Cara ini sangat amat tidak user-friendly, tentu saja. Jadi yang akan kita lakukan selanjutnya adalah membuatnya menjadi lebih mudah. Kita akan membuat sebuah chatbot!


# BotFather As Always


Jadi, kali ini aku akan membuat AI kita menjadi sebuah Bot Telegram. Kenapa Telegram? ya karena mudah dan gratis, dong!


Pertama kita perlu membuat botnya terlebih dahulu dengan bantuan 'BotFather'. Setelah itu, kita modifikasi kode sebelumnya menjadi seperti berikut (dengan bantuan AI juga tentu saja).


 
import logging
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, ContextTypes
import os, json, requests

# Token Bot Telegram
TELEGRAM_TOKEN = "TOKEN"

CONVERSATION_FILE = "conversation2.json"

# Muat riwayat dari file atau buat yang baru
def load_conversation(history_file):
  if os.path.exists(history_file):
    with open(history_file, "r") as file:
      return json.load(file)
  return [
    {
     "role": "system",
     "content": "Anda adalah chatbot yang membantu programmer."
    },
  ]

# Fungsi split string
def split_string(string, n):
  return [string[i:i+n] for i in range(0, len(string), n)]

conversation_history = load_conversation(CONVERSATION_FILE)

# Simpan riwayat ke file
def save_conversation(conversation):
  with open(CONVERSATION_FILE, "w") as file:
    json.dump(conversation, file, indent=4)

# Fungsi untuk menghubungkan ke LLM API
def get_llm_response(conversation):
  ollama_service = "http://localhost:11434"
  try:
    data = {
     "model": "llama3.2",
     "messages": conversation,
     "stream": False
    }

    response = requests.post(f"{ollama_service}/api/chat", json=data)

    if response.status_code == 200:
      return response.json()
    else:
      return f"Error {response.status_code}: {response.text}"
  except Exception as e:
    return f"Error: {e}"

# Fungsi untuk menangani pesan pengguna
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
  user_message = update.message.text

  conversation_history.append({"role": "user", "content": user_message})

  llm_response = get_llm_response(conversation_history)

  message = llm_response['message']

  # Simpan respons ke riwayat
  conversation_history.append(message)

  max_length = 4096
  messages = split_string(message['content'], max_length)

  save_conversation(conversation_history)

  for msg in messages:
   await update.message.reply_text(msg)

# Fungsi start command
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
  await update.message.reply_text("Halo! Kirim pesan apa pun untuk mulai berbicara.")

# Konfigurasi logging
logging.basicConfig(level=logging.INFO)

# Inisialisasi aplikasi
app = ApplicationBuilder().token(TELEGRAM_TOKEN).build()

# Tambahkan handler
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))

# Jalankan bot
if __name__ == "__main__":
  print("Bot berjalan...")
  app.run_polling()


# Boom, JatiAI...


JatiAI, itu adalah nama yang kuberikan pada chatbot AI ku satu ini, tak ada alasan yang menarik, hanya saja saat ngoding membuat bot ini aku sedang mendengar lagu 'Sudah Jangan ke Jatinangor' dari The Panas Dalam Band. Band yang unik dengan lagu-lagu yang keren, disarankan untuk teman-teman dengar deh, pasti nagih...


Long story short chatbot AI nya jadi, dan seperti inilah penampakannya.





Keren gk sih, soalnya dia bisa kita atur menjadi karakter tertentu, gitu (kaya orang DID gk sih), wkwk...


# Hallucination


Walaupun hasilnya gk sehebat GPT-4o mini (model yang dipake di ChatGPT gratisan), karena tingkat hallucination-nya tinggi banget, tapi ya it's okay lah ya.


Namun yang perlu diingat, GPT-4o sekalipun tetap ada hallucination effect nya, ya guys ya...


to be continued...