Im Jahr 2018 habe ich ein Netzwerkmodell erstellt, um herauszufinden, wo ich meine Zeit in der Technologie-Community von Iowa am besten investieren sollte. Das Modell wuchs auf rund 10.000 Elemente an – Unternehmen, Organisationen, Personen, Städte, Verbindungen. Ich nutzte die Eigenvektor-Zentralität, um Knoten zu identifizieren, mit denen ich nicht verbunden war, die aber anderswo eine hohe Vernetzung aufwiesen. Das beeinflusste konkrete Entscheidungen: Ich trat dem TAI-Vorstand bei, entdeckte Communities, von deren Existenz ich nichts wusste, und kartierte Dichteunterschiede zwischen Des Moines und den Ökosystemen an der Küste.

Dieses Modell hat mich nicht mehr losgelassen. Im Laufe der Jahre bei Brale tauchen immer wieder kraftgesteuerte Beziehungsgraphen auf – sie ordnen Emittenten Vermögenswerten und Schienen zu und verbinden Programmbetreiber mit den Blockchains, auf denen sie laufen. Jedes Mal erfindet jemand die visuelle Sprache neu. Was bedeutet eine Farbe? Was stellt eine dicke Linie dar? Welche Form unterscheidet ein Unternehmen von einer Person oder einem Ereignis? Diese Entscheidungen werden bei jedem Projekt neu getroffen. Die nächste Person, die das Diagramm öffnet, muss alles erst rückentwickeln, bevor sie den Inhalt lesen kann.

Im vergangenen Jahr hat das CSF (Commons Stablecoin Format) die Darstellung von Geldflüssen standardisiert. Fügt man die Spezifikation in ein LLM ein und fragt nach einem Geldfluss im „stablecoin“-Format, hält sich das Modell jedes Mal an dieses Format. Das Gleiche wollte ich für Beziehungsgraphen. Also habe ich das „Graphing Standard Format“ – GSF – geschrieben, eine kleine Grammatik, die definiert, wie der Typ die Form bestimmt, wie das Gewicht die Größe bestimmt und wie Dichteebenen steuern, was offengelegt wird.

Dies ist mein Netzwerk, dargestellt im GSF:

Dichte
GSF v0.5.2

Kreise stehen für Personen. Abgerundete Rechtecke stehen für Organisationen. Dreiecke stehen für Ereignisse – unabhängig von den Unternehmen, die sie veranstalten. Rauten stehen für Orte. Sechsecke stehen für Konzepte. Pillen stehen für Systeme. Klicken Sie auf einen beliebigen Knoten, um dessen Profilkarte anzuzeigen. Schalten Sie auf „Medium“ um, um die Farben zu sehen. Sie mussten sich über nichts davon Gedanken machen. Das hat GSF für Sie übernommen.

Hier ist ein Video, das die erstmalige Nutzung von GSF demonstriert. Es hat seine Sache ziemlich gut gemacht!

GSF und CSF

CSF GSF
Ausgabe Mermaid-Sequenzdiagramme D3-Beziehungsdiagramme
Antworten Wie der Wert schrittweise von A nach B gelangt, in der richtigen Reihenfolge Was existiert und wie es miteinander verbunden ist
Natur Zeitlich, schrittweise geordnet Strukturell, nicht zeitlich
Ebenen Leicht / Mittel / Schwer Leicht / Mittel / Schwer

Beide implementieren dieselben Primitive der Werteebene: ValueType, TransferType, Exchange. Der einzige Verlust beim Übergang von CSF zu GSF ist die Reihenfolge der Abfolge, da Graphen nicht-temporal sind.

Der Standard

GSF fasst die Regeln für die Visualisierung zusammen – nicht die Visualisierung selbst. Wenn er verwendet wird, bedeutet dies, dass Sie definieren, was angezeigt werden soll, und das Format regelt, wie es dargestellt wird. Die Basis bleibt projektübergreifend konsistent.

Drei Dinge:

  • GSF ist der Regelsatz. Er wird niemals visualisiert.
  • Ein Datensatz ist eine {view, nodes, links} Instanz, die dem GSF entspricht. Diese wird gerendert.
  • Ein Renderer nimmt die Regeln sowie einen Datensatz und zeichnet das Bild.

Vier Grundelemente. Alles, was ein Renderer benötigt:

  1. Beziehung – eine Verbindung zwischen genau zwei Entitäten. Verbindungen bilden den Graphen.
  2. Typ – der qualitative Klassifikator. Bestimmt Form und Farbe.
  3. Variablen – die Detailmenge. Enthält alles, was der Typ nicht abdeckt.
  4. Gewicht – die quantitative Größe. Bestimmt Größe und Breite.

Die Kodierungsregel: Wert vs. Werte. Der eine quantitative Wert (eine Zahl, die in weight) bestimmt Größe und Breite. Die qualitativen Werte (Kategorie, Status, Bezeichnung) bestimmen Form, Farbe, Gruppierung und die Anzeige beim Überfahren mit der Maus.

Eine Designentscheidung, die besonders hervorzuheben ist: Beziehungstypen sind offene Zeichenfolgen. Es gibt keine geschlossene Liste. Ein Datensatz definiert die Typen, die er benötigt – mein obiges Diagramm verwendet founder, cofounder, spinoutund operates, von denen keiner in der Spezifikation enthalten ist. Die Darstellung funktionierte einwandfrei. GSF legt die Kodierung fest (wie Typen zu Formen und Farben werden), nicht das Vokabular (welche Typen man verwenden darf).

Dichte

Gleiche Einstellmöglichkeit wie bei CSF. Wie viele Details und wie viel Farbe ein Renderer anzeigt:

  • Leicht – schwarz-weiß. Die Form kodiert den Typ, der Linienstil die Beziehungsklasse (durchgehend = Wert, gestrichelt = Daten, gepunktet = abgeleitet), die Strichstärke die Größe und die Pfeilspitze die Richtung. Keine Farbe. Druckfertig.
  • Mittel – fügt Farbe als Überlagerung, eine Legende und Variablen beim Darüberfahren mit der Maus hinzu.
  • Intensiv – die vollständige Darstellung. Alle Variablen, Übertragungsendpunkte, Erweiterungsmöglichkeiten.

Eine Regel: „Leicht“ muss in Schwarz-Weiß lesbar sein. Farbe ist niemals das einzige Signal.

Das Format

Ein Link benötigt source, destinationund type. Alles andere ist optional:

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

Bei Diagrammen der Werteebene tragen Endpunkt-Objekte value_type und transfer_type auf jeder Seite. Wenn sie sich unterscheiden, signalisiert dies einen Austausch – und via bezeichnet den Austauscher:

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

Anwendung

Fügen Sie „gsf-0.5.2.json“ in ein LLM ein und bitten Sie es, das Ausgangsmaterial in einen GSF-Datensatz zu konvertieren. Es hält sich jedes Mal an das Format – genau wie bei CSF. Der llm_instructions Block in der Spezifikation ist so konzipiert, dass er direkt von Maschinen verarbeitet werden kann. Die neueste Version finden Sie im GSF-Repository.

Der Standard ist Open Source: github.com/benmilne-com/standards/gsf. Forken, nutzen, mitwirken.

Struktur ist frei.