Membuat Telegram Bot memakai API ChatGPT di AWS Lambda

Saat ini OpenAI sudah meluncurkan API ChatGPT resmi. Di tulisan ini saya akan memandu bagaimana membuat ChatBot telegram dengan API ChatGPT, dan bagaimana menghosting ini di AWS Lambda. Dengan AWS Lamba, kita bisa menghosting bot telegram secara gratis (sampai setidaknya ratusan ribu pesan per bulan).

Untuk apa menghosting bot sendiri? bukankah sudah ada banyak yang menyediakan gratis di telegram dan WhatsApp? Apakah Anda pernah bertanya: siapa pemilik botnya? apa kebijakan privasi datanya? apakah chat Anda akan direkam selamanya? Sementara versi ChatGPT gratis sekarang sering down ketika dibutuhkan (atau error di tengah percakapan).

Saat ini OpenAI sudah menyatakan bahwa API ChatGPT tidak akan menggunakan data yang kita kirimkan untuk melatih sistem mereka, dan data akan dihapus dalam sebulan. Saya percaya OpenAI bukan karena mereka pasti bisa dipercaya, tapi karena jika mereka tidak patuh, bisa kena denda yang sangat besar. Dengan mengakses API ChatGPT langsung, saya yakin yang memegang data hanya saya dan OpenAI, bukan pihak lain.

Selain itu kita bisa meng-customize bot kita dengan kepribadian sesuai yang kita mau. Bahkan kita bisa membuat banyak bot dengan kepribadian masing-masing. Kita juga bisa menghubungkan output ChatGPT dengan program kita untuk melakukan aksi tertentu.

Contoh bot telegram

Sebelum API resmi diluncurkan, sudah ada yang berusaha membuat API ChatGPT dengan emulasi browser, tapi cara ini kurang stabil dan ChatGPT gratisan sering tidak tersedia (tidak reliable) dan kadang library perlu diupdate tiap kali ada perubahan di sisi OpenAI. Dengan API resmi, kita bisa mendapatkan jawaban dengan cepat dan API-nya tidak akan tiba-tiba berubah tanpa peringatan.

ChatGPT through the lens of The Dunning-Kruger effect

Harga API ChatGPT sangat murah, hanya 0.002 USD per 1000 token. Apa itu token? token adalah pembagian kata yang dilakukan untuk pemrosesan bahasa alami, untuk memahami token, mudahnya bisa langsung mencoba di URL ini. Untuk pemakaian pribadi, ratusan sampai ribuan pertanyaan bisa ditanyakan dengan biaya total puluhan ribu rupiah saja.

Memahami token dengan Tokenizer OpenAI

Sebagai catatan: harap bedakan ChatGPT+ (ChatGPT plus) dengan ChatGPT API. ChatGPT plus adalah aplikasi web dari OpenAI, dan dengan membayar 20 USD per bulan, kita boleh bertanya sebanyak apapun juga. ChatGPT+ ditujukan untuk dipakai user. ChatGPT API ditujukan untuk programmer yang ingin mengintegrasikan ChatGPT ke program mereka sendiri.

Tidak ada biaya bulanan untuk pemakaian API, jadi bayar sesuai pemakaian saja, dan untuk yang baru daftar saat ini akan mendapatkan kredit 5 USD (akan kadaluarsa dalam 3 bulan). Jadi untuk memakai API ChatGPT ini bisa dimulai dengan gratis (tanpa perlu kartu kredit). Sebagai catatan: dulu kredit yang diberikan waktu saya mendaftar adalah 18 USD, dan sekarang hanya 5 USD, mungkin saja di masa depan kredit gratis ini akan dikurangi atau dihapus, jadi sebaiknya buruan daftar sekarang. Update: ada teman yang masih mendapatkan 18 USD, dan ada yang 5 USD, walau resminya di website tertulis hanya akan mendapatkan 5 USD.

