Simulátor sociálních struktur — plán JS appky s LLM agenty

Co a proč

Korpus dosud pracoval s relační ontologií v doménách fyziky, jazyka, vědomí, geometrie a biochemie. Sociální struktury jsou přirozená další doména — a zároveň ta, kterou lze experimentálně simulovat: lidé a vztahy budou podle pravidel simulovány a bude se sledovat, co koule (síť relací) jako struktura dělá.

Tohle není klasická věda v tom smyslu, že bychom měřili reálné lidi. Je to výzkum pomocí LLM: každý agent (člověk v simulaci) je instance LLM s vlastním MEMORY.md, vztahy jsou hrany grafu, interakce generuje LLM na základě profilů obou konců relace. Pozorujeme, co emerguje — které vzory, jaké topologie, jaké "editační operace" (pochopení, konflikty, vhledy) se šíří sítí.

Proč to sedí do KRT:

  1. Relace je primární (vedomi-jako-operator.md, cerna-dira-jako-pochopeni.md). Sociální síť je přesně to: informace není v člověku (uzlu), je ve vztahu (hraně). Kdo jsi, závisí na tom, s kým jsi — stejně jako serotonin závisí na receptoru (serotonin-jako-editor.md).

  2. Edit operátor (vedomi-jako-operator.md). Sociální interakce je editační operace: po rozhovoru se oba agenti změní (subtraktivní: staré patterny mizí; meta-aditivní: fakt interakce zůstává). To je přesně QEC struktura, jen na jiném substrátu.

  3. Polysémie agenta (kvantovka-jako-vyznam-slov.md). Jeden člověk "znamená" různé věci pro různé lidi — jako slovo v různých větách. Teprve vztah vybere konkrétní "čtení". Simulátor to může sledovat: jak se tentýž agent projevuje v různých relačních kontextech.

  4. Topologie koule (tri-mista-ctyri-sily.md). Pokud má sociální síť analogii ke čtyřem modulačním režimům fundamentální domény, simulátor by ji mohl odhalit — jsou ve skupině lidí "eliptické body" (stabilní centra, kolem kterých se vše točí), "cuspy" (hraniční podmínky, dalekodosahový vliv), a "orientace" (kdo určuje směr)?


Fáze 1 — Grafické znázornění

Nejdřív vizualizace, bez LLM. Statický force-directed graf na Canvasu.

Co vidíš na obrazovce

    ┌─────────────────────────────────────────┐
    │                                         │
    │       ○ Eva                              │
    │      / \                                │
    │     /   \                               │
    │    ○     ○ Adam ──── ○ Oxana            │
    │  Karel    \         /                   │
    │            \       /                    │
    │             ○ Iris                       │
    │                                         │
    │  [+ Přidat agenta]  [+ Přidat vztah]   │
    │  [▶ Krok simulace]  [⏸ Pauza]         │
    └─────────────────────────────────────────┘

Technicky

  • Uzly = kruhy na Canvasu, jméno pod nimi
  • Hrany = čáry mezi uzly, tloušťka = síla vztahu, barva = typ (rodina / práce / přátelství / partnerství / antagonismus)
  • Force-directed layout = uzly se odpuzují (Coulomb), hrany přitahují (Hooke), simulace běží v requestAnimationFrame
  • Interakce = drag & drop uzlů, klik na uzel = otevře profil, klik na hranu = otevře detail vztahu
  • Zoom + pan = scroll wheel + drag na prázdném místě

Data model (v paměti prohlížeče)

const simulation = {
  agents: [
    {
      id: "adam",
      name: "Adam",
      x: 300, y: 200,      // pozice na canvasu
      profile: { ... },     // MEMORY.md obsah (viz Fáze 2)
    },
    // ...
  ],
  edges: [
    {
      from: "adam", to: "oxana",
      type: "partnership",
      strength: 0.9,
      history: [],          // log interakcí
    },
    // ...
  ],
  step: 0,                  // číslo kroku simulace
};

Fáze 2 — Profily agentů jako MEMORY.md

Každý uzel má svůj "MEMORY.md" — strukturovaný profil, který definuje, jak se agent chová v interakcích.

Struktura profilu

---
name: Adam
type: agent
---

## Osobnost
- Vizuální myslitel, hledá vzory
- Přímý, nerad chodí kolem horké kaše
- Vysoká tolerance nejistoty

