TypeChat: platform AI berbasis chat
(microsoft.github.io)- Kesulitan terbesar saat menambahkan input bahasa alami ke aplikasi yang sudah ada adalah mengubah niat pengguna menjadi struktur yang bisa dipercaya oleh perangkat lunak, dan TypeChat adalah library yang mencoba menyelesaikan titik ini dengan tipe TypeScript
- Karena respons teks bebas dari LLM tidak stabil untuk di-parse, TypeChat mengarahkan respons ke JSON dan menambahkan validasi skema agar menjadi data yang bisa diproses aplikasi
- Tipe TypeScript dapat merepresentasikan struktur JSON dengan presisi dan merupakan format yang banyak ditemui LLM selama proses pelatihan, sehingga cocok digunakan sebagai skema respons
- Jika respons tidak sesuai dengan tipe, error kompilator TypeScript dapat dikirim balik sebagai umpan balik untuk diperbaiki, sehingga keamanan tipe bisa ditingkatkan sebelum pascapemrosesan atau konfirmasi pengguna
- TypeChat dapat diinstal dengan
npm install typechat, dirilis sebagai open source berlisensi MIT, dan juga menyediakan integrasi dengan OpenAI API dan Azure OpenAI Service
Mengubah permintaan bahasa alami menjadi data yang bisa diproses aplikasi
- Model bahasa besar terbaru mudah dipasang ke asisten chat, tetapi mengintegrasikan bahasa alami secara andal ke antarmuka aplikasi yang sudah ada merupakan tantangan tersendiri
- TypeChat berfokus pada mengubah permintaan pengguna ke bentuk yang dapat diproses aplikasi, serta memungkinkan tindakan yang dapat dipercaya oleh pengembang dan pengguna
- Library yang dirilis secara publik ini menggunakan definisi tipe dalam codebase untuk memperoleh respons AI yang terstruktur, dengan tujuan mencapai keamanan tipe
- Instalasi dapat dilakukan dengan perintah berikut
npm install typechat
Menggunakan JSON dan tipe alih-alih parsing bahasa alami
- LLM pada dasarnya disetel untuk percakapan bahasa alami seperti bahasa Inggris, sehingga meskipun aturan seperti “jawab dalam bentuk daftar bullet” dimasukkan ke prompt, perangkat lunak biasa tetap sulit mem-parse hasilnya secara andal
- Jika diminta menjawab dalam JSON, biasanya respons bisa dibuat dalam bentuk yang lebih mudah ditangani aplikasi
- Dalam contoh, permintaan untuk 1 “blueberry muffin” dan 1 “grande latte” diubah menjadi JSON dengan array
items
- Dalam contoh, permintaan untuk 1 “blueberry muffin” dan 1 “grande latte” diubah menjadi JSON dengan array
- Contoh sederhana membantu mengarahkan struktur, tetapi tidak cukup mendefinisikan apa yang harus dikembalikan AI dan juga tidak menyediakan kriteria validasi
Menggunakan tipe TypeScript sebagai skema respons
- TypeChat menyertakan tipe TypeScript di dalam prompt untuk mengarahkan struktur JSON yang harus dikembalikan LLM
- Tipe
Responsepada skema contoh mencakupitems: Item[], danItemmemiliki fieldname,quantity, sertasizedannotesyang opsional - TypeScript cocok untuk mendeskripsikan JSON secara presisi, dan karena LLM telah banyak terpapar definisi tipe, format ini berguna untuk memandu bentuk respons
- Jika respons tidak sesuai dengan tipe, kompilator TypeScript akan memvalidasinya berdasarkan definisi tipe yang merupakan kode TypeScript yang valid
- Umpan balik error kompilator dimanfaatkan untuk mendorong perbaikan respons, sehingga alur untuk mendapatkan respons yang sesuai tipe menjadi lebih kokoh
Cara penggunaan dan contoh TypeChat
- TypeChat dapat digunakan dengan pendekatan skema data untuk mengubah niat pengguna menjadi respons terstruktur
- Kode contoh mendefinisikan antarmuka
SentimentResponseyang menilai sentimen kalimat input pengguna sebagai salah satu darinegative,neutral, ataupositive createLanguageModel(process.env)membuat model bahasa berbasis variabel lingkungan, lalu setelah membaca file skema, dibuat penerjemah dengancreateJsonTranslator<SentimentResponse>- Jika
translator.translate(request)berhasil, makaresponse.data.sentimentdicetak; jika gagal, maka pesan error ditampilkan - Selain skema data, skema API juga dapat digunakan untuk menyusun program dasar
- Cara penggunaan dapat dilihat di docs dan examples
Open source dan netral terhadap model
- TypeChat adalah open source berlisensi MIT dan tersedia di GitHub
- Untuk kemudahan, TypeChat menyediakan integrasi bawaan dengan OpenAI API dan Azure OpenAI Service
- Tujuan desainnya adalah netral terhadap model, dan mengarah pada pendekatan yang dapat digunakan selama tersedia API bergaya chat completion
- Saat ini, TypeChat bekerja paling baik pada model yang dilatih dengan data prosa dan kode
- Paketnya tersedia di npm sehingga bisa langsung dicoba
2 komentar
Haha, habis lihat beritanya aku mau posting juga, tapi ternyata nggak bisa ngalahin AI.
Komentar Hacker News
Saya kurang paham nilai tambah apa yang ada di sini
Pesan inti yang dikirim ke LLM ada di sini: https://github.com/microsoft/TypeChat/blob/main/src/typechat...
Pada akhirnya ini tampak seperti memaksa pengembalian data terstruktur dengan prompt tetap, ditambah sedikit otomatisasi dan ketergantungan pada vendor. Sebagian besar library LLM seperti ini pada dasarnya hanyalah API kasar yang membungkus API di bawahnya, dan skrip yang melakukan hal yang sama bisa dibuat dengan mudah serta lebih fleksibel saat model dan kebutuhan pengguna berubah
Misalnya, jika ingin mengubah prompt atau memakai kelas Python, ada perbedaan beban kerja yang cukup besar antara library seperti ini dan pendekatan yang mengekspos pemanggilan API serta template teks kepada pengguna (https://github.com/hofstadter-io/hof/blob/_dev/flow/chat/llm...)
https://github.com/microsoft/TypeChat/blob/main/src/typechat...
Dari pengalaman bereksperimen dengan ide yang sama, heuristik poin 2 bekerja sangat baik secara mengejutkan untuk tipe yang relatif sederhana, yaitu record dan array yang tidak bertingkat dalam serta penggunaan variabel tipe yang terbatas. Hanya dengan memberi prompt ke LLM untuk mengembalikan nilai dengan tipe yang relatif sederhana pun sudah bisa membuat aplikasi yang berguna, dan library ini punya nilai karena mengurangi kebutuhan untuk mengimplementasikan sendiri pola permintaan itu serta menyediakan integrasi standar dengan codebase TypeScript
Meski begitu, rasanya memang masuk akal untuk memakai library, jadi saya terus memperhatikan pendekatan mana yang akan cukup matang
Misalnya, jika ada 1000 respons survei teks bebas tentang produk, Anda bisa membuat skema dan menjalankan
TypeChatuntuk masing-masing respons sehingga mendapatkan dataset dari teks bebas tersebut. Sangat bergunaAda satu bagian yang tidak saya mengerti
Saya tidak paham kenapa harus melalui prosedur rumit berupa berharap respons yang valid datang, menempelkan validator di langkah terakhir untuk mendeteksi respons yang salah, lalu memohon pada model agar menjawab dengan tata bahasa yang diinginkan
Jika hanya men-sampling token yang sesuai dengan format yang diminta, Anda bisa menjamin sintaks JSON yang valid. Alih-alih selalu memilih token dengan skor tertinggi secara greedy, cukup pilih token berskor tertinggi di antara token yang sesuai dengan format yang diminta
Guidance dari Microsoft sudah melakukan ini: https://github.com/microsoft/guidance
Namun tampaknya OpenAI tidak membuka seluruh skor semua token dan hanya menampilkan token dengan skor tertinggi. Jika menjalankan model secara lokal, memakai Guidance itu mudah dan bisa menjamin JSON selalu benar, serta generasinya lebih cepat, jadi terasa aneh
Selain itu, dengan cara seperti itu sepertinya sulit menangkap seluruh kompleksitas tipe TypeScript
[0] https://www.snopes.com/fact-check/brown-out/
Jika model sebenarnya sangat ingin memasukkan token lain tetapi dipaksa memasukkan
{, kualitas teks yang dihasilkan setelahnya bisa menurun. Saya tidak yakin, ini hanya pemikiran sepintasSaya pernah melakukan fine-tuning LLM open source untuk parsing JSON, dan tergantung kasus penggunaannya, 70B parameter bisa jadi berlebihan bahkan tanpa guided token sampling. Saya melihat hasil yang cukup bagus dari model yang jauh lebih kecil, dan sepertinya menarik jika fine-tuning model kecil digabung dengan guided token sampling
Hanya saja, untuk aplikasi yang sangat umum, fine-tuning mungkin tidak sempurna. Akan jadi masalah jika ada input yang tidak diantisipasi dalam dataset pelatihan
Tentu saja, di web ini tidak masuk akal. Jauh lebih mudah mengklik beberapa barang dengan mouse
https://github.com/ggerganov/llama.cpp/pull/1773
Rasanya setiap kali saya memikirkan sesuatu, Anders Hejlsberg malah keburu membuatnya.
Permintaan dan respons terstruktur 100% adalah evolusi berikutnya untuk LLM. Orang-orang sudah mulai jenuh dengan chatbot, dan akan luar biasa jika kita bisa memasang backend apa pun tanpa perlu repot parsing teks dan mengkhawatirkan prompt.
TypeChat tampaknya mengarah ke jalur yang benar. Saya bisa membayangkan lapisan tambahan seperti, “cocokkan input JSON ini ke salah satu tindakan yang mungkin, jika bisa”.
Saya bisa melihat masa depan hibrida yang rapi di mana bot, yaitu LLM dan sebagainya, benar-benar menyambungkan lapisan-lapisan kode nyata. Kadang menjadi bagian dari pengumpulan/penandaan, kadang menjadi bagian yang merespons input.
Secara keseluruhan ini area yang sangat menarik, tetapi semuanya bergerak terlalu cepat jadi saya belum mendalaminya. Banyak orang pintar sedang mengerjakannya, jadi rasanya perlu menunggu debunya sedikit mengendap. Meski begitu, rasanya antarmuka rumah impian yang saya bayangkan sudah berada pada tahap bisa dibuat.
Misalnya, coba ikuti payload API yang sering berubah di sekitar konsumen Java. Di sektor perbankan, dengan payload JSON raksasa, saya sampai membuat lapisan NodeJS terpisah agar tetap waras di lingkungan backend Java.
Mapping adalah area di mana LLM bisa benar-benar bersinar.
Kalau mau pakai tafsir yang panas, kita perlahan masuk ke tahap toolifikasi AI. Di tahap ini orang mulai sadar bahwa nilai nyata yang diciptakan tidak seberapa, tetapi investasi ke AI sudah terlalu besar sehingga uang terus mengalir masuk. Ini juga topik yang bagus untuk menerbitkan paper akademik, dan LangChain nyaris terasa seperti lelucon tetapi tetap mendapat seed $10 juta.
DeFi/crypto melewati tahap ini 2 tahun lalu. Akan ada semacam limbo aneh selama beberapa tahun, lalu orang perlahan sadar bahwa AI adalah fitur, bukan produk, cakupan penerapannya terbatas, dan tidak akan menyelamatkan dunia. Mobil otonom tidak akan berhasil karena semua edge case, dan operasi bedah juga tidak bisa karena bisa membunuh orang.
Bahkan untuk alat AI yang paling berguna seperti Copilot, saya terus mengatakan bahwa paling banter manfaatnya hanya marginal. Dalam skenario terbaik, itu hanya mengurangi beberapa klik di Google, dan agen sama sekali tidak “cerdas”. Kita pernah mengalami gelembung serupa beberapa tahun lalu dengan chatbot[1], dan sekarang tidak ada yang peduli. “Metaverse” berakhir jauh lebih cepat, tetapi psikologi kerumunannya sama. Sesuatu disebut “hal besar berikutnya”, lalu ternyata bukan.
[1] https://venturebeat.com/business/facebook-opens-its-messenger...
Anda memilih contoh penerapan AI yang paling sulit, seperti mobil otonom dan operasi bedah. Sebagian besar pekerjaan kebanyakan orang tidak menyangkut hidup dan mati, jadi sangat cocok untuk otomatisasi. Bahkan jika unsur manusia tetap ada pada pekerjaan yang menyangkut nyawa, besar kemungkinan itu akan diperkuat oleh agen AI. Misalnya, meskipun operasi dilakukan manusia, diagnosis oleh dokter atau perawat bersama AI bisa menjadi kewajiban.
Anda serius membandingkan situasi sekarang dengan gelembung chatbot beberapa tahun lalu? ChatGPT mencapai 100 juta pengguna hanya dalam beberapa bulan, dan benar-benar dicoba oleh sangat banyak orang. Gelembung chatbot beberapa tahun lalu bahkan hampir tidak punya kehadiran.
Soal Copilot dan sejenisnya yang katanya hanya berguna secara marginal, itu karena kita sedang melihat versi terburuknya saat ini. ChatGPT mengubah hidup saya, padahal itu bahkan belum menjalankan kode. Code Interpreter memang bisa, tetapi saya belum mencobanya.
Sekitar tahun 2030, manusia mungkin tidak lagi mengetik kode, melainkan memberi prompt ke mesin dan mengarahkan agen AI. Pada saat itu, sebagian besar pekerjaan juga kemungkinan besar akan terotomatisasi.
AI bukan sekadar tren, melainkan akan mengubah setiap industri, dan jauh lebih cepat daripada yang orang bayangkan. Sinisme yang meremehkan implikasi AI dengan membandingkannya dengan metaverse itu konyol dan kurang imajinasi. Memang masih banyak yang harus dikerjakan, terutama di sisi agen AI, tetapi kita mungkin akan sampai ke sana jauh lebih cepat daripada yang orang kira, dan dampaknya akan sangat besar.
Namun AlphaGo tidak butuh waktu lama untuk berubah dari kondisi “berhalusinasi” langkah buruk menjadi pemain terbaik dunia. Jika itu juga mungkin pada model bahasa, GPT-x bisa saja menyapu habis semua perdebatan saat ini.
GPT-4 sangat membantu ketika seorang yang terampil mengerjakan tugas-tugas pendamping di mana keterampilan dasarnya cukup kuat tetapi pengetahuan domainnya lemah.
Saya sudah menulis kode selama 10 tahun dan belakangan ini baru mulai belajar machine learning untuk pertama kali; saya memakai GPT-4 setiap hari dan sangat puas.
Tentu saja bagian kasarnya kadang bisa mengganggu. Bagi saya itu masih pada tingkat yang bisa dikelola dan bukan kerepotan besar. Saya sudah terbiasa mengabaikannya atau memutar jalan, dan jelas ada keterampilan tersendiri dalam menggunakan alat seperti ini.
Saya rasa nilai yang diberikannya akan terus bertambah. Kita bahkan belum memetik semua buah yang rendah maupun yang setengah rendah.
AI modern, yang pada praktiknya biasanya berarti LLM, bisa langsung diterapkan secara luas di hampir semua sektor ekonomi. Karena itu banyak orang sudah membuat dan meluncurkan fitur. Teknologi ini punya nilai yang luar biasa besar. Apakah akan mengubah dunia sepenuhnya? Tidak. Tetapi cukup untuk menciptakan kategori produk baru dan secara mendasar meningkatkan porsi besar dari kemampuan produk yang sudah ada.
Saya tidak paham kenapa di antara asisten suara dari Apple, Google, Amazon, dan Microsoft masih belum ada yang mengintegrasikan LLM ke layanannya, dan kenapa OpenAI juga belum merilis asisten suara sendiri
Selain itu, kalau situs web mengekspos URL standar untuk interaksi AI seperti RSS, lalu membuka antarmuka lewat TypeChat, rasanya ini bisa cukup mendorong ke arah sana
Namun, dibanding LLM berbasis suara, nilai kemampuan untuk benar-benar melakukan tindakan jauh lebih besar. Ambil Alexa sebagai contoh: dibutuhkan sistem yang menangani kontrol smart home dengan cara yang bisa diprediksi dan bisa di-debug. Kalau tidak, orang akan kesal
Saya jelas melihat ini mungkin dilakukan, tetapi sistem seperti Alexa atau Siri saat ini, dan Cortana yang makin jarang dipakai, selama bertahun-tahun dibangun di atas model yang lebih lemah dengan aturan dan perangkat lunak yang memakai berbagai hook dan API. Agar ini bisa berjalan, mereka harus memperbaikinya sambil mempertahankan kualitas saat ini, dan pada saat yang sama merombak bagian-bagian utama sistem, jadi memang butuh waktu
Lagi pula, asisten seperti ini sebenarnya tidak menghasilkan uang dan umumnya malah merugi. Nilainya hanya ada bagi perusahaan besar yang bisa menghasilkan uang dengan cara lain atau mendorong bisnis lain seperti ponsel dan belanja, jadi insentif bagi startup kecil
Saya pernah bekerja di Cortana dan Alexa, dan juga banyak memikirkan untuk membuat versi baru dari nol berdasarkan perkembangan LLM. Teknologinya secara umum terasa intuitif, dan ada ide use case baru yang kini jadi mungkin, tetapi saya tidak bisa menemukan model bisnis yang benar-benar jalan. Jadi sekarang saya mengerjakan hal yang sama sekali berbeda
Hanya saja, memakai API berbasis cloud untuk ini terasa terlalu mengkhawatirkan, jadi saya ingin sesuatu yang berjalan di server rumahan. Pada saat yang sama, pengenalan suara dan waktu responsnya harus sangat cepat sampai tidak ada rasa sedang menunggu
Saya sudah beberapa kali melihat upaya DIY untuk asisten pribadi, tetapi selalu ada latensi yang cukup besar, jadi kalau dipakai sering rasanya akan cepat bikin kesal
Ada bagian yang bilang mudah mendapatkan respons seperti
{ "name": "grande latte" }Tetapi kalau tipenya adalah
Item = { name: string; ... size?: string; }, saya kurang paham bagaimana ini bisa mencegahname: "grande latte"Contoh responsnya berisi
"size": 16dan disebut “cukup bagus”, tetapi itu bahkan tidak mengembalikan tipe yang diminta. Mungkin ini hanya typo di contoh, dan kalau begitu idenya sendiri tampak kerensizesebagainumber. Skemanya sudah diubah, tetapi prompt-nya belum dijalankan ulang, dan sekarang mestinya sudah diperbaikiSejak awal, kemungkinan besar Anda sebenarnya tidak menginginkan field string
name. Tidak ada cara untuk mencegah menerima nilai seperti{ name: “yang cokelat itu”, size: “cangkir espresso itu”, … }, dan ini sama buruknya dengan sekadar mem-parsing string asliYang mungkin Anda inginkan adalah union type string besar yang merepresentasikan nilai-nilai yang diketahui untuk tiap field. Dengan begitu, LLM bisa dipaksa menebak dari antara pilihan itu
Tetapi saya juga ragu kenapa itu harus diikat ke sintaks tipe. Sesuatu seperti Zod yang bisa menyusun union type semacam itu dari data runtime tampak lebih cocok
Anda juga butuh batasan seperti kuantitas harus berupa bilangan bulat positif dan tidak boleh pecahan. Tentu nilai JSON itu bisa divalidasi belakangan, tetapi kalau begitu pengguna akan melihat dua jenis error. Yang satu adalah error dari LLM dengan gaya bahasa manusia yang fasih, dan yang lain adalah error teknis yang aneh seperti “nilai kuantitas terlalu besar”
Sintaks tipe tampak berada di tempat yang salah untuk menjelaskan hal-hal seperti ini
Dari kode yang diberikan saja, sistem tidak punya cara untuk memetakan “grande” menjadi 16, dan 16 juga tidak tampak dipakai di tempat lain
Ini tampaknya cara yang menjalankan LLM berulang kali sampai keluar sesuatu yang lolos pemeriksaan tipe, lalu mem-prompt ulang dengan pesan error
Idenya lucu dan sepertinya bisa berjalan, tetapi dengan model besar dan prompt input yang panjang, biayanya bisa jadi tinggi. Rasanya ini bukan solusi untuk semua skenario
[1]: https://github.com/microsoft/guidance
Ada juga asumsi yang cukup masuk akal bahwa karena pasar menginginkan output terstruktur, model-model pun akan membaik ke arah itu
Minggu ini saya merilis sesuatu yang sangat mirip untuk Laravel PHP, tetapi dengan cakupan yang lebih kecil: https://github.com/adrenallen/ai-agents-laravel
Menurut saya, engineer seharusnya bisa dengan mudah menjalankan “bot” baru dengan LLM yang tersedia. Ada banyak pekerjaan membosankan seperti mengubah fungsi ke bentuk yang bisa dipahami ChatGPT, lalu memproses respons dan mem-parsing-nya lagi
Dengan sistem seperti ini, Anda bisa fokus menulis kode PHP yang sebenarnya dan menambahkan beberapa komentar yang jelas, lalu bot dapat langsung memakai kode itu sebagai alat untuk tugas apa pun
Pendekatan seperti ini juga membuat berbagi kode jauh lebih mudah. Jika seseorang menulis sebuah fungsi, Anda bisa membawanya ke bot baru dan langsung memakainya. Hal keren di sini adalah ini menghilangkan “lapisan konversi agar LLM bisa menggunakan dan memahaminya”, dan sangat mempercepat proses build
Ini memang belum sempurna, tetapi saya rasa pada akhirnya semuanya akan bergerak ke arah ini jika kita ingin memanfaatkan kode satu sama lain dengan lebih baik. Jika memikirkan cara kita memakai package manager dalam coding saat ini, saya berharap ada package manager untuk alat khusus AI. Misalnya, install library “ambil cuaca” dan tambahkan ke bot saya, lalu sekarang bot itu bisa mengambil cuaca
Tunggu, apakah ini melakukan validasi runtime terhadap definisi tipe TypeScript? Jika ini bisa dirilis sebagai library atau fitur mandiri, ini bisa benar-benar jadi game changer untuk hal-hal seperti validasi payload respons API di codebase TypeScript
https://github.com/microsoft/TypeChat/blob/4d34a5005c67bc494...
Saya sangat terkejut mereka tidak memakai
guidance[0] di siniItu bisa menyarankan pelengkapan field wajib sehingga kebutuhan validasi[1] bisa berkurang, dan pada akhirnya sepertinya juga bisa menghemat waktu GPU
Pasti ada alasannya, dan saya benar-benar ingin tahu
Omong-omong, saya sedang membuat hal seperti ini juga, lalu rasanya Microsoft tiba-tiba datang dan memakan jatah makan siang saya
[0] https://github.com/microsoft/guidance
[1] https://github.com/microsoft/TypeChat/blob/main/src/typechat...