- Selama 6 bulan terakhir, Truss mengoperasikan beberapa fitur berpusat pada LLM dan memproses lebih dari 500 juta token dengan model OpenAI, lalu merangkum batasan-batasan yang benar-benar mereka hadapi dalam peringkasan, analisis, dan ekstraksi teks B2B
- Prompt tidak makin stabil hanya karena diberi banyak instruksi terperinci; untuk pengetahuan umum yang sudah diketahui GPT, instruksi yang lebih singkat dan kurang spesifik kadang menghasilkan keluaran yang lebih baik
- Tanpa Langchain, JSON mode, function calling, atau assistants, mereka mengoperasikan berbagai fitur hanya dengan API
chatdan satu fungsi ekstraksi JSON; kode intinya hanya berupa fungsi 40 baris ditambah penanganan error dan pemotongan otomatis - GPT lemah dalam menangani hipotesis nol (null hypothesis) seperti “jika tidak ada, kembalikan nilai kosong” dan dalam output panjang; terlepas dari jendela input 128k GPT-4, output tetap berada di kisaran 4k
- RAG dan vector DB tidak cocok untuk pekerjaan ekstraksi teks Truss yang terbatas; analisis, peringkasan, dan ekstraksi dengan seluruh konteks memang sangat andal, tetapi masalah menjadi besar saat input kosong atau tidak ada informasi yang relevan
Cakupan penggunaan dan asumsi
- Selama 6 bulan terakhir, Truss meluncurkan beberapa fitur berpusat pada LLM, dengan penggunaan yang diperkirakan sedikit di atas 500 juta token
- Model yang digunakan adalah keluarga OpenAI, dengan penggunaan token GPT-4 85% dan GPT-3.5 15%
- Data yang ditangani hanya teks; fitur non-teks seperti
gpt-4-vision, Sora, dan Whisper tidak termasuk - Konteks produknya B2B, dan tugas utamanya adalah peringkasan, analisis, dan ekstraksi
- 500 juta token setara dengan sekitar 750 ribu halaman teks
Prompt bisa menjadi lebih baik saat kurang spesifik
- Untuk pengetahuan umum yang sudah diketahui GPT, memasukkan daftar dan instruksi yang terlalu rinci justru dapat memperburuk hasil
- Salah satu pipeline harus mengklasifikasikan apakah sebuah blok teks terkait dengan salah satu dari 50 negara bagian AS atau pemerintah federal
- Prompt awal memasukkan daftar ID untuk 50 negara bagian dan
federaldalam format JSON pada fieldlocality_id, lalu meminta model memilih salah satunya - Cara ini berhasil sekitar lebih dari 98%, tetapi jumlah kegagalannya cukup banyak sehingga perlu investigasi tambahan
- Prompt awal memasukkan daftar ID untuk 50 negara bagian dan
- Field lain,
name, tidak diminta secara eksplisit, tetapi model secara stabil mengembalikan nama lengkap negara bagian yang benar- Setelah itu, mereka mengubah pendekatan menjadi mencari negara bagian berdasarkan string yang muncul di
name, dan cara ini bekerja dengan baik
- Setelah itu, mereka mengubah pendekatan menjadi mencari negara bagian berdasarkan string yang muncul di
- Pendekatan yang lebih baik adalah prompt yang menyerahkan pada pengetahuan umum, seperti “Anda tahu 50 negara bagian, jadi kembalikan nama lengkap negara bagian tersebut atau Federal”
- Ada juga pengamatan tambahan
- Kegagalan lebih sering muncul pada negara bagian yang dimulai dengan huruf M, seperti Maryland, Maine, Massachusetts, dan Michigan
- Saat meminta model memilih ID dari daftar, JSON yang mudah dibaca dengan setiap negara bagian di baris tersendiri tidak terlalu membingungkan dibanding daftar yang dipisahkan koma
API dan abstraksi dijaga tetap sederhana
- Dalam kasus ini, Langchain lebih mendekati abstraksi prematur, dan bahkan setelah jutaan token serta 3–4 fitur produksi yang beragam, file
openai_servicehanya menyisakan satu fungsi 40 baris - API yang benar-benar digunakan hanyalah
chat- Selalu mengekstrak JSON
- JSON mode, function calling, dan assistants tidak diperlukan
- System prompt juga tidak digunakan
- Saat
gpt-4-turbodirilis, mereka hanya mengubah satu string di codebase
- Sebagian besar fungsi menangani error seperti 500 error dari OpenAI API atau socket yang tertutup
- Error semacam ini sudah membaik, dan menurut mereka tidak mengejutkan mengingat beban OpenAI
- Batas panjang konteks ditangani dengan pemotongan otomatis sendiri
- Jika panjang string lebih besar dari
model_context_size * 3, string dipotong - Saat ada sangat banyak tanda titik atau angka, rasio token bisa menjadi kurang dari 1 token per 3 karakter, sehingga dapat gagal
- Jika muncul
context_length_exceeded, string dipotong ulang dengan patokanmodel_context_size * 3 / 1.3lalu dicoba lagi
- Jika panjang string lebih besar dari
UX streaming sulit diremehkan
- Cara mengurangi latensi dengan streaming API dan menampilkan kepada pengguna karakter yang muncul dengan kecepatan bervariasi awalnya terlihat seperti gimmick
- Dalam penggunaan nyata, pengguna menerima tampilan “mengetik” dengan kecepatan bervariasi dengan sangat positif
- Pengalaman ini terasa seperti momen mouse/kursor UX dalam AI
Hasil kosong dan output panjang adalah kelemahan
- “Jika tidak ditemukan, kembalikan output kosong” hampir menjadi frasa prompt yang paling sering memicu error
- Maksudnya bukan benar-benar tidak mengeluarkan apa pun, melainkan mengembalikan representasi nilai kosong seperti
{value: ""} - Masalahnya bukan kegagalan batas output, melainkan lebih dekat pada kesulitan menentukan hipotesis nol itu sendiri
- Maksudnya bukan benar-benar tidak mengeluarkan apa pun, melainkan mengembalikan representasi nilai kosong seperti
- Saat seharusnya mengembalikan nilai kosong, GPT kadang memilih berhalusinasi; sebaliknya, kadang kepercayaan dirinya turun dan terlalu sering mengembalikan nilai kosong
- Saat ada bug yang memungkinkan blok teks kosong, halusinasi terjadi parah
- Contohnya muncul nama toko roti palsu seperti Sunshine Bakery, Golden Grain Bakery, dan Bliss Bakery
- Solusinya adalah tidak mengirim prompt sama sekali jika tidak ada teks
- GPT-4 dapat memiliki jendela 128k token untuk input, tetapi jendela output masih berada di kisaran 4k
- Istilah “context window” membuat input dan output mudah tercampur
- Saat diminta mengembalikan daftar objek JSON, bahkan untuk objek sederhana pun sulit melewati 10 item
- Jika diminta 15 item, diperkirakan hanya sekitar 15% yang berhasil
- Bahkan ketika berhenti di kisaran 10 item, output-nya hanya sekitar 700–800 token
- Batas output bisa diakali dengan meminta satu per satu lalu memasukkan kembali hasil sebelumnya, tetapi bentuknya menjadi seperti bermain telepon rusak dengan GPT dan berurusan dengan alat seperti Langchain
RAG dan vector DB tidak cocok untuk kasus penggunaan ini
- Dalam kasus Truss, vector DB dan RAG/embedding sebagian besar tidak berguna
- Vector DB dan RAG dipandang lebih cocok untuk pencarian, khususnya pencarian sungguhan seperti Google dan Bing
- Masalah intinya adalah kriteria relevansi
- Tidak ada cutoff relevansi yang jelas
- Mungkin ada solusi seperti rerank dari Cohere atau heuristik internal, tetapi tidak stabil
- Ada risiko hasil pencarian tercemar oleh hasil yang tidak relevan, atau terlalu konservatif sehingga melewatkan hasil penting
- Menyimpan vector di basis data khusus/proprietary yang terpisah dari data umum juga menimbulkan kerugian besar
- Jika bukan pada skala Google atau Bing, kehilangan konteks dianggap tidak membenarkan trade-off tersebut
- Dalam pencarian di aplikasi bisnis, pengguna sering kali adalah pakar domain
- Mereka dianggap tidak menyukai semantic search yang menebak dan mengembalikan makna yang tidak mereka masukkan sendiri
- Untuk sebagian besar kasus pencarian, menggunakan LLM sebagai completion prompt biasa untuk mengubah kueri pengguna menjadi faceted search, kueri kompleks, atau SQL bisa jadi lebih baik
- Cara ini bukan RAG
Halusinasi sangat berkurang saat konteks cukup
- Sebagian besar kasus penggunaan Truss berbentuk “berikan blok teks dan ekstrak sesuatu darinya”
- Jika diminta nama perusahaan yang disebutkan dalam teks, GPT biasanya tidak mengembalikan perusahaan sembarang
- Namun, jika tidak ada perusahaan dalam teks, masalah hipotesis nol kembali muncul
- Pada kode pun, saat menulis ulang blok kode yang diberikan, GPT jarang berhalusinasi dalam arti mengarang variabel atau menyisipkan typo sembarangan di tengah
- Namun jika diminta membuat sesuatu, ia bisa mengarang keberadaan fungsi standard library
- Ini juga dianggap lebih dekat pada masalah tidak mampu mengatakan “tidak tahu”
- Untuk tugas yang menyediakan seluruh konteks lalu meminta analisis, peringkasan, dan ekstraksi, hasilnya sangat dapat diandalkan
- Strukturnya mendekati: jika memasukkan data yang baik, respons token GPT yang baik akan keluar
Penilaian terhadap prospek ke depan
- Mereka menilai bahwa transformer saat ini, data internet, dan akses ke infrastruktur bernilai puluhan miliar dolar saja tidak akan mencapai AGI
- GPT-4 bukan sekadar marketing, melainkan teknologi yang 100% berguna, dan mereka melihatnya masih berada pada tahap yang mirip awal internet
- Ini bukan teknologi yang akan memecat semua orang
- Efek besarnya adalah menurunkan hambatan masuk ke ML/AI yang sebelumnya hanya dapat diakses Google
- Claude, Gemini, dan lainnya tidak diuji dengan A/B test yang ketat
- Saat diuji untuk coding sehari-hari, mereka merasa model-model itu tidak sedekat GPT-4 dalam hal nuansa memahami maksud secara intuitif
- Mereka menilai tidak perlu mengikuti semua arus LLM/AI
- Jika dilihat melalui The Bitter Lesson, bila peningkatan performa model umum lebih penting daripada perbaikan khusus, maka cukup memperhatikan apakah GPT-5 dirilis
- Kecuali area terpisah seperti Sora, sebagian besar rilis menengah OpenAI dianggap lebih dekat ke noise
- GPT-5 kemungkinan besar berupa perbaikan bertahap, bukan mengubah segalanya
- Saat berpindah dari GPT-3 ke GPT-3.5, mereka mengharapkan perbaikan superlinear, yaitu menggandakan intensitas pelatihan akan meningkatkan performa 2,2 kali
- Kenyataannya terlihat seperti perbaikan logaritmik, dengan kecepatan token dan biaya per token yang meningkat secara eksponensial demi perbaikan bertahap
- GPT-4 mungkin merupakan titik optimal untuk rangkaian pekerjaan saat ini
- Mereka bersedia membayar biaya 20 kali lipat untuk GPT-4 dibanding GPT-3.5, tetapi tampaknya tidak akan membayar 20 kali lipat per token untuk berpindah dari GPT-4 ke GPT-5
- GPT-5 bisa saja mematahkan perkiraan ini, atau mungkin hanya setara perpindahan dari iPhone 4 ke iPhone 5
1 komentar
Komentar Hacker News
Tim yang saya tangani memproses 5 miliar+ token setiap bulan dan terus bertambah; ada beberapa hal yang kami pelajari.
Pertama, ada banyak abstraksi yang terlalu dini. Alat seperti Langchain mungkin suatu hari berguna, tetapi pada akhirnya prompt hanyalah panggilan API, dan lebih mudah memperlakukan panggilan LLM sebagai panggilan API yang tidak stabil dengan kode standar daripada memperlakukannya sebagai sesuatu yang istimewa.
Kedua, halusinasi jelas merupakan masalah besar. Ringkasan cukup kuat dalam pengujian, tetapi penalaran benar-benar sulit, dan model tindakan yang menerima input pengguna lalu membiarkan LLM menentukan tindakan berikutnya sangat sulit, terutama dalam memahami konteks dan membuatnya mengatakan “tidak yakin”. Meski begitu, fakta bahwa ini bisa dilakukan saja sudah mengubah permainan.
Ketiga, saya sedikit lebih condong daripada penulis ke arah “mengubah permainan”, tetapi tidak melihatnya sebagai akhir dunia. Beberapa pekerjaan akan sangat terdampak, dan mungkin akan ada beberapa tahun yang berat ketika bot memanipulasi opini publik di platform. Secara keseluruhan, ini tampak lebih seperti penguat kemampuan daripada terobosan seperti internet.
Secara pribadi, ini mirip dengan perubahan DevOps pada era 2000-an. Sekarang kita tidak membutuhkan tim khusus besar untuk membantu deployment; kita merekrut segelintir ahli dan sebagian besar membeli solusi siap pakai. Demikian pula, beberapa pekerjaan machine learning kini menjadi mudah diimplementasikan bahkan oleh pengembang web seperti saya.
Evolusi DevOps juga punya kompromi. Misalnya, sebagai akibat langsung dari “pakai saja AWS RDS”, kompetensi inti seperti manajemen database menghilang, dan biaya tagihan cloud juga melonjak. Biaya operasional startup, terutama yang skala datanya atau kompleksitas regionalnya tidak besar, ikut membesar; menurut saya tren ini juga berujung pada insiden-insiden yang mirip dengan gangguan besar GitLab.
Mirip seperti ketika diminta menebak sisi koin lalu menjawab “kepala”: sebelum menjawab, kita bisa menyatakan ketidakpastian seperti Pr[kepala] = .5, tetapi dalam prediksi aktual dan hasil lemparan koin, ketidakpastian itu menghilang. Pada LLM juga, ketidakpastian selama komputasi menghilang pada prediksi akhir token, sehingga kecuali prediksi itu sendiri merupakan ekspresi ketidakpastian, output “saya tidak memahami” hampir tidak akan muncul. Namun alasannya adalah karena sejak awal ia memprediksi tanpa memahami.
Pada dasarnya, menurut saya kita menggunakan GPT sebagai padanan PaaS/Heroku/Render dalam operasi AI.
Saya penasaran dengan bagian “Kami selalu mengekstrak JSON. Mode JSON tidak diperlukan”. Dalam kasus saya, itu bekerja cukup baik.
Saya sangat setuju dengan “Pelajaran 4: GPT benar-benar lemah dalam membuat hipotesis nol”. Kemarin pun, saat menguji prompt aturan penyuntingan teks, saya menulis di bagian akhir: “Jika tidak ada aturan yang berlaku pada teks, kembalikan teks asli tanpa perubahan.”
Tahu apa jawaban ChatGPT untuk teks yang tidak satu pun aturannya berlaku? Persis string “The original text without any changes”.
Dulu, ketika saya membuat gambar untuk kartu tarot berupa tiga perempuan yang minum anggur di taman indah, saya menambahkan “lush vegetation” di akhir prompt, lalu karena ambiguitas kata lush, suasananya berubah dari elegan menjadi terasa seperti mahasiswi pesta berhidung merah.
Dengan prompt yang lebih baik, Anda bisa memakai model yang lebih murah.
“Jika tidak menemukan apa pun, jangan kembalikan apa pun” adalah cara level 0 yang memberi LLM jalan keluar. Lebih baik memberinya jalur keluar yang lebih halus. Misalnya, tulis seperti “Jika tidak ada cukup informasi untuk membuat pernyataan yang meyakinkan, Anda boleh membuat hipotesis selama Anda menyatakan dengan jelas bahwa itulah yang sedang Anda lakukan serta menuliskan dasar dan landasan logis hipotesis tersebut”, lalu di akhir minta ia menilai jawabannya sendiri.
Jika tidak ada metode otomatis, Anda perlu menguji respons model secara berulang terhadap berbagai input, memahami bagaimana ia menafsirkan permintaan, di mana ia gagal, lalu menutup celah tersebut. Bahkan Anda harus memverifikasi apakah model benar-benar tahu arti nothing.
Saya berlangganan ketiga layanan teratas di bidang LLM dan sering melempar prompt yang sama; hasilnya sangat berat sebelah menguntungkan GPT-4. Mengingat GPT-4 sudah keluar selama 1 tahun dan sempat ada beberapa pembaruan di antaranya, ini tetap mengejutkan
Setidaknya dalam pola penggunaan saya, halusinasi juga terbilang jarang. Sebaliknya, saat menulis kode, Claude cukup mudah mengarang API yang terdengar masuk akal tetapi sebenarnya tidak ada. GPT-4 lebih keras kepala dan tidak terlalu mudah mengiyakan ketika ia tahu dirinya benar. Perbedaan seperti ini hampir tidak tertangkap dalam metrik, jadi baru terlihat kalau dipakai sendiri
Untuk pekerjaan coding pun saya lebih sering meminta penjelasan tentang topik atau kode daripada menyuruhnya menulis kode, dan Claude cenderung memberikan jawaban yang jauh lebih bernuansa. Saat diberi teks panjang lalu diajak berdialog, Claude Opus terasa memahami isinya lebih dalam; sementara GPT-4 cenderung berhenti pada merangkum teks yang diberikan, Claude lebih baik dalam memperluas dan bernalar darinya
Namun pada prompt yang tersusun baik, Claude Opus cenderung menghasilkan keluaran yang lebih baik daripada GPT-4. Claude lebih fleksibel dan memberikan jawaban yang lebih panjang, sedangkan ChatGPT/GPT-4 hampir selalu terdengar seperti jawaban pendek dan “khas” versinya sendiri
Pada contoh kode yang saya minta, kode buatan GPT-4 sering kali bahkan tidak bisa dikompilasi, sedangkan dengan Claude hampir tidak pernah begitu
Tes lakmus yang saya pakai belakangan ini adalah “beri tahu saya 10 bar unik dalam radius 200 mil dari Austin”. Ini sangat sulit bagi semuanya; GPT-4 lumayan mendekati, tetapi Claude hanya mengarang, dan Gemini benar-benar berantakan
GPT memang sangat keren, tetapi saya sangat tidak setuju dengan interpretasi dua paragraf dalam tulisan itu
Bisa saja diringkas bahwa pendekatan yang lebih baik adalah semacam “GPT, kamu jelas tahu 50 negara bagian, jadi berikan nama lengkap negara bagian yang sesuai dengan ini, atau jawab Federal jika ini terkait pemerintah AS”
Namun menurut saya berlebihan jika menafsirkan bahwa kualitas dan generalisasi GPT yang membaik ketika instruksinya dibuat lebih ambigu adalah tanda khas delegasi/pemikiran tingkat tinggi. Bahasa alami adalah keluaran yang paling probabilistik bagi GPT, karena mirip dengan teks yang dipelajarinya. Dalam kasus ini, developer hanya lebih bersandar pada hal yang memang dikuasai GPT, bukan membuatnya bekerja lebih keras
Ada banyak tugas sederhana yang bisa membuat GPT gagal. Tugas seperti substitusi huruf atau salah ketik yang disengaja sangat sulit bagi GPT. Pemetaan ID juga sama, terutama bila sangat berbeda dari pemetaan yang pernah dilihat saat pelatihan. Misalnya kode tiga huruf yang mirip seperti kode negara non-ISO
Hal yang menarik adalah fakta bahwa GPT “memahami” pemetaan itu sendiri. Justru itu menurut saya petunjuk nyata dari pencocokan pola tingkat tinggi
Tips untuk masalah ‘null’: LLM dibuat untuk mengeluarkan token, bukan untuk tidak mengeluarkan token
Jadi alih-alih mengatakan “jangan kembalikan apa pun”, saat tidak ada hasil katakan “kembalikan nilai default XYZ”, lalu cari nilai default itu, misalnya XYZ, dalam hasilnya seperti mencari nama negara bagian
Selain itu, system prompt bisa sangat berguna. Pada dasarnya ini kesempatan untuk membuat LLM bermain peran sebagai X. Akan bagus jika system prompt bisa diteruskan langsung, tetapi tetap lebih baik daripada tidak ada
Kalau GPT tidak bisa mengembalikan daftar lebih dari 10 objek JSON dengan benar, itu masalah prompt. Saya pernah membuatnya secara stabil mengembalikan hingga 200 item dalam urutan yang benar
Triknya adalah tidak memakai daftar sama sekali, dan menggunakan key JSON seperti
"item1": {...}pada output. Jika untuk suatu input ada 0 hingga n output, daftar bisa dipakai sebagai nilainyaJika saya memberi GPT-4 daftar item yang sudah ada dengan struktur terdefinisi dan memintanya mengubah ke JSON seperti konversi skema, itu bisa berjalan baik sepanjang hari. Tetapi jika dibutuhkan penalaran apa pun dan pada dasarnya ia harus membuat daftarnya sendiri, ia hanya memberi subset yang sangat terbatas
Saya mengalami masalah serupa di LLM lain. Saya sangat penasaran bagaimana Anda mendekatinya
Tugas seperti “ekstrak nama perusahaan dari blok teks” bisa dibagi menjadi dua tahap
Pertama tanyakan, “apakah ada perusahaan yang disebutkan dalam blok teks ini?” Jika tidak, berarti Anda mendapat hasil null. Jika ya, tanyakan “daftarkan nama perusahaan yang ada dalam blok teks ini”
Saya memakai model OpenAI di aplikasi menulis pribadi, dan tulisan ini sangat tepat. Ada hal yang saya pelajari terkait Lesson 1, “semakin sedikit prompt, semakin baik”
Saat membuat fitur pencarian cerdas untuk catatan, saya mencoba membuat ChatGPT mengembalikan data JSON terstruktur. Misalnya saya bertanya “beri saya semua catatan saya dalam 2 tahun terakhir yang menyebut Haskell dan ditandai sebagai draf”, lalu ingin ChatGPT menilai sendiri apa yang harus dikembalikan. Ini hanya kadang-kadang berhasil
Sebagai gantinya, saya memasukkan data ke database SQLite, mengirimkan skemanya ke ChatGPT, lalu memintanya menulis query yang mengembalikan hasil yang diinginkan; hasilnya jauh lebih baik
response_format=json_objectUntuk mendapatkan respons terstruktur, function calling lebih cocok, tetapi batasannya lebih banyak dibanding sekadar menerima body JSON
Contoh ketika memberi instruksi terlalu tepat justru menurunkan akurasi terasa masuk akal menurut pemahaman saya yang masih kasar tentang cara kerja sistem seperti ini
Jika memasukkan seluruh daftar negara bagian, itu seolah mengaktifkan vektor untuk semua negara bagian sampai tingkat tertentu. Jika hanya mengatakan “state” dan teks yang diberikan memiliki negara bagian eksplisit, lebih sedikit vektor yang terkait dengan target pencarian yang aktif. Jadi saat melakukan softmax, kemungkinan negara bagian yang benar terpilih menjadi lebih tinggi
Dalam konteks yang sama, perbandingan
/ndan koma kemungkinan besar juga karena perbedaan tokenisasi