Di tutorial ini saya akan menggunakan Python. OpenAI secara resmi mendukung library dalam Python dan JavaScript (node), tapi ada banyak library juga tersedia untuk bahasa lain. Di berbagai contoh, saya akan menggunakan pertanyaan dan jawaban Bahasa Inggris, karena lebih hemat token dibandingkan jika menggunakan bahasa lain (silakan dicoba sendiri di URL tokenizer yang saya sebutkan sebelumnya).

API ChatGPT

Untuk memakai API ChatGPT (dan API lain milik OpenAI), pertama kita perlu membuat akun di sini. Setelah itu kita perlu membuat API-key. Di skrip-skrip berikutnya, saya asumsikan environment variable OPENAI_API_KEY sudah diset. Di Linux/macOS bisa dengan

export OPENAI_API_KEY=API_KEY_ANDA

dan di Windows bisa dengan set OPENAI_API_KEY=API_KEY_ANDA

Berikutnya install package openai terbaru dengan pip install -U openai

API ChatGPT sangat mudah dipakai untuk menjawab sebuah pertanyaan sederhana kita hanya perlu pemanggilan satu fungsi untuk memanggil API-nya. Contohnya seperti ini:

import openai
q = input("What is your question? ")
a = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=[
        {"role": "user", "content": q},
      ])
print("Q: ", q)
print("A: ", a["choices"][0]["message"]["content"])

Di sini saya hanya mencetak jawabannya saja dengan a["choices"][0]["message"]["content"], beberapa informasi seperti jumlah token yang dipakai bisa diakses juga. Output lengkap dari OpenAI seperti ini:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "\n\nChiang Mai is a city in northern Thailand.",
        "role": "assistant"
      }
    }
  ],
  "created": 1677940806,
  "id": "chatcmpl-6qNLKDVzM3pLbK8otB0OhqFTPkPU8",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 12,
    "prompt_tokens": 13,
    "total_tokens": 25
  }
}

Pertanyaan user akan perlu dimasukkan ke role “user” dan jawaban dari ChatGPT akan memiliki role “assistant”.

System

ChatGPT bisa memiliki “kepribadian”, ini bisa dinyatakan di role “system”. Contohnya:

  • You are a bot that will answer only with very short sentence
  • You are a bot that is very friendly to children and will explain your answer in a language that a 5-year-old can understand.

Potongan kode sebelumnya bisa ditambahi role “system” seperti ini:

      messages=[
        {"role": "system", "content": "You are a bot that is very friendly to children and will explain your answer in a language that a 5-year-old can understand."},
        {"role": "user", "content": q},
      ])

Bandingkan jawaban untuk pertanyaan “why is the sky blue“, jika role “system” diset dan tidak diset. Isi teks untuk role “system” ini bisa sangat rumit, misalnya seperti yang dilakukan orang ini untuk membuat home assistant.

Role “system” ini adalah cara kita “memprogram” kepribadian dan kemampuan ChatGPT. Misalnya untuk ChatBot, saya bisa menggunakan ini: You are a helpful assistant in a group family chat. Your output will be in Markdown format. Supaya Chatbotnya sopan, tapi bisa memberi jawaban dalam format Markdown yang dimengerti Telegram (dengan output markdown kode program bisa kelihatan bagus).

Contoh Output Chat yang mengandung kode program

Kita bisa minta output dalam berbagai format, misalnya bisa minta agar output chat berbentuk JSON untuk diproses oleh program kita. Kita juga bisa meminta output dalam format SSML (Speech Synthesis Markup Language) agar bisa masuk ke API text to speech.

Sebenarnya ada juga opsi menggunakan API yang outputnya adalah streaming, seperti ketika memakai aplikasi web ChatGPT. Artinya output tidak langsung dalam satu teks panjang, tapi akan langsung dikirim ketika sistem sudah berhasil menghasilkan sebagian output. Untuk output text to speech, streaming ini akan bagus, tapi untuk keperluan chatbot tidak terlalu berguna.

Percakapan

