# LLMApi: Real-Time Mock Data with LLMs and SignalR: A Practical Guide

<!--category-- AI, LLM, LLMApi , ASP.NET Core, API, Nuget, mockllmapi, SignalR, AI-Article-->
<datetime class="hidden">2025-11-04T21:15</datetime>

# Johdanto

[![NuGet](https://img.shields.io/nuget/v/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi) [![NuGet](https://img.shields.io/nuget/dt/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)

> HUOMAUTUS: THH:n artikkeli on ensisijaisesti tekoäly, joka on syntynyt osana uutuuspakettiani julkaisudokumenttina. Se on aika mielenkiintoinen, joten laitan sen tähän, mutta jos se on ongelma sinulle, ole hyvä ja jätä se huomiotta.

Osana minun [Nuget-paketti LLMApi / enimmäkseen lucid.mockllmapi ](https://www.nuget.org/packages/mostlylucid.mockllmapi) Tarvitsin sivun, jotta voin käyttää SignalR-ominaisuuksia (se voi simuloida SignalR-syötteitä käyttämällä LLM-tietoja). Niinpä keksin tämän.

Voit löytää[ GitHub tässä. ](https://github.com/scottgal/LLMApi)projektia varten kaikki julkisuus ym....

Siitä tuli vaivihkaa varsin mukava työkalu!

![SignalR-simulaattori](signalrsimulator.png)

Jos olet joskus tarvinnut kojelautaa tai reaaliaikaista käyttöliittymää ennen varsinaisen tietolähteen olemassaoloa, tiedät haasteen. Päädyt kirjoittamaan kovakoodattuja JSON-laitteita tai tarkempaa `setInterval()` silmukoita, jotka pyörivät saman kourallisen esineitä läpi.

Rakensin tämän SignalR-demon ratkaisemaan ongelman joustavammalla tavalla. Kuvailet mitä tietoja tarvitset selkokielellä, ja paikallinen LLM tuottaa realistisen, monipuolisen JSONin, joka virtaa selaimeesi reaaliaikaisesti. Ei varusteita, joita ylläpitää, ei siementiedostoja, joita päivittää, vain kuvaat mitä haluat ja katsot sen virtaavan.

Näytän, miten se toimii ja miten siitä saadaan irti mahdollisimman paljon.

[TOC]

## Mitä tämä työkalu tekee

SignalR-demon sivu (`Index.cshtml`) on reaaliaikaisten tietovirtojen hallintapaneeli. Tässä on perusvirta:

1. Luot "kontekstin" (nimetty datavirta)
2. Kuvailet millaista dataa haluat selkokielellä
3. LLM tuottaa kuvaustesi perusteella sopivan JSON:n
4. SignalR työntää uutta dataa selaimeesi 5 sekunnin välein
5. Tulokset näkyvät syntaksin korostaessa reaaliajassa

Se on erityisen hyödyllistä prototyypityksessä, demojen rakentamisessa tai frontend-ominaisuuksien parissa odottaessaan taustarajapintojen valmistumista. Tiedot näyttävät realistisilta, koska LLM ymmärtää kontekstin ja tuottaa sopivat arvot.

### Iso kuva

```mermaid
graph TB
    Browser[Your Browser]
    UI[Demo UI]
    API[Management API]
    Hub[SignalR Hub]
    Manager[Context Manager]
    BG[Background Service]
    LLM[LLM Ollama/OpenAI]
    Cache[Response Cache]

    Browser -->|Create Context| API
    API -->|Store Config| Manager
    Browser -->|Connect Subscribe| Hub
    Hub -->|Register Client| Manager
    BG -->|Generate Data| LLM
    LLM -->|Return JSON| BG
    BG -->|Cache Responses| Cache
    BG -->|Push to Clients| Hub
    Hub -->|Real-time Updates| Browser

```

## Miksi signalr reaaliaikaisia päivityksiä varten?

SignalR ylläpitää selaimen ja palvelimen välistä pysyvää WebSocket-yhteyttä. Sen sijaan, että HTTP-pyynnöillä järjestettäisiin päätetapahtuma muutaman sekunnin välein, palvelin työntää dataa, kun se on valmis. Näin saat todella reaaliaikaisia päivityksiä, joiden yleiskustannukset ovat mahdollisimman pienet.

Yhteys pysyy auki, data virtaa välittömästi, ja käyttöliittymäsi on paljon reagoivampi. Se on samaa teknologiaa, jota käytetään chat-sovelluksissa, live-kojelaudaissa ja yhteistyötyökaluissa, joissa pikapäivityksillä on merkitystä.

## Pikakäynnistys: Get Running in 5 Minutes

Aloitetaan nopeimmasta polusta nähdä tämän toimivan. Näytän pörssitiedot esimerkiksi.

**Vaihe 1: Aloita sovellus**

```bash
dotnet run --project LLMApi/LLMApi.csproj
```

Navigoi `http://localhost:5116` (Tarkista konsolin ulostulo todellisesta portista).

**Vaihe 2: Käytä pikakäynnistysesimerkkiä**

Näet viisi esiaseteltua esimerkkiä vihreillä "Launch"-painikkeilla. Klikkaa "Stock Marketia" ja olet valmis. Sivu automaattisesti:

- Luo pörssin datakontekstin
- Tilaa päivityksiä selaimestasi
- Alkaa näyttää live-varastotietoja hinnoilla, määrillä ja muutoksilla

**Vaihe 3: Katso tietovirtaa**

Uusia tietoja ilmestyy viiden sekunnin välein syntaksin korostamana. Jokaisessa päivityksessä näkyy erilaisia osakkeita, joiden hinnat ja kaupankäyntimäärät ovat realistisia. LLM tuottaa uutta dataa joka kerta, joten näet vaihtelua samalla, kun säilytät johdonmukaisen rakenteen.

Nyt streamaat pilkkapörssitietoja. Tutustu vapaasti muihin pikavippiesimerkkeihin nähdäksesi erilaisia datamalleja.

## Luo omia omia tietovirtoja

Pikakäynnistyspainikkeet ovat käteviä, mutta todellinen teho tulee siitä, että kuvataan, mitä tarvitaan. Luodaan oma esimerkki.

**Esimerkki: Kahvikoneen telemetria**

Sano, että rakennat IoT-kojelautaa ja tarvitset simuloituja kahvinkeitintietoja.

```
Context Name: coffee-machines
Description: Coffee machine telemetry with machine ID, beans remaining percentage,
             water temperature in Celsius, cups brewed today, and last maintenance timestamp
```

Klikkaa "Create & Subscribe" ja olet vapaalla.

### Mitä tapahtuu maisemien takana

```mermaid
sequenceDiagram
    participant Browser
    participant API
    participant Manager
    participant BG as Background Service
    participant LLM
    participant Hub

    Browser->>API: POST /api/mock/contexts<br/>{name, description}
    API->>Manager: Store context config
    Manager-->>API: Context created ✓
    API-->>Browser: 200 OK

    Browser->>Hub: invoke('SubscribeToContext', 'coffee-machines')
    Hub->>Manager: Register subscription
    Manager-->>Hub: Subscription confirmed
    Hub-->>Browser: on('Subscribed')

    Note over BG,LLM: Every 5 seconds...
    BG->>LLM: Generate data for 'coffee-machines'<br/>Prompt includes description
    LLM-->>BG: JSON response
    BG->>Hub: Broadcast to 'coffee-machines' group
    Hub-->>Browser: on('DataUpdate', {data})
    Browser->>Browser: Display with syntax highlighting
```

Järjestelmä:

1. Luo kontekstin taustaosaan
2. Tilaa selaimesi vastaanottamaan päivityksiä SignalR:n kautta
3. Alkaa tuottaa tietoja kuvauksesi perusteella
4. Työntää päivityksiä 5 sekunnin välein

Näet tuotoksen näin:

```json
{
  "machineId": "CM-2847",
  "beansRemaining": 67,
  "waterTemp": 94.5,
  "cupsBrewed": 142,
  "lastMaintenance": "2025-01-03T08:23:00Z"
}
```

Jokaisella päivityksellä on erilaiset arvot, mutta se ylläpitää rakennetta. LLM ymmärtää "kahvikoneen telemetriaa" ja tuottaa siinä yhteydessä järkeviä lukuja.

## Kontekstien ymmärtäminen

A **konteksti** On nimetty datavirta-asetus. Ajattele sitä kanavana tai puheenaiheena.

Kun luot sellaisen, tarkenna:

- **Nimi**: Yksilöllinen tunniste (esim. `weather`, `stock-market`, `sensors`)
- **Tavaran kuvaus**: Tietorakenne, jonka haluat, selkokielellä

Takaosa sitten:

- Luo tällä nimellä varustetun SignalR-ryhmän
- Luo LLM:lle ohjeen kuvauksesi perusteella
- Tuottaa tuoreita tietoja säännöllisesti (5 sekunnin välein oletuksena)
- Lähettää sen kaikille tilaajille

Useat selaimet voivat tilata saman kontekstin, ja ne saavat kaikki samat tiedot samanaikaisesti. Tämä on hienoa kojelaudan testaamiseen, jossa on näytettävä synkronoituja päivityksiä eri näytöille tai komponenteille.

### Konteksti Elinkaari valtion kone

```mermaid
stateDiagram-v2
    [*] --> Created: Create Context<br/>(POST /contexts)

    Created --> Active: Start<br/>(auto or manual)
    Active --> Stopped: Stop<br/>(POST /stop)
    Stopped --> Active: Start<br/>(POST /start)

    Created --> Subscribed: Client Subscribes
    Active --> Subscribed: Client Subscribes
    Stopped --> Subscribed: Client Subscribes<br/>(no data sent)

    Subscribed --> Receiving: Data Push<br/>(if Active)
    Receiving --> Subscribed: Client Connected

    Subscribed --> Created: Unsubscribe
    Subscribed --> Active: Unsubscribe
    Subscribed --> Stopped: Unsubscribe

    Created --> [*]: Delete
    Active --> [*]: Delete
    Stopped --> [*]: Delete
    Subscribed --> [*]: Delete

    note right of Active
        Generates data
        Pushes to clients
        Shows "Active" badge
    end note

    note right of Stopped
        No data generation
        Clients stay connected
        Shows "Stopped" badge
    end note
```

## UI:n asettelun ymmärtäminen

Liitännässä on kolme paneelia, jotka pitävät asiat järjestyksessä:

### Vasen: Luo tausta

Tässä kohtaa määrität uudet tietovirrat. Tarvitset:

- **Kontekstinimi**: Tee se ainutlaatuiseksi ja kuvailevaksi. Pienen saksin käyttö toimii hyvin.
- **Tavaran kuvaus**LLM toimii parhaiten selkeillä kuvauksilla, kuten "käyttäjäprofiililla, sähköpostilla, iällä ja premium-statuksella booleanilla".

Ei tarvitse kirjoittaa JSON-skeemaa tai selittää tietotyyppejä. LLM:n rakenne luontevista kielikuvauksista yllättävän hyvin.

### Keskimmäinen: Aktiiviset taustat

Näyttää kaikki juoksevat asiayhteytesi:

- Nimi ja asemamerkki (toimellinen/pysäytetty)
- Yhteyksien määrä (miten monta asiakasta on tällä hetkellä merkitty)
- Ohjauspainikkeet: Kytke, irrota, käynnistä, pysäytä, poista

**Yhdistä/katkaise yhteys** Ohjaa selaimesi tilausta. Valitse Connect aloittaaksesi tietojen vastaanottamisen, katkaise yhteys poistaaksesi kontekstin.

**Aloita tai lopeta** Ohjaa taustatietojen tuottamista. Tämä on hyödyllistä, kun haluat pysäyttää virran tuhoamatta kontekstikokoonpanoa.

**Poista** Poistaa kontekstin kokonaan. Käytä tätä puhdistukseen, kun olet valmis tietyllä tietovirralla.

### Oikealla: Live Data

Tässä näet reaaliaikaisia päivityksiä:

- Liitäntätilan ilmaisin (yhdistetty/katkaistu)
- Tällä hetkellä merkitty kontekstinimi
- Viimeiset 10 viestiä, joissa aikaleimat ja syntaksin korostus

Data ilmestyy uusimpana ensimmäisenä huipulla, joten näet aina uusimmat päivitykset selaamatta.

## Javascript-yhteyskuvio

Sivulla käytetään HTMX:ää lomakkeiden toimittamiseen ja SignalR:ää reaaliaikaiseen yhteydenpitoon. Jos rakennat omaa asiakasta, tässä on SignalR-kuvio, jota tarvitset:

### Asiakasyhteysvirta

```mermaid
sequenceDiagram
    participant Page as Your Page
    participant SR as SignalR Client
    participant Hub as /hub/mock
    participant BG as Background Service

    Page->>SR: new HubConnectionBuilder()<br/>.withUrl('/hub/mock')
    Page->>SR: connection.start()
    SR->>Hub: WebSocket connection
    Hub-->>SR: Connected ✓
    SR-->>Page: Trigger 'connected' event

    Page->>SR: invoke('SubscribeToContext', 'weather')
    SR->>Hub: SubscribeToContext('weather')
    Hub->>Hub: Add to 'weather' group
    Hub-->>SR: on('Subscribed', {context: 'weather'})
    SR-->>Page: Display "Subscribed"

    loop Every 5 seconds
        BG->>Hub: Broadcast to 'weather' group
        Hub->>SR: on('DataUpdate', {data, timestamp})
        SR->>Page: Update UI with new data
    end

    Page->>SR: invoke('UnsubscribeFromContext', 'weather')
    SR->>Hub: UnsubscribeFromContext('weather')
    Hub->>Hub: Remove from 'weather' group
```

**Liitännäisen asennus:**

```javascript
const connection = new signalR.HubConnectionBuilder()
    .withUrl('/hub/mock')
    .withAutomaticReconnect()
    .build();

connection.on('DataUpdate', (message) => {
    // message.context: which context sent this
    // message.data: the actual JSON payload
    // message.timestamp: Unix timestamp in milliseconds
});

await connection.start();
```

**Tietojen vastaanottaminen:**

```javascript
await connection.invoke('SubscribeToContext', 'my-context-name');
```

**Ei tilausta, kun valmis:**

```javascript
await connection.invoke('UnsubscribeFromContext', 'my-context-name');
```

Demosivu käsittelee kaiken tämän automaattisesti, mutta nämä kolme mallia ovat kaikki mitä tarvitset mukautettuun toteutukseen.

## Käytännöllisiä käyttötapoja

Tässä muutamia skenaarioita, joissa tämä työkalu todella loistaa:

**1. UI:n rakentaminen ennen API:tä on olemassa**

Työstät kojelautaa ja taustatiimi suunnittelee yhä API-skeemaa. Sen sijaan, että estät heidän työnsä, kuvaile odottamasi datarakenne ja rakenna käyttöliittymäsi valevirtaa vasten. Kun todellinen API on valmis, vaihdat päätepisteen.

**2. Asiakasmielenosoitukset**

Suoritat liveseurannan kojelautaa asiakkaalle, mutta varsinainen dataputki ei ole vielä valmis. Luo kontekstit, jotka vastaavat suunniteltua datarakennettasi ja näyttävät realistista, muuttuvaa dataa esityksen aikana. Se näyttää ammattimaiselta ja auttaa asiakasta visualisoimaan lopputuotteen.

**3. Frontend Development ja Testit**

Tarvitset realistista ja monipuolista dataa, jotta voit testata, miten kaaviot, taulukot ja komponentit käsittelevät päivityksiä. Luo kontekstit tarvitsemiisi rakenteisiin ja kehitä käyttöliittymääsi luottaen siihen, että se käsittelee tosimaailman datakuvioita.

**4. Kuormituksen testaus reaaliaikaisesti**

Haluat nähdä, miten käyttöliittymäsi toimii nopeissa päivityksissä. Luo korkeataajuinen konteksti ja katso, miten komponenttisi käsittelevät datavirtaa. Tämä auttaa tunnistamaan suorituskykyongelmat ennen tuotantoa.

**5. Verkkosokettien ja reaaliaikaisten ideoiden opettaminen**

Opetat SignalR- tai WebSocket-konsepteja ja haluat oppilaiden näkevän reaaliaikaisia päivityksiä ilman täydellisen taustajoukon rakentamista. demo on toimiva esimerkki, jota he voivat kokeilla ja josta he voivat oppia.

## Pikakäynnistysesimerkkejä selitetty

Viisi esiaseteltua esimerkkiä osoittavat erilaisia yhteisiä tietomalleja:

**IoT-anturit**: Numeeriset anturilukemat ja laitteen metatiedot
**Osakemarkkinat**: Rahoitustiedot hinnoineen, volyymeineen ja prosenttimuutoksineen
**Verkkokaupan tilaukset**: Nested objekteja tilauskohteiden sarjoissa
**Palvelinmetriikka**: Järjestelmän seuranta useilla suoritusmittareilla
**Pelien leaderboard**: Pelaajatilastot ja -statukset

Nämä esimerkit ovat valmiita. Klikkaa Käynnistä, katso tietoja ja käytä niitä malliesimerkkinä omiin asiayhteyksiisi.

## Kotouttamisen API-päätteitä

Jos rakennat asiakaskohtaista asiakasta tai yhdistät tämän toiseen sovellukseen, tässä HTTP:n päätetapahtumat:

**Luo konteksti:**

```bash
curl -X POST http://localhost:5116/api/mock/contexts \
  -H "Content-Type: application/json" \
  -d '{"name": "sensors", "description": "Temperature sensors with device ID and readings"}'
```

**Luettele kaikki kontekstit:**

```bash
curl http://localhost:5116/api/mock/contexts
```

**Hanki erityinen konteksti:**

```bash
curl http://localhost:5116/api/mock/contexts/sensors
```

**Aloita tai pysäytä datan tuottaminen:**

```bash
curl -X POST http://localhost:5116/api/mock/contexts/sensors/start
curl -X POST http://localhost:5116/api/mock/contexts/sensors/stop
```

**Poistetaan tekstiyhteys:**

```bash
curl -X DELETE http://localhost:5116/api/mock/contexts/sensors
```

Kun olet luonut kontekstin, ota yhteys SignalR-napaan osoitteessa `/hub/mock` ja tilata alkaa vastaanottaa päivityksiä.

## Miten LLM-sukupolvi toimii

Kun luot kontekstin, järjestelmä:

1. Ottaa kuvauksen
2. Rakentaa pikavipin, joka sisältää sattumanvaraisuutta (GUID-siemen + aikaleima lajikkeelle)
3. Pyytää LLM:ää luomaan sopivan JSON:n, joka vastaa kuvaustasi
4. Validoidaan vastaus todelliseen JSON:iin (jos tarpeen)
5. Pikatoimitus saa useita vastauksia
6. Luo lisää taustalla pitääksesi välimuistin täytettynä

Lämpötila on 1,2 (suhteellisen korkea) vaihtelun varmistamiseksi. "Käyttäjätietoja" kysyttäessä saa joka kerta erilaisia nimiä ja arvoja, ei samoja harvoja kierrätettyjä loputtomasti. Tiedot pysyvät rakenteellisesti yhdenmukaisina ja vaihtelevat realistisesti.

## Suorituskykyä ja älykästä väliseinää

Datan tuottaminen tapahtuu taustalla, ei tilattuna työntöä kohden. Tämä pitää päivitykset johdonmukaisina ja vähentää LLM-kuormaa.

Näin se toimii:

- Järjestelmä täyttää käynnistyksen yhteydessä välimuistin, jossa on vastaukset jokaiseen aktiiviseen kontekstiin
- Siinä mitataan, kuinka pitkä sukupolvi kestää (eli 500 milliä per pyyntö)
- Siinä lasketaan optimaalinen erän koko: työntöväli 
- Se luo eriä taustalla pitääkseen välimuistin täydennettynä
- Kun on aika työntää, se vetäytyy välimuistista välittömästi

Tulos: Ensimmäinen viestisi saapuu heti, sen jälkeen viestejä tulee jatkuvasti viiden sekunnin välein, eikä LLM:tä moukaroida jatkuvasti.

### Älykäs väliseinävirta

```mermaid
graph LR
    subgraph Startup
        A[App Starts] --> B[Pre-fill Cache]
        B --> C[Measure Gen Time<br/>500ms]
        C --> D[Calculate Batch<br/>5000ms / 500ms = 10]
    end

    subgraph Runtime Loop
        E[Timer Tick<br/>Every 5s] --> F{Cache > 50%?}
        F -->|Yes| G[Pop from Cache]
        F -->|No| H[Generate Batch<br/>in Background]
        G --> I[Push to Clients]
        H --> J[Refill Cache]
        J --> G
        I --> E
    end

    D --> E

    style B stroke:#10b981,stroke-width:3px
    style G stroke:#0ea5e9,stroke-width:3px
    style H stroke:#ef4444,stroke-width:3px
    style I stroke:#f59e0b,stroke-width:3px
```

## Yhteisiä ongelmia

**Liitäntä näyttää "Discnnected" -yhteyden, eikä kytketä uudelleen**

- Tarkista, että LLM-palvelusi (Ollama/OpenAI) toimii
- Oletusasetukset odottavat Ollamaa `http://localhost:11434`
- Juokse `ollama list` Varmista, että olet asentanut malleja
- Tarkista selainkonsoli SignalR-kytkentävirheistä

**Konteksti luotu, mutta tietoja ei ilmesty**

- Katso Active Contexts -paneelia – näkyykö kontekstissa "Aktiivinen"?
- Klikkaa Connect-painiketta, jos et ole vielä tilannut
- Tarkista yhteystila Live Data -paneelissa, jossa näkyy vihreä (yhdistetty)
- Tarkista palvelimen lokit nähdäksesi, toimiiko LLM-sukupolvi

**Datarakenne ei vastaa odotuksiasi**

- Tarkenna kuvaustasi ja konkretisoi
- Esimerkki: "lämpötila nollan ja 100:n välillä" toimii paremmin kuin "lämpötila"
- Yritä muotoilla uudelleen kuvaustasi – tämä on nopeaa insinöörityötä
- Tarkista tuotetut tiedot ja tarkenna kuvausta näkemäsi perusteella

**Selainkonsoli näyttää SignalR-kytkentäyritykset**

- Takaosa ei ehkä ole käynnissä – tarkista pääte
- Olisit voinut vaihtaa porttia – päivittää tarvittaessa SignalR-navan URL-osoitteen
- Tarkista palomuuri- tai verkkoongelmat (etenkin Docker/WSL-ympäristöissä)

## Asetukset

Voit muokata käyttäytymistä `appsettings.json`:

```json
{
  "MockLlmApi": {
    "SignalRPushIntervalMs": 5000,  // How often to push data (milliseconds)
    "ModelName": "llama3",           // Which LLM model to use
    "Temperature": 1.2,              // Creativity level (0.0-2.0, higher = more varied)
    "BaseUrl": "http://localhost:11434",  // LLM service URL
    "HubContexts": [                 // Optional: pre-configured contexts
      {
        "Name": "weather",
        "Description": "Weather data with temperature, humidity, wind speed",
        "IsActive": true
      }
    ]
  }
}
```

**SignalRPushIntervalMs**: Aseta matalammalle nopeammille päivityksille, korkeammalle vähentämään LLM-kuormaa
**Lämpötila**: Korkeammat arvot antavat luovempaa/satunnaisempaa dataa, pienemmät antavat johdonmukaisempia tuloksia
**HubContexts**: Määrittele kontekstit, jotka alkavat automaattisesti sovelluksen käynnistyessä

## Integrointi sovellukseesi

Jos rakennat varsinaista kojelautaa ja haluat käyttää sitä kehityksen aikana, tässä on React-esimerkki:

```javascript
import * as signalR from '@microsoft/signalr';

const connection = new signalR.HubConnectionBuilder()
  .withUrl('http://localhost:5116/hub/mock')
  .withAutomaticReconnect()
  .build();

connection.on('DataUpdate', (message) => {
  if (message.context === 'stock-market') {
    updateStockChart(message.data);
  }
});

await connection.start();
await connection.invoke('SubscribeToContext', 'stock-market');
```

Kun olet valmis siirtymään tuotantoon, vaihda navigaattorin URL. SignalR-rajapinta (`on()` sekä `invoke()`) toimii samalla tavalla oikeiden backendien kanssa.

## Miksi rakentaa tätä?

Siellä on hyviä valedatakirjastoja. Faker.js on erinomainen. Mockaroo tekee hyvää työtä. Miksi siis rakentaa toinen työkalu?

Tämä työkalu ratkaisee erityishaasteita:

1. **Reaaliaikainen suoratoisto**: Useimmat työkalut antavat sinulle staattisia tietoja tai REST-päätteitä, eivät eläviä WebSocket-virtoja
2. **Luonnollinen kielirajapinta**: Kuvaile, mitä haluat JSON-skeeman kirjoittamisen sijaan
3. **Kontekstin kannalta asianmukaiset tiedot**: LLM:t tuottavat realistisia arvoja, jotka ovat järkeviä yhdessä, eivät vain satunnaisia, tyyppiin sopivia jousia
4. **Itse dokumentointi**: Kuvaus on tietorakenteen dokumentointi
5. **Joustava rakenne**: Muuta datamallia puolikehityksellä ilman tarvikkeiden päivittämistä

Se on suunniteltu tiettyä työnkulkua varten: reaaliaikaisen käyttöliittymän rakentaminen silloin, kun tarvitset monipuolista, realistista tietoa ilman konfiguraatiota.

## Aloittaminen

Paras tapa ymmärtää tämä työkalu on käyttää sitä:

1. Aloita sovellus: `dotnet run --project LLMApi`
2. Avaa selaimesi `http://localhost:5116`
3. Klikkaa yhtä vihreistä "Launch"-painikkeista
4. Katso datavirtaa

Yritä sieltä luoda oma kontekstisi kuvauksella, joka vastaa projektisi tarpeita. Työkalu on kaikkein arvokkain, kun käytät sitä todelliseen kehitystyöhön.

Rakensin tämän, koska törmäsin jatkuvasti samaan ongelmaan: tarvitsemme realistista, muuttuvaa dataa demoja ja kehitystä varten. Jos kohtaat tuonkin haasteen, toivon, että tämä työkalu auttaa työnkulkuasi.

---


## Pikaviite

**Käynnistys:**

```bash
dotnet run --project LLMApi
```

**Oletusverkko- osoite:** `http://localhost:5116`

**SignalR-hub:** `/hub/mock`

**Tärkeimmät menetelmät:**

- `SubscribeToContext(name)` - Aloita tietojen vastaanottaminen
- `UnsubscribeFromContext(name)` - Lopeta tietojen vastaanottaminen

**Tärkeimmät tapahtumat:**

- `DataUpdate` - Uudet tiedot saapuivat
- `Subscribed` - Tilaus vahvistettu
- `Unsubscribed` - Ei kirjoitusta vahvistettu

Loppu on vain sen tutkimista, mitä sillä voi rakentaa.