Salam Devs, Pie kabare ? semoga sehat” ya.
Kesulitan business user ketika ingin bermain dengan data mereka di database relasional biasanya karena tidak memiliki pengetahuan tentang query SQL. Nah akhirnya yang dipanggil temen-temen DBA, Dev atau siapa pun itu yang ngerti. Ternyata eh ternyata si LLM itu punya kemampuan generate SQL yang cukup mumpuni terutama GPT-4.
Nah kali ini kita akan coba bikin web yang bisa ngubah query dengan natural language ke SQL, lalu kita raba-raba struktur datanya kita coba tampilkan juga sebagai chart jika memungkinkan. Hmmm kaya pernah lihat fitur serupa deh di salah satu produk microsoft, ya Anda benar produk Power BI punya kemampuan ini. 1 untuk Anda, 100 untuk saya ;D
Cara kerjanya begini:
- Kita kasih konteks si LLM ini dengan struktur database relational kita, berupa nama skema, tabel, kolom, deskripsinya dan juga relasi antar tabelnya. Biar dia ga ngayal aka halusinasi
- Selanjutnya kita validasi apakah permintaan (prompt) dari pengguna itu bisa digenerate ke dalam query SQL, contoh: kalau pengguna minta dipijitin ya kagak bisa khan tong jadi query SQL.. ;D
- Kemudian kita minta LLM itu untuk generate query, kita pastiin apakah dengan konteks (struktur schema database) yang ada kita bisa generate query sql berdasarkan request (prompt) dari pengguna, intinya kalau user minta data sales tapi adanya data siswa, kumaha maliiih…
- Setelah kita dapatkan query SQL-nya, nah coba deh tu dijajal query ke database, kali ini kita cuma coba ke SQL Server ya, kapan-kapan temen-temen bikinlah buat versi database lain. Kalau ternyata gagal ya minta maaf aja ke user haha, karena kadang-kadang SQL query yang digenerate belum tentu keywordnya di support SQL Server, jadi silakan temen-temen mikir dah tu gimana cara handlenya
- Kalau berhasil didapetin tuh table hasil querynya tinggal dilihat dah, apakah struktur yang ada cocok dijadiin visualisasi apa ? defaultnya ya pasti tabel, lainnya bisa dijadiin chart, mungkin bar chart yang muat series yang banyak, atau pie chart yang cocok buat beberapa item terbatas yang menunjukan proporsinya, atau line untuk lihat trend berdasarkan waktu, dsb. Nah disini temen-temen nalar dikitlah
Nah, kebanyakan teori ya? haha yasud kita menuju TKP untuk coba aplikasinya:
- Silakan temen-temen clone repo di Gravicode/NLPSQL: This is demo for visualize relational database with natural language. Powered by SK, Blazor. NET (github.com)
- Terus install SQL Server yang express aja cukup: Download Microsoft® SQL Server® 2019 Express from Official Microsoft Download Center
- Pake SQL Management Studio biar gampang restore databasenya ntar: Download SQL Server Management Studio (SSMS) – SQL Server Management Studio (SSMS) | Microsoft Learn .
- Terus jangan lupa install .NET dan Visual Studio (cari sendiri dah)
- Kemudian kita pake 2 sample database, silakan download sample pertama dari AdventureWorks sample databases – SQL Server | Microsoft Learn download aja yang lightweight biar ga ngabisin space. Sample kedua bisa di download dari NLPSQL/src/NlpSql.config/sql/DescriptionTest at main · Gravicode/NLPSQL (github.com) bikin dulu database baru dengan nama “DescriptionTest” lalu jalanin tu file sql-nya satu-satu.
- Selanjutnya buka solution NLPSQL.sln dengan Visual Studio, kita akan generate file konfigurasi dengan aplikasi konsol dengan nama “SchemaGenerator”, silakan buka file Program.cs di project Schema Generator, silakan temen-temen sesuaikan connectionstring SQL-nya disitu.
- Nah tool ini akan generate informasi tentang database yang akan kita gunakan, dia akan ngelist schema, tabel, kolom, relasi masing-masing schema database kita menjadi 1 file dengan formal yaml/json. Ini file yang kita pake sebagai konteks saat query ke LLM
- Jika schema sudah berhasil di generate silakan buka project web dengan nama “NlpSql.DemoWeb” silakan buka file appsettings.json, silakan sesuaikan ApiKey OpenAI dan Org, lalu connectionstring untuk ke schema digunakan, dan juga nama schema kita dipisahkan dengan koma.
- Kemudian run web tersebut, silakan coba-coba dengan sample query yang sudah predefined.
- Taaadaaa… asyik ya, kalau masih banyak kurang-kurang ya maafin. Khan kalau terlalu pinter AI-nya kesian juga ntar ada yang kehilangan pekerjaan haha…
- Nampilin chart juga oke ya
Semoga bermanfaat, penulis berharap rekan-rekan bisa kembangin lagi untuk support database lain kaya MySQL, Oracle, dsb. atau bisa juga support lebih banyak jenis chart dan visualisasi data.
Salam produktif 😀