Untuk membentuk percakapan, kita perlu mengirimkan pertanyaan dan jawaban sebelumnya ke ChatGPT. Jadi ChatGPT bisa punya konteks percakapan, dan kita bisa bertanya secara natural, contohnya:

  • Where is Borobudur?
  • how do i get there from Chiang Mai? (there di sini maksudnya bagaimana caranya ke Borobudur mengacu pertanyaan sebelumnya)

Kita perlu mengirimkan juga jawaban ChatGPT, karena kadang pertanyaan kita tergantung dari jawabannya, misalnya

  • What is the one food that I must try in Chiang Mai?
  • Is it spicy? (di sini “it” bergantung pada jawaban apa yang diberikan oleh ChatGPT)

Tapi kalau tanya jawabnya sudah terlalu panjang, maka biayanya akan terus naik, dan kita akan memasuki jumlah batas token (4096 token). Trik yang bisa dipakai adalah seperti ini: minta ChatGPT meringkas percakapan sebelumnya, dan gantikan semua pertanyaan sebelumnya dengan ringkasannya.

Contohnya chat seperti ini:

  • role: system. Content “You are a helpful assistant in a group family chat. Your output will be in Markdown format.”
  • role: user. Content: “First Question”
  • role: assistant. Content: “First Answer”
  • role: user. Content: “Second Question”
  • role: assistant. Content: “Second Answer”
  • role: user. Content: “summarize the above conversation” (akhirnya saya ubah jadi “summarize convo”, lebih singkat 1 token)
  • role: assistant. Content: “Summary of the conversation”

Lalu kita bisa menghapus tanya jawab di atas, dan menggantikan sistemnya seperti ini:

role: system. Content “You are a helpful assistant in a group family chat. Your output will be in Markdown format. The conversation so far: ” diikuti dengan output dari ringkasan ChatGPT.

Bot telegram sederhana

Bot telegram sederhana bisa dibuat dengan library Python telegram-bot. Atau bisa juga kita program sendiri langsung memakai API telegram seperti pernah saya jelaskan di artikel saya 7 tahun yang lalu. Langkah pertama adalah mendaftarkan Bot di Telegram. Langkah ini masih sama sejak bertahun-tahun yang lalu, jadi tutorial artikel lama saya masih bisa dipakai untuk bagian mendapatkan token bot.

Dengan library telegram-bot kita mendengarkan pesan dengan:

chat_handler = MessageHandler(filters.TEXT & (~filters.COMMAND), chat)
application.add_handler(chat_handler)

Dan di dalam fungsi itu kita tinggal memanggil ChatGPT. Agar bisa menangani banyak user, saya membuat kelas ChatSystem seperti ini, saya edit agar singkat, source code lengkap bisa dilihat di Github.

class ChatSystem:

  def __init__(self, chatid):
    self.chatid = chatid
    self.messages = []
    self.load_chat()

  def load_chat(self):
    # load the chat system from database...

  def clear_chat(self):
    # clear the chat system

  def save_chat(self):
    # save the chat system to database...

  def add_user_message(self, text):
    self.messages.append({"role": "user", "content": text})
  
  def prune_messages(self):
    # ask the AI to summarize the conversation
    self.messages.append({"role": "user", "content": "summarize the above conversation"})
    a = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=self.messages
    )
    # get the summary
    summary = a["choices"][0]["message"]["content"]
    print("Summary: " + summary)
    # remove all messages except the summary
    self.messages = []

    self.messages.append({"role": "system", "content": ROLE + "\nThe conversation so far: " + summary})
    self.save_chat()

  def get_response(self, text):    
    if len(self.messages) > LIMIT_MESSAGE_FOR_SUMMARY:
      print("Pruning messages", self.messages)
      self.prune_messages()   

    self.messages.append({"role": "user", "content": text})    
    a  = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=self.messages
    )
    resp =  a["choices"][0]["message"]["content"]
    
    self.messages.append({"role": "assistant", "content": resp})
    self.save_chat()
    return (resp, tokens_str)

