2018年、私はアイオワ州のテクノロジーコミュニティにおいて、どこに時間を割くべきかを把握するためにネットワークモデルを構築しました。このモデルは、企業、組織、人物、都市、つながりといった要素を約1万個含む規模にまで拡大しました。 私は固有ベクトル中心性を利用して、自分とはつながっていないものの、他の場所との接続性が高いノードを抽出しました。この分析は実際の意思決定に影響を与えました。TAIの理事会に参加したり、存在すら知らなかったコミュニティを見つけたり、デモインと沿岸部のエコシステム間の密度の違いを可視化したりしたのです。

そのモデルは私の心に残りました。Braleでの長年にわたり、フォースダイレクテッド方式の関係グラフが繰り返し登場しています――発行体を資産やレールにマッピングしたり、プログラム運営者を彼らが運用するブロックチェーンに結びつけたりするのです。 そのたびに、誰かが視覚的な表現方法を再発明しています。色にはどのような意味があるのか?太い線は何を表すのか?企業、個人、イベントを区別する形状とは?こうした決定は、プロジェクトごとに一から行われます。次にそのグラフを開く人は、内容を理解する前に、これらすべてをリバースエンジニアリングしなければなりません。

昨年、CSF(Commons Stablecoin Format)が資金の流れの描き方を標準化しました。仕様をLLMに貼り付け、「stablecoinの資金の流れ」と尋ねれば、毎回そのフォーマットに従って表示されます。 私は、関係グラフについても同様の仕組みを望んでいました。そこで、Graphing Standard Format(GSF)を作成しました。これは、型が形状をどのように決定するか、重みがサイズをどのように決定するか、そして密度レベルがどの情報を開示するかを制御するかを定義する、小さな文法です。

以下は、GSFでレンダリングされた私のネットワークです:

密度
GSF v0.5.2

円は人です。角の丸い長方形は組織です。三角形はイベントで、それを主催する企業とは区別されます。ひし形は場所です。六角形は概念です。丸いアイコンはシステムです。任意のノードをクリックすると、そのプロフィールカードが表示されます。「Medium」に切り替えると色が表示されます。これらを自分で決める必要はありません。GSFが自動的に決定しました。

GSFを初めて使用する様子を紹介する動画はこちらです。なかなかうまくいきましたね!

GSFとCSF

CSF GSF
出力 マーメイドシーケンス図 D3関係グラフ
解答 AからBへ、順序通りに値がどのように変化するか 何が存在し、それらがどのように結びついているか
自然 時間的、段階的に順序づけられた 構造的、非時間的
レベル 軽 / 中 / 重 軽 / 中 / 重

どちらも、ValueType、TransferType、Exchange という同じ値レイヤーのプリミティブを実装しています。グラフは非時間的であるため、CSF から GSF へ移行する際に失われるのはシーケンス順序だけです。

標準

GSFは、可視化そのものではなく、可視化のためのルールを抽出するものです。これを使用する場合、何を表示するかを定義すれば、フォーマット側がどのように表示するかを処理します。これにより、プロジェクト間でベースラインの一貫性が保たれます。

3つのポイント:

  • GSFはルールセットです。決して可視化されることはありません。
  • データセットとは{view, nodes, links} GSFに準拠したインスタンスです。これがレンダリングの対象となります。
  • レンダラーは、ルールとデータセットを受け取り、画像を描画します。

4つのプリミティブ。レンダラーに必要なものはすべてこれです:

  1. 関係 – 正確に2つのエンティティ間のリンク。リンクがグラフを構成する。
  2. タイプ – 質的な分類子。形状や色を決定します。
  3. 変数 – 詳細を格納する袋。タイプが扱わないすべての情報を保持します。
  4. 重み – 定量的な大きさ。サイズや幅を決定します。

エンコーディングのルール:値(value)対値(values)。1つの定量的値(数値であり、 weight)がサイズと幅を決定します。質的な値(カテゴリ、ステータス、ラベル)が、形状、色、グループ化、およびホバー時に表示される内容を決定します。

特筆すべき設計上の選択が一つあります。それは、関係タイプがオープンな文字列であるという点です。固定されたリストは存在しません。データセットは、必要なタイプを自由に定義します。上記のグラフでは founder, cofounder, spinoutoperatesを使用していますが、いずれも仕様には含まれていません。それでも問題なくレンダリングされました。GSFが修正するのはエンコーディング(タイプがどのように形状や色になるか)であり、語彙(使用が許可されているタイプ)ではありません。

密度

CSFと同じダイヤルです。レンダラーがどの程度の詳細度と色を表示するかを示します:

  • Light – 白黒。形状でタイプを、線のスタイルで関係クラスを(実線=値、破線=データ、点線=派生値)、太さで大きさを、矢印の先端で方向を表します。色は使用しません。印刷用です。
  • – オーバーレイとして色を追加し、凡例を表示し、ホバー時に変数を表示します。
  • ヘビー – 完全な記録。すべての変数、転送エンドポイント、拡張アフォーダンス。

唯一のルール:ライトモードは白黒でも判読可能でなければならない。色は決して唯一の信号であってはならない。

フォーマット

リンクには source, destination、および typeが必要です。それ以外はすべて任意です:

{
  "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" }
  ]
}

バリューレイヤーのグラフでは、エンドポイントオブジェクトは value_typetransfer_type を保持します。これらが異なる場合、それは交換を示し――そして via 交換者を指定します:

{
  "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 }
    }
  ]
}

使用方法

gsf-0.5.2.jsonをLLMに貼り付け、ソース資料をGSFデータセットに変換するよう依頼してください。毎回、CSFと同様に所定の形式に従います。仕様書の llm_instructions 仕様書のこのブロックは、機械が直接処理できるように設計されています。最新バージョンについては、GSFリポジトリをご確認ください。

この標準はオープンソースです:github.com/benmilne-com/standards/gsf。フォークして、利用し、貢献してください。

構造は自由です。