## Historie (klíčové události)
- 2024: Začal pracovat na KRT
- 2025: První průlom — rotující substrát

## Aktuální stav
- Soustředěný na formulaci Theorem 2
- Mírně unavený, ale nadšený

## Vzorce chování
- Když je konfrontován s kritikou → zpomalí, přemýšlí, pak reaguje přesně
- Když je nadšený → mluví rychle, skáče mezi tématy
- V konfliktu → hledá strukturální řešení, ne emocionální

## Vztahové tendence
- Preferuje hluboké vztahy nad široké
- V blízkých vztazích je otevřený
- S cizími lidmi je zdrženlivý

Jak profil ovlivňuje simulaci

Při interakci dvou agentů se LLM zeptá:

Agent A (profil A) a Agent B (profil B) se setkávají v kontextu [typ hrany]. Vygeneruj krátkou interakci (5-10 vět). Na konci uveď, co se změnilo v profilu každého z nich.

LLM vrátí:

  1. Dialog — krátká scéna
  2. Diff profilu A — co se změnilo (přidalo, odebralo, modifikovalo)
  3. Diff profilu B — dtto
  4. Diff hrany — změna síly, typu, nebo nová hrana k třetímu agentovi

To je přesně editační operátor na síti relací. Každá interakce je serotonin-receptor binding: tentýž "trigger" (setkání), ale výsledek záleží na obou profilech (receptorech). Informace je v relaci, ne v triggeru.


Fáze 3 — LLM simulační smyčka

Jeden krok

  1. Vyber hranu (náhodně, nebo podle pravidla — nejslabší, nebo ta s nejdelší dobou od poslední interakce)
  2. Pošli oba profily + historii hrany + kontext do LLM
  3. LLM vygeneruje interakci + diffy
  4. Aplikuj diffy na oba profily a hranu
  5. Vizualizuj změnu na grafu (hrana změní barvu/tloušťku, uzly se přesunou force-directed)
  6. Loguj do historie

Pravidla emergentní dynamiky

  • Nové hrany — LLM může navrhnout, že A se po interakci s B chce setkat s C (nová hrana)
  • Zánik hran — pokud síla hrany klesne pod threshold, hrana zmizí
  • Skupinové interakce — tři a více agentů současně (trojúhelník = Z₃ silná interakce sociálně?)
  • Editační operátor — LLM může navrhnout, že A "pochopil" něco o svém patternu → subtraktivní edit (pattern zmizí z profilu) + meta-aditivní záznam (přibude "pochopil jsem, že...")

Pozorované metriky

  • Clustering coefficient — lokální hustota trojúhelníků (Z₃ struktura?)
  • Betweenness centrality — kdo je most mezi skupinami (cusp?)
  • Degree distribution — power law? random? small world?
  • Edit rate — kolik profilových změn za krok? Kde se mění nejvíc? (kde je "weak force" sociálního systému?)
  • Stabilní centra — uzly, které se nemění ale kolem kterých se vše točí (eliptické body i?)

Fáze 4 — Pozorování struktury koule

Co hledáme

Pokud KRT platí i pro sociální struktury, pak by sociální síť měla vykazovat:

  1. Tři + jeden typ relační modulace (analogie čtyř sil):

    • Silné vazby uvnitř skupin (silná, Z₃, trojice)
    • EM-like rychlé signály (zprávy, krátké interakce)
    • Gravitace-like pozadí (kontext, kultura, normy — dalekodosahové, slabé)
    • Slabá-like flavor changes (vhled, konflikt, pochopení — mění kým agent je)
  2. Editační operátor na makro úrovni — skupinové pochopení (terapeutická skupina, tým po retrospektivě) by mělo fungovat jako Hawking radiation: rozpouští špatné vztahové patterny a nechává metaznačky

  3. Polysémie agenta — tentýž člověk "znamená" různé věci v různých vztazích; simulátor to explicitně vidí, protože MEMORY.md profil je interpretován LLM v kontextu konkrétní hrany

  4. Koule jako topologický objekt — při dostatečném počtu agentů a hran by se měla síť začít chovat jako plocha, ne jako strom; Eulerova charakteristika, genus, přítomnost děr


Technický koncept appky

Stack