Kita ingin menangani chat dari banyak user, jadi mudahnya gunakan global dictionary:

chat_systems = {}

Lalu untuk membuat balasan pesan:

  chat_id = update.effective_chat.id
  if chat_id not in chat_systems:
    chat_systems[chat_id] = ChatSystem(chat_id)
  chat_system = chat_systems[chat_id]
  response = chat_system.get_response(update.message.text)
  await context.bot.send_message(chat_id=update.effective_chat.id, text=response, parse_mode=ParseMode.MARKDOWN)

Berikut ini adalah contoh bot yang sudah jadi. Perlu dicatat bahwa Bot ini super sederhana, tidak menangani berbagai error, dan sejujurnya kebanyakan kodenya ditulis oleh Github Copilot:

https://gist.github.com/yohanes/002333b987471966932fcdf358a02ceb

Ada beberapa yang perlu diset di environment:

  • OPENAI_API_KEY untuk akses OpenAI
  • BOT_TOKEN untuk mengakses telegram
  • ALLOWED_USERS yang berisi daftar username yang dibolehkan memakai bot, dipisahkan dengan koma, misalnya: user1,user2,user3.

Lalu jalankan skripnya langsung:

python3 chat.py

Selama tidak distop dan komputer masih menyala, makan botnya akan berjalan. Nanti akan saya jelaskan bagaimana memakai hosting gratisan agar bot ini bisa tetap berjalan dengan gratis (hanya membayar biaya API ChatGPT).

Walaupun sederhana, bot ini sudah cukup untuk keperluan keluarga saya:

  • thread percakapan disimpan per chat id, jadi apa yang ditanyakan anggota keluarga lain saya tidak tercampur dengan pertanyaan saya
  • sudah ada filter berdasarkan username agar tidak bisa diakses semua orang, agar tagihan tidak membengkak. Filter ini bisa juga diganti berdasarkan nomor telepon atau id numerik user telegram.
  • menyimpan status chat saat ini di database Sqlite, jadi jika bot direstart, percakapan bisa diteruskan
  • menampilkan cost total dari pertanyaan dan jawaban (sebagai pesan terpisah, jadi jika ingin memforward jawaban AI bisa tidak dikirim)

Hosting Gratisan

Ada banyak alternatif tempat hosting gratisan (atau murah) untuk menjalankan bot telegram ini. Saya pernah menuliskannya di tulisan saya: Berbagai cara murah hosting aplikasi web. Jika kita memilih hosting yang bisa menjalankan langsung Python maka kodenya tidak perlu dimodifikasi. Contohnya adalah hosting di Oracle yang menyediakan Virtual Machine gratisan.

Tentu saja bot ini juga bisa dijalankan di komputer rumah sendiri, di single board computer, atau bahkan sebagai proses background di Android. Dalam kasus ini saya ingin menunjukkan bagaimana menghosting ini agar bisa tetap berjalan “selamanya” (syarat dan ketentuan berlaku).

AWS Lambda

Cara hosting bot telegram yang akan saya bahasa adalah dengan AWS Lambda. AWS Lambda adalah layanan dari Amazon untuk menjalankan sebuah fungsi. Dengan AWS Lambda, kita tidak perlu memikirkan mengenai upgrade server, mengurus firewall server, dsb (istilahnya “serverless” karena kita tidak mengurusi servernya).

Dulu untuk mengakses fungsi lambda melalui endpoint HTTP/HTTPS kita perlu membayar ekstra untuk API gateway (hanya gratis terbatas 12 bulan pertama), Sekarang ada fitur lambda URL yang gratis. Jadi teorinya (jika API AWS tidak berubah), kita bisa menghosting bot ini “selamanya” secara gratis, hanya perlu membayar biaya API ChatGPT.

