Pada tahun 2018, saya membangun model jaringan untuk menentukan di mana sebaiknya saya menginvestasikan waktu saya dalam komunitas teknologi Iowa. Model tersebut berkembang hingga mencakup sekitar 10.000 elemen—perusahaan, organisasi, individu, kota, dan konektivitas. Saya menggunakan eigenvector centrality untuk mengidentifikasi simpul-simpul yang belum terhubung dengan saya namun memiliki konektivitas tinggi di tempat lain. Hal ini memengaruhi keputusan nyata: saya bergabung dengan dewan TAI, menemukan komunitas yang sebelumnya tidak saya ketahui keberadaannya, dan memetakan perbedaan kepadatan antara Des Moines dan ekosistem pesisir.
Model itu terus melekat dalam ingatan saya. Selama bertahun-tahun di Brale, grafik hubungan berbasis gaya (force-directed) terus muncul – memetakan penerbit ke aset ke rel, menghubungkan operator program ke blockchain yang mereka jalankan. Setiap kali, seseorang menciptakan kembali bahasa visual tersebut. Apa arti sebuah warna? Apa yang diwakili oleh garis tebal? Bentuk apa yang membedakan perusahaan dari orang hingga peristiwa? Keputusan-keputusan ini dibuat ulang pada setiap proyek. Orang berikutnya yang membuka grafik tersebut harus menganalisis balik semuanya sebelum dapat memahami isinya.
Tahun lalu, CSF (Commons Stablecoin Format) menstandarkan cara kita menggambarkan aliran dana. Tempelkan spesifikasinya ke dalam LLM, minta aliran dana "stablecoin", dan LLM tersebut akan mengikuti format tersebut setiap kali. Saya menginginkan hal yang sama untuk grafik hubungan. Jadi, saya menulis Graphing Standard Format – GSF – sebuah tata bahasa kecil yang mendefinisikan bagaimana tipe menentukan bentuk, bagaimana bobot menentukan ukuran, dan bagaimana tingkat kepadatan mengontrol apa yang diungkapkan.
Ini adalah jaringan saya, yang ditampilkan dalam GSF:
Lingkaran mewakili orang. Persegi panjang bulat mewakili organisasi. Segitiga mewakili acara – berbeda dari perusahaan yang menyelenggarakannya. Berlian mewakili tempat. Segi enam mewakili konsep. Bentuk pil mewakili sistem. Klik node mana pun untuk melihat kartu profilnya. Aktifkan mode Medium untuk melihat warnanya. Anda tidak perlu memutuskan semua itu. GSF yang melakukannya.
Berikut adalah video yang mendemonstrasikan penggunaan GSF untuk pertama kalinya. Hasilnya cukup bagus!
GSF dan CSF
| CSF | GSF | |
|---|---|---|
| Hasil | Diagram urutan Mermaid | Grafik hubungan D3 |
| Jawaban | Bagaimana nilai berpindah dari A ke B, secara berurutan | Apa saja yang ada dan bagaimana keterkaitannya |
| Alam | Temporal, berurutan per langkah | Struktural, non-temporal |
| Tingkat | Ringan / Sedang / Berat | Ringan / Sedang / Berat |
Keduanya mengimplementasikan primitif lapisan nilai yang sama: ValueType, TransferType, Exchange. Satu-satunya kerugian saat beralih dari CSF ke GSF adalah urutan sekuensial, karena graf bersifat non-temporal.
Standar
GSF merangkum aturan untuk visualisasi – bukan visualisasinya sendiri. Saat digunakan, artinya Anda menentukan apa yang akan ditampilkan dan format tersebut yang mengatur cara menampilkannya. Dasar-dasarnya tetap konsisten di seluruh proyek.
Tiga hal:
- GSF adalah kumpulan aturan. Tidak pernah divisualisasikan.
- Kumpulan data adalah
{view, nodes, links}instansi yang sesuai dengan GSF. Inilah yang akan dirender. - Sebuah renderer mengambil aturan tersebut ditambah dataset dan menggambar gambarnya.
Empat elemen dasar. Segala yang dibutuhkan oleh renderer:
- Hubungan – hubungan antara tepat dua entitas. Hubungan-hubungan ini membentuk graf.
- Tipe – pengklasifikasi kualitatif. Menentukan bentuk dan warna.
- Variabel – wadah detail. Menyimpan segala hal yang tidak ditangani oleh tipe.
- Bobot – besaran kuantitatif. Menentukan ukuran dan lebar.
Aturan pengkodean: nilai tunggal vs nilai-nilai. Nilai kuantitatif tunggal (sebuah angka, yang dibawa dalam weight) menentukan ukuran dan lebar. Nilai-nilai kualitatif (kategori, status, label) menentukan bentuk, warna, pengelompokan, dan apa yang ditampilkan saat kursor melayang.
Satu pilihan desain yang patut disoroti: jenis hubungan berupa string terbuka. Tidak ada daftar tertutup. Sebuah kumpulan data mendefinisikan jenis apa pun yang dibutuhkannya – grafik saya di atas menggunakan founder, cofounder, spinout, dan operates, yang tidak ada satupun tercantum dalam spesifikasi. Hasil rendernya baik-baik saja. GSF mengatur pengkodean (bagaimana jenis diubah menjadi bentuk dan warna), bukan kosakata (jenis apa saja yang boleh Anda gunakan).
Kepadatan
Skala yang sama seperti CSF. Seberapa banyak detail dan warna yang ditampilkan oleh renderer:
- Ringan – hitam dan putih. Bentuk mengkodekan jenis, gaya garis mengkodekan kelas hubungan (garis padat = nilai, garis putus-putus = data, garis bertitik = turunan), ketebalan mengkodekan besaran, ujung panah mengkodekan arah. Tanpa warna. Siap cetak.
- Sedang – menambahkan warna sebagai lapisan, legenda, dan variabel saat kursor diarahkan.
- Tebal – catatan lengkap. Semua variabel, titik akhir transfer, dan kemampuan ekspansi.
Satu aturan: Ringan harus dapat dibaca dalam hitam-putih. Warna tidak pernah menjadi satu-satunya sinyal.
Format
Sebuah tautan memerlukan source, destination, dan type. Selebihnya bersifat opsional:
{
"format": "gsf",
"version": "0.5.2",
"renderer": "d3-force",
"view": { "level": "light", "hops": 1, "focus": ["Person A"] },
"links": [
{ "source": "Person A", "destination": "Person B", "type": "message" }
]
}
Untuk grafik lapisan nilai, objek titik akhir membawa value_type dan transfer_type di setiap sisinya. Jika keduanya berbeda, hal ini menandakan adanya pertukaran – dan via menyebutkan nama penukar:
{
"format": "gsf",
"version": "0.5.2",
"renderer": "d3-force",
"view": { "level": "heavy", "hops": 1, "focus": ["Brale"] },
"nodes": [
{ "id": "Sender", "type": "org" },
{ "id": "Brale", "type": "org", "variables": { "sub_type": "exchange" } },
{ "id": "Recipient Wallet", "type": "system", "variables": { "sub_type": "wallet" } }
],
"links": [
{
"source": { "id": "Sender", "value_type": "USD", "transfer_type": "wire" },
"destination": { "id": "Recipient Wallet", "value_type": "USDC", "transfer_type": "solana" },
"type": "transfers_via",
"via": "Brale",
"weight": 1000,
"variables": { "exchange": "USD -> USDC", "rate": 1.0 }
}
]
}
Cara menggunakannya
Tempelkan gsf-0.5.2.json ke dalam LLM dan minta LLM tersebut untuk mengubah materi sumber menjadi dataset GSF. Formatnya selalu sama – sama seperti CSF. llm_instructions blok dalam spesifikasi dirancang untuk langsung diproses oleh mesin. Periksa repositori GSF untuk versi terbaru.
Standar ini bersifat open-source: github.com/benmilne-com/standards/gsf. Buat fork, gunakan, dan berkontribusilah.
Strukturnya bebas.