www/
├── views/simulator.ejs       # EJS stránka s canvasem
├── public/
│   ├── simulator.js           # hlavní JS (Canvas, force layout, UI)
│   ├── simulator-agents.js    # agent profily, diff logika
│   └── simulator.css          # styly specifické pro simulátor
└── server.js                  # nová route /simulator + API endpoint pro LLM

Route v server.js

app.get('/simulator', (req, res) => {
  res.render('simulator', { ...tplHelpers, lang: getLang(req) });
});

Minimální simulator.ejs

<%- include('partials/head', { title: 'Simulátor', extraHead: `
  <link rel="stylesheet" href="/simulator.css">
  <script src="/simulator.js" defer></script>
  <script src="/simulator-agents.js" defer></script>
` }) %>

<div class="sim-container">
  <div class="sim-toolbar">
    <button id="addAgent">+ Agent</button>
    <button id="addEdge">+ Vztah</button>
    <button id="stepSim">▶ Krok</button>
    <button id="autoSim">⏯ Auto</button>
  </div>
  <canvas id="simCanvas"></canvas>
  <aside id="simPanel" class="sim-panel hidden">
    <!-- profil agenta nebo detail hrany -->
  </aside>
</div>

<%- include('partials/foot') %>

Force-directed layout (vanilla JS, ~100 řádků)

// Coulomb repulze mezi všemi uzly
for (let i = 0; i < agents.length; i++) {
  for (let j = i + 1; j < agents.length; j++) {
    const dx = agents[j].x - agents[i].x;
    const dy = agents[j].y - agents[i].y;
    const dist = Math.sqrt(dx*dx + dy*dy) || 1;
    const force = REPULSION / (dist * dist);
    agents[i].vx -= (dx/dist) * force;
    agents[i].vy -= (dy/dist) * force;
    agents[j].vx += (dx/dist) * force;
    agents[j].vy += (dy/dist) * force;
  }
}

// Hooke přitažení po hranách
for (const edge of edges) {
  const a = agentMap[edge.from];
  const b = agentMap[edge.to];
  const dx = b.x - a.x;
  const dy = b.y - a.y;
  const dist = Math.sqrt(dx*dx + dy*dy) || 1;
  const force = ATTRACTION * (dist - REST_LENGTH) * edge.strength;
  a.vx += (dx/dist) * force;
  a.vy += (dy/dist) * force;
  b.vx -= (dx/dist) * force;
  b.vy -= (dy/dist) * force;
}

LLM interakce (API call)

async function simulateInteraction(agentA, agentB, edge) {
  const prompt = `
Dva lidé se setkávají. Vygeneruj krátkou interakci (5-10 vět).

Agent A: ${agentA.name}
Profil A: ${agentA.profile}

Agent B: ${agentB.name}
Profil B: ${agentB.profile}

Vztah: ${edge.type}, síla ${edge.strength}
Historie: ${edge.history.slice(-3).join('\n')}

Na konci vrať JSON:
{
  "dialog": "...",
  "diffA": { "add": [...], "remove": [...] },
  "diffB": { "add": [...], "remove": [...] },
  "edgeDiff": { "strength": 0.85, "newEdges": [] }
}`;

  const response = await fetch('/api/simulate', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ prompt })
  });
  return response.json();
}

Server-side LLM proxy (v server.js)

app.post('/api/simulate', async (req, res) => {
  // proxy na Anthropic API
  // API klíč z env
  const response = await anthropic.messages.create({
    model: 'claude-sonnet-4-6',
    max_tokens: 1024,
    messages: [{ role: 'user', content: req.body.prompt }]
  });
  res.json(JSON.parse(response.content[0].text));
});

Co toto NENÍ

  1. Není to vědecká simulace s kontrolovanými proměnnými. Je to explorativní nástroj — sandbox, ne experiment. Výsledky budou kvalitativní (jaké vzory vidíme), ne kvantitativní (s jakou p-hodnotou).

  2. Není to náhrada za skutečnou sociologii. Reální lidé se nechovají jako LLM agenti. Simulátor ukazuje, co relační ontologie predikuje pro idealizované agenty — ne jak se skuteční lidé chovají.

  3. Není to hotový produkt. Je to plán. Fáze 1 (grafická vizualizace) je realizovatelná za den. Fáze 2 (profily) za další den. Fáze 3 (LLM smyčka) vyžaduje API klíč a prompt engineering. Fáze 4 (pozorování struktury) je otevřená výzkumná otázka.


Návaznost

← všechny poznámky