Kita tidak bisa menggunakan database SQLite di Lambda (akan hilang ketika lambda direstart di container lain), jadi untuk menyimpan data dengan gratis kita perlu memakai DynamoDB yang gratis selamanya (kapasitas 25 GB). Untungnya API DynamoDB yang terbaru sudah cukup mudah dipakai (yang lama agak sulit). Sebenarnya ada juga tersedia MySQL dan Postgres (RDS) gratis di AWS tapi hanya 12 bulan pertama saja.

Penyimpanan dan Komputasi Gratis

Framework/tool serverless (sls)

Memakai AWS cukup rumit. Membuat fungsi lambda sendiri, mengkonfigurasi IAM, mengkonfigurasi DynamoDB, dsb secara manual ataupun dengan Command Line aws akan butuh waktu cukup lama. Untungnya saat ini sudah ada framework/tool bernama serverless, kita bisa menggunakan file yaml sederhana untuk mengkonfigurasi banyak hal.

Serverless ini bisa dipakai juga untuk berbagai cloud provider lain (Azure, GCP, dsb), tidak harus AWS. Tapi karena saya akan mencontohkan memakai DynamoDB, ini spesifik AWS dan tidak tersedia di Cloud Provider lain (harus diganti dengan sesuatu yang sejenis di Cloud provider lain).

Serverless ini ditulis dalam Javascript dan bisa diinstall dengan npm:

npm install -g serverless

Sebelum meneruskan: daftarkan diri dulu ke AWS, dan dapatkan API Key untuk dapat dipakai di bagian berikutnya. Untuk langkah berikutnya, diasumsikan bahwa AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY sudah diset.

Jika ingin melihat kode akhir dan menjalankannya langsung, silakan clone repository ini:

https://github.com/yohanes/chatgpt-telegram-bot

Siapkan file .env dengan isi sesuai contoh dari env.example. Berikutnya tinggal:

sls deploy

Tunggu beberapa menit sampai selesai, dan akan muncul URL, misalnya seperti ini:

https://URLRUMIT.lambda-url.ap-southeast-1.on.aws/

Gunakan Curl (atau web broser) untuk mengeset endpoint Webhook. Ini untuk memberitahu telegram agar ketika ada pesan masuk, maka panggil URL berikut.

curl https://api.telegram.org/botTOKENBOT/setWebhook?url=https://URL-OUTPUT-SERVERLESS.lambda-url.ap-southeast-1.on.aws/

Setelah itu seharusnya bot sudah bisa merespon sekarang. Jika tidak ada respon, bisa dilihat lognya dengan:

serverless logs -f chat -t

dan

serverless logs -f responder -t

Membuat Lambda Function

Kita bisa menggunakan wizard dari sls untuk mulai membuat projek baru. Defaultnya tidak ada template untuk menggunakan Function URL, jadi coba saja mulai dengan tempkate HTTP API (nanti serverless.yaml bisa diedit).

Ada beberapa hal yang disetup di bagian awal serverless.yaml

  • Nama service dan versi framework
  • useDotEnv agar kita bisa menaruh konfigurasi environment di dalam file .env
  • Kita memakai provider AWS, dan perlu mengeset IAM role untuk akses dynamodb
  • Kita ingin bisa memanggil fungsi lambda lain (akan dijelaskan kenapa ini perlu)
  • kita ingin mengambil TELEGRAM_TOKEN, ALLOWED_USERS dan OPENAI_API_KEY dari environment agar tidak dihardcode di program
service: chatgpt-telegram
frameworkVersion: '3'
useDotenv: true

provider:
  name: aws
  runtime: python3.9
  region: ap-southeast-1
  iam:
    role:
      statements:
      - Effect: Allow
        Action:
          - dynamodb:DescribeTable
          - dynamodb:Query
          - dynamodb:Scan
          - dynamodb:GetItem
          - dynamodb:PutItem
          - dynamodb:UpdateItem
          - dynamodb:DeleteItem
        Resource:
          - { "Fn::GetAtt": [chats, Arn] }
      - Effect: Allow
        Action:
          - lambda:InvokeFunction
        Resource: "*"
  environment:
    TABLE_NAME:
      Ref: chats
    TELEGRAM_TOKEN: ${env:TELEGRAM_TOKEN}
    ALLOWED_USERS: ${env:ALLOWED_USERS}
    OPENAI_API_KEY: ${env:OPENAI_API_KEY}

