- Menjaga operasi on-call yang kuat di lingkungan teknologi yang berubah cepat sangat penting untuk memastikan layanan tetap berjalan lancar
- Tim platform engineering menghadapi kesulitan dalam mengelola jadwal on-call, respons insiden, komunikasi pada momen penting, dan dukungan pelanggan yang kuat di channel Slack® secara efisien
- Menjelaskan Genie, copilot on-call yang menggunakan AI generatif untuk mengoptimalkan komunikasi dengan engineer on-call dan menjawab pertanyaan
Melihat lebih dekat: masalah dan motivasi
- Di Uber, berbagai tim seperti tim Michelangelo memiliki channel dukungan Slack tempat pengguna internal dapat meminta bantuan
- Di channel-channel ini, rata-rata 45.000 pertanyaan diajukan setiap bulan
- Volume pertanyaan yang besar dan lamanya waktu tunggu respons menurunkan produktivitas pengguna dan engineer on-call
Proses yang merepotkan
- Biasanya, ketika pengguna mengajukan pertanyaan di channel Slack, mereka harus menunggu respons dari engineer on-call
- Engineer on-call menjawab pertanyaan awal pengguna atau meminta detail tambahan
- Pengguna dapat mengajukan pertanyaan lanjutan, meminta kejelasan lebih lanjut, atau memberikan informasi tambahan
- Hal ini menciptakan situasi di mana mereka harus kembali menunggu respons engineer on-call
- Setelah beberapa kali komunikasi bolak-balik, pertanyaan pengguna akhirnya terselesaikan
Sulit menemukan informasi
- Banyak pertanyaan sebenarnya bisa dijawab dengan merujuk ke dokumentasi yang sudah ada, tetapi informasi tersebar di wiki internal Uber yang disebut Engwiki, Stack Overflow internal, dan lokasi lainnya, sehingga sulit menemukan jawaban tertentu
- Akibatnya, pengguna sering mengajukan pertanyaan yang sama berulang kali, sehingga menciptakan permintaan tinggi untuk dukungan on-call di ratusan channel Slack
Tantangan arsitektur
- Untuk membangun copilot on-call, dipilih antara melakukan fine-tuning model LLM atau memanfaatkan Retrieval-Augmented Generation (RAG)
- Fine-tuning membutuhkan data terkurasi yang berisi contoh berkualitas tinggi dan beragam agar LLM dapat belajar
- Selain itu, dibutuhkan sumber daya komputasi untuk menjaga model tetap mutakhir dengan contoh-contoh baru
- Sebaliknya, RAG tidak memerlukan beragam contoh sejak awal
- Karena ini mempersingkat waktu peluncuran copilot, pendekatan inilah yang dipilih untuk copilot tersebut
Ada beberapa tantangan dalam membangun copilot on-call, termasuk mengatasi halusinasi, melindungi sumber data, dan meningkatkan pengalaman pengguna. Berikut gambaran singkat cara setiap tantangan ditangani.
Untuk halusinasi, fokusnya adalah pada hal-hal berikut:
- Akurasi respons: mengambil pengetahuan yang relevan untuk pertanyaan agar engine LLM tidak menghasilkan informasi yang salah atau menyesatkan
- Mekanisme verifikasi: menerapkan cara untuk memverifikasi respons copilot terhadap sumber yang otoritatif guna mengurangi kemungkinan halusinasi
- Pembelajaran berkelanjutan: memastikan copilot dapat mengakses data paling terbaru untuk meningkatkan akurasi
Untuk keamanan data, sumber data yang dikumpulkan dipilih dengan hati-hati karena ada banyak sumber data yang tidak boleh terekspos ke channel Slack
Untuk meningkatkan pengalaman pengguna, desainnya mencakup hal-hal berikut:
- Antarmuka yang intuitif: merancang antarmuka yang mudah digunakan agar pengguna bisa berinteraksi dengan copilot secara efisien
- Feedback loop: membuat sistem yang memungkinkan pengguna memberi umpan balik atas respons agar performa copilot dapat terus ditingkatkan
Tantangan-tantangan ini diatasi saat mengembangkan copilot on-call yang andal, ramah pengguna, dan aman
Analisis mendalam struktur
- Berikut arsitektur Genie, copilot on-call
- Singkatnya, data di-scrape dari sumber internal seperti wiki internal Uber, Stack Overflow internal, dan dokumen persyaratan engineering, lalu vektor dibuat dari sumber-sumber ini menggunakan model embedding OpenAI
- Embedding tersebut disimpan di database vektor
- Lalu ketika pengguna mem-posting pertanyaan di channel Slack, pertanyaan tersebut diubah menjadi embedding
- Service kemudian mengambil embedding yang relevan dengan pertanyaan dari database vektor
- Hasil yang diindeks dengan embedding digunakan sebagai prompt untuk LLM guna mendapatkan respons
Tahap push artefak untuk persiapan data, embedding, dan serving dapat digeneralisasi sebagai aplikasi RAG yang menggunakan Apache Spark™. Langkah-langkah umum ini membentuk fondasi aplikasi RAG
ETL
Persiapan data
- Aplikasi Spark mengambil konten dari setiap sumber data menggunakan API Engwiki Uber atau Uber Stack Overflow
- Tahap persiapan data ini menghasilkan Spark DataFrame
- Skemanya memiliki tautan Engwiki di satu kolom dan isi Engwiki di kolom lain, keduanya dalam format string
Pembuatan embedding
- Setelah data di-scrape, embedding dibuat menggunakan model embedding OpenAI dan di-push ke Terrablob, blob storage milik Uber
- Embedding yang dihasilkan hanya dapat diakses melalui channel Slack tertentu yang terkait dengan ruang Engwiki
- Format output-nya adalah DataFrame dengan skema yang memetakan isi chunk ke vektor yang sesuai untuk chunk tersebut
- Konten wiki internal Uber dipecah menjadi chunk menggunakan langchain, dan embedding dibuat oleh OpenAI melalui PySpark UDF
Pusher
- Menunjukkan cara mendorong vektor ke Terrablob
- Memperlihatkan bagaimana vektor di-push
- Bootstrap job dipicu untuk mengumpulkan data dari sumber data ke Sia
- Sia adalah solusi database vektor internal Uber
- Lalu dua job Spark dipicu untuk build dan merge indeks, serta mengumpulkan data ke Terrablob
- Semua leaf menyinkronkan dan mengunduh indeks dasar serta snapshot yang disimpan di Terrablob
- Saat pencarian, query dikirim langsung ke setiap leaf
Knowledge Service
- Genie memiliki backend service bernama Knowledge Service
- Service ini terlebih dahulu mengubah query yang masuk menjadi embedding, lalu mengambil chunk yang paling relevan dari database vektor untuk merespons permintaan atas semua query yang masuk
Pelacakan biaya
- Untuk pelacakan biaya, ketika klien Slack atau platform lain memanggil Knowledge Service, UUID diteruskan ke Knowledge Service
- Lalu Knowledge Service meneruskan UUID tersebut ke Michelangelo Gateway melalui context header
- Michelangelo Gateway adalah layanan pass-through ke LLM, sehingga dapat menambahkannya ke audit log yang digunakan untuk melacak biaya berdasarkan UUID tersebut
Evaluasi performa Genie
Cara pengukuran
-
Pengguna dapat langsung memberikan umpan balik di Slack dengan mengklik tombol yang relevan pada jawaban Genie
-
Pengguna diberi opsi untuk memilih salah satu dari berikut ini:
- Terselesaikan: jawaban sepenuhnya menyelesaikan masalah
- Membantu: jawaban sebagian membantu, tetapi pengguna masih memerlukan bantuan lebih lanjut
- Tidak membantu: respons salah atau tidak relevan
- Tidak relevan: pengguna memerlukan dukungan on-call dan Genie tidak dapat membantu dalam kasus ini, misalnya code review
-
Ketika pengguna meninggalkan umpan balik, plugin Slack akan mengambilnya dan men-stream umpan balik beserta metadata terkait ke tabel Hive menggunakan topik Kafka tertentu
-
Metrik-metrik ini kemudian divisualisasikan di dashboard
Evaluasi performa
- Pengguna Genie diberi opsi untuk menjalankan evaluasi kustom
- Pengguna dapat mengevaluasi halusinasi, relevansi jawaban, atau metrik lain yang mereka anggap penting untuk use case mereka
- Evaluasi ini dapat digunakan untuk melakukan tuning yang lebih baik terhadap semua komponen RAG yang relevan, seperti retrieval dan generation
Proses evaluasi adalah pipeline ETL terpisah yang menggunakan komponen Michelangelo yang sudah dibangun. Konteks dan respons Genie diambil dari Hive lalu di-join dengan data relevan lainnya seperti metadata Slack dan umpan balik pengguna. Setelah diproses, data diteruskan ke Evaluator. Evaluator mengambil prompt yang ditentukan lalu menjalankan LLM sebagai Judge. Metrik yang ditentukan diekstraksi dan dimasukkan ke laporan evaluasi, yang dapat diakses pengguna melalui UI
Evaluasi dokumen
- Pengambilan informasi yang akurat bergantung pada kejelasan dan akurasi dokumen sumber
- Jika kualitas dokumennya sendiri rendah, tidak ada cara bagi LLM untuk memberikan performa yang baik, sebaik apa pun kerjanya
- Karena itu, kemampuan untuk mengevaluasi dokumen dan memberikan saran yang dapat ditindaklanjuti untuk meningkatkan kualitas dokumen sangat penting bagi sistem RAG yang efisien dan efektif
Menunjukkan workflow aplikasi evaluasi dokumen. Setelah data di-scrape, dokumen dalam knowledge base diubah menjadi Spark DataFrame. Setiap baris DataFrame mewakili satu dokumen dalam knowledge base. Lalu LLM dipanggil sebagai Judge untuk memproses evaluasi. Di sini, prompt evaluasi kustom digunakan untuk memberi input ke LLM. LLM mengembalikan skor evaluasi beserta penjelasan atas skor tersebut dan saran yang dapat ditindaklanjuti untuk meningkatkan kualitas tiap dokumen. Semua metrik ini dipublikasikan sebagai laporan evaluasi yang dapat diakses pengguna di UI Michelangelo
Solusi atas tantangan
- Untuk mengurangi halusinasi, cara mengirim prompt yang diperoleh dari database vektor ke LLM diubah
- Untuk semua hasil yang diperoleh dari database vektor, source URL yang sesuai ditambahkan secara eksplisit bersama konteks parsial
- LLM diminta untuk hanya memberikan jawaban berdasarkan berbagai sub-konteks yang diberikan dan mengembalikan source URL untuk mengutip jawaban
- Diupayakan agar setiap jawaban menyertakan source URL
- Agar tidak membocorkan sumber data ke OpenAI saat membuat embedding atau ke Slack untuk orang-orang yang tidak memiliki akses ke sumber data penting, sumber data yang tersedia luas bagi sebagian besar engineer Uber dikurasi terlebih dahulu, dan hanya sumber data tersebut yang diizinkan untuk pembuatan embedding
- Untuk memaksimalkan potensi Genie dalam menjawab pertanyaan, mode interaksi baru dikembangkan
- Dalam mode ini, pengguna dapat lebih mudah mengajukan pertanyaan lanjutan dan didorong untuk membaca jawaban Genie dengan lebih saksama
- Jika Genie tidak dapat menjawab pertanyaan, pengguna dapat dengan mudah mengeskalasi masalah ke dukungan on-call
Dalam mode interaksi baru, ketika pengguna mengajukan pertanyaan, Genie menjawab bersama tombol tindakan langkah berikutnya yang disediakan. Dengan tombol-tombol ini, pengguna dapat dengan mudah mengajukan pertanyaan lanjutan, menandai pertanyaan sebagai terselesaikan, atau menghubungi bantuan manusia
Hasil
- Sejak diluncurkan pada September 2023, Genie telah memperluas jangkauannya ke 154 channel Slack dan menjawab lebih dari 70 ribu pertanyaan
- Genie membanggakan tingkat kegunaan 48,9%, yang menunjukkan efektivitasnya terus meningkat
- Sejak peluncuran hingga saat ini, Genie diperkirakan telah menghemat 13.000 jam kerja engineering
Masa depan
- Genie adalah bot Slack mutakhir yang dirancang untuk menyederhanakan manajemen on-call, mengoptimalkan respons insiden, dan meningkatkan kolaborasi tim
- Dikembangkan dengan fokus pada kesederhanaan dan efektivitas, Genie berperan sebagai asisten komprehensif yang membantu tim engineering menangani tanggung jawab on-call dengan lancar
- Copilot asisten on-call ini dapat mengubah keseluruhan pengalaman cara pengguna dan engineer on-call berinteraksi dan terlibat di dalam channel Slack setiap platform
- Selain itu, di dalam setiap produk seperti Michelangelo atau IDE, pengalaman ini juga dapat berubah sehingga pengguna bisa menemukan bantuan khusus produk di channel Slack khusus produk atau di dalam produk itu sendiri tanpa harus menunggu dukungan on-call
Kesimpulan
- Copilot asisten on-call Genie merevolusi cara tim engineering mengelola tugas on-call
- Dengan mendorong penyelesaian otomatis dan memberikan analisis yang berwawasan, Genie membantu tim menangani tanggung jawab on-call secara efisien dan efektif
Opini GN⁺
- Genie adalah copilot on-call inovatif yang menjawab pertanyaan pengguna di banyak channel Slack Uber, menghemat waktu engineer dan meningkatkan pengalaman pengguna
- Keberhasilan Genie menunjukkan perpaduan kuat antara teknologi machine learning dan keahlian manusia. Ia memanfaatkan data berskala besar dan LLM untuk memberikan jawaban yang akurat dan berguna atas pertanyaan
- Namun, Genie masih memiliki keterbatasan dan ruang untuk perbaikan. Masalah halusinasi belum sepenuhnya teratasi, dan terkadang masih bisa memberikan informasi yang tidak akurat atau menyesatkan. Sistem ini perlu terus ditingkatkan melalui pemantauan berkelanjutan dan umpan balik pengguna
- Pertimbangan lain adalah keamanan data dan privasi. Data yang diproses Genie bisa bersifat sensitif dan rahasia, sehingga penanganan yang aman dan kontrol akses sangat penting
- Ke depan, Genie dapat berkembang dengan meningkatkan kualitas jawaban, mengintegrasikan lebih banyak sumber data, dan memperkuat keamanan. Mungkin juga untuk memperluas copilot serupa Genie ke area bisnis lainnya
- Dari dukungan pelanggan otomatis, dukungan penjualan, hingga bahkan dukungan coding, asisten berbasis AI dapat diterapkan pada berbagai tugas. Alat-alat ini dapat meningkatkan produktivitas karyawan dan memperbaiki pengalaman pengguna
- Secara keseluruhan, Genie adalah contoh menarik tentang bagaimana AI dan keahlian manusia dapat menghasilkan cara kerja dan layanan pelanggan yang lebih baik. Teknologi seperti ini akan terus berkembang dan diperkirakan berdampak besar pada cara kita bekerja dan berinteraksi
Belum ada komentar.