Kita bisa menerima dan memproses langsung request HTTPS di dalam fungsi lambda, tapi jika fungsi lambda kita memakai HTTP gateway, ada time limit 30 detik. Tanpa gateway, timeout untuk fungsi lambda adalah 15 menit. Dalam kasus ini kita akan memakai Function URL jadi timeoutnya 15 menit. Untuk persiapan andaikan akan diubah di masa depan, maka saya akan menggunakan 2 fungsi:

  • Satu fungsi hanya menerima POST dari server Telegram lalu menjalankan fungsi kedua. Jika fungsi ini dipanggil dengan Function URL, maka waktunya adalah maksimum 15 menit, jika memakai HTTP Gateway maksimum hanya 30 detik
  • Fungsi kedua ini karena dipanggil dari Lambda, waktunya pasti selalu 15 menit batasnya karena dipanggil dari fungsi lambda lain.

Jika Google atau perusahaan lain punya API seperti ChatGPT di masa depan, saya akan bisa memanggil dua fungsi dari fungsi utama: fungsi ChatGPT dan fungsi Google dan keduanya bisa berjalan bersamaan.

Bagian berikutnya adalah dua fungsi yang akan kita buat, perhatikan di fungsi chat ada setting: url: true. Artinya ini adalah fungsi yang memiliki URL.

functions:
  chat:
    handler: handler.chat
    timeout: 30
    url: true
  responder:
    handler: handler.responder
    timeout: 300

Jika ingin langsung memproses pesan di satu fungsi saja (di fungsi chat), tanpa memanggil fungsi yang lain (responder), tinggal ubah bagian ini (uncomment process_chat dan comment dua baris setelahnya).

                # process_chat(chatid, text)
                lambda_client = boto3.client('lambda')
                lambda_client.invoke(
                        FunctionName="chatgpt-telegram-dev-responder",
                        InvocationType='Event',
                        Payload=json.dumps(message)
                    )

Dan terakhir adalah definisi tabel DynamoDB. Perhatikan ada batasan ReadCapacityUnits dan WriteCapacityUnits untuk DyanamoDB gratisan (batasnya 25, jadi saya set saja 10).

resources:
  Resources:
    chats:
      Type: AWS::DynamoDB::Table
      Properties:
        AttributeDefinitions:
          - AttributeName: chatid 
            AttributeType: N
        KeySchema:
          - AttributeName: chatid
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 10
          WriteCapacityUnits: 10

Lalu agar berbagai modul Python bisa kita pakai, kita perlu memakai plugin serverless-python-requirements. Ini bisa dilakkan dengan

sls plugin install -n serverless-python-requirements

Atau bisa juga manual dengan mengedit serverless.yaml dan tambahkan:

plugins:
  - serverless-python-requirements

Dengan plugin ini kita hanya perlu memasukkan modul yang kita butuhkan dalam requirements.txt. Tanpa plugin ini kita perlu mempackage sendiri berbagai requirement Python. Karena kita tidak memakai fitur advanced milik telegram-bot, saya putuskan untuk memproses message langsung saja, jadi requirementsnya hanya 3:

  • requests untuk mengirimkan pesan balasan ke telegram
  • boto3 untuk mengakses DynamoDB (dan menjalankan fungsi lambda lain)
  • openai untuk mengakses AIP OpenAI
  • tiktoken untuk menghitung jumlah token

Deployment, debugging

Dengan framework serverless, kita cukup mengetikkan: serverless deploy (atau lebih singkat lagi: sls deploy) dan otomatis semua akan dikonfigurasi. Lalu akan diberitahukan URL apa untuk mengakses fungsinya.

Proses deploy ini cukup lama, bisa 2-3 menit. Setelah deployment pertama, jika hanya ngin mengupdate satu fungsi saja, gunakan sls deploy -f namafungsi. Ini akan lebih cepat, tapi tetap butuh sekitar 20-30 detik.

Jika ingin melihat output fungsi lambda, gunakan sls logs -f namafungsi -t . Dengan memakai -t maka log akan diupdate periodik. Logging ini akan butuh biaya jika ukuran log lebih dari 5GB, jadi sebaiknya jika semua sudah normal, fungsi logging bisa dimatikan

Catatan

API telegram memiliki keterbatasan, misalnya format pesan HTML tidak mendukung <p> padahal jika saya minta ChatGPT mengeluarkan output HTML, maka akan mengeluarkan <p>. Jika ada error (misalnya ada tag HTML yang tidak didukung di mode HTML), maka pesan tidak terkirim. Akhirnya saya memilih mode Markdown (Telegram mendukung juga MarkDownV2, tapi output ChatGPT tidak selalu patuh versi ini).

Agar mengusahakan agar pesan selalu terkirim: jika gagal kirim dalam format Markdown, saya akan mengirimkan ulang dalam mode teks. Ini saya berasumsi bahwa gagal kirim ini karena ada format yang ditolak oleh server Telegram.

Saat ini ada batasan 4096 token total message. Saat ini saya akan memotong message dengan menghitung token memakai library tiktoken. Batasannya adalah 2000 token sebelum diringkas, ini bisa diubah di source code (tidak dikonfigurasi dari environment).

Saya menampilkan jumlah token dan harga agar bisa mendapatkan feel mengenai jumlah token dan uang yang saya habiskan sejauh ini. Dari percobaan saat ini: AI ajaib ini sangat murah harganya. Summary ini hanya untuk tiap percakapan, tidak untuk keseluruhan user.

Perhatikan juga berbagai batasan ChatGPT ini, ada banyak hal yang tidak bisa dilakukan (misalnya kemampuan matematikanya kurang bagus). Kita kadang perlu menyambungkan output ChatGPT ke sistem lain misalnya dengan LangChain. Di contoh LangChain bisa dilihat bahwa kadang diperlukan banyak aksi untuk menjawab satu pertanyaan, misalnya melakukan Googling untuk mendapatkan fakta terbaru, mengekstrak fakta, melakukan komputasi matematika.

Penutup

Banyak hal menarik bisa kita lakukan dengan API ChatGPT ini. Hal-hal yang tadinya perlu diprogram dengan algoritma, kini bisa diprogram dengan bahasa natural. Contoh yang bisa kita lakukan dengan API saat ini:

  • membuat tool penerjemah yang pintar (bisa kita minta agar membuat versi terjemahan formal atau yang ringan)
  • membuat tool untuk meringkas percakapan email
  • membuat tool untuk mengajari anak topik tertentu

Masih ada beberapa API dari OpenAI yang juga bisa digabungkan:

  • Whisper untuk mengubah suara menjadi teks
  • DALL-E untuk membuat gambar dari deskripsi
  • Embedding untuk membuat vektor embedding (misalnya bisa dipakai untuk mengindeks dokumen)

Bagian embedding ini sangat menarik karena dapat digunakan untuk agar ChatGPT bisa mengekstrak jawaban dari dokumen, untuk hal-hal yang belum diketahui olehnya. Misalnya kita bisa memberikan artikel tentang seseorang, lalu ChatGPT bisa menjawab berbagai pertanyaan mengenai orang itu. Contoh pemakaiannya bisa dilihat di sini.

Untuk bisa menyaingi OpenAI saat ini dibutuhkan biaya yang besar, jadi sekarang ini sebelum bisa menyaingi teknologi mereka, setidaknya kita bisa belajar membuat tool berbasis AI. Di masa depan mungkin kita akan bisa menghosting sendiri Large Language Model (LLM) di server kita.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *