Hoe je een visuele novel combineert met een LLM en een desktop-pet in Rust
De meeste interfaces voor het werken met neurale netwerken zien er even saai uit. Ze zijn ofwel ChatGPT-klonen met een threadlijst links en een invoerveld rechts, ofwel command-line utilities voor de terminal. Maar als je ooit Japanse visuele novels (Galgame) hebt gespeeld, weet je hoe belangrijk visueel contact, veranderingen in emoties van personages en de context van wat er gebeurt zijn.
Onlangs stuitte ik op een interessant project genaamd LingChat, waarvan de auteur probeerde dialoogmechanieken uit visuele novels, een virtueel desktop-pet-systeem en moderne taalmodellen te combineren. Het beste deel voor ons: onder de motorkap is het eerlijke Rust, niet nog een resource-hongerige Electron-app.
Wat er in het project zit
De LingChat-repository biedt een herinterpretatie van het bekende formaat voor communiceren met AI. In plaats van een droog chatvenster krijgen we een geanimeerd personage te zien dat reageert op dialogen, je agenda bijhoudt en kan deelnemen aan interactieve scenario's.
Het project pakt tegelijkertijd verschillende taken aan:
- Emotionele sprite-reacties. Het model genereert niet alleen tekst maar markeert ook zijn eigen emotionele staat. Afhankelijk van de toon van het antwoord verandert het personage van houding, gezichtsuitdrukkingen en animaties.
- Desktop Pet-modus. Het personage leeft rechtstreeks bovenop de geopende vensters van je systeem en reageert op klikken en gebruikersacties op de achtergrond.
- Planner en taaktracker. De dialoogengine heeft ingebouwde kalender- en herinneringsfunctionaliteit, dus de assistent herinnert je tijdig aan een belletje of deadline.
- Vertakkende verhaalmodules. De auteur heeft ondersteuning toegevoegd voor scenariovertakkingen, waardoor een gewone chat verandert in een interactief spel met voorwaardecontroles en keuzes.
Waarom de keuze voor Rust belangrijk is
Meestal worden dergelijke interactieve applicaties gebouwd met Electron + React of Unity. Beide benaderingen hebben een vervelende consequentie: resource-honger. De desktop-pet moet de hele werkdag op de achtergrond draaien zonder de helft van je RAM te verbruiken en je laptopventilatoren op te starten.
LingChat is geschreven in Rust. Dit zorgt voor laag resourceverbruik tijdens constant sprite-renderen en muisgebeurtenisverwerking. De kern van de applicatielogica draait snel, waardoor het merendeel van de systeemresources beschikbaar blijft voor lokale model-inferentie of parallelle werktaken.
De code implementeert een parsing-systeem voor het verwerken van emotietags uit LLM-antwoorden. Wanneer het model een antwoord retourneert, onderschept de engine speciale stemmingmarkers voordat tekst op het scherm wordt weergegeven en schakelt synchroon de animatieframes van het personage om.
Waar dit toegepast kan worden
Afgezien van het direct gebruiken voor plezier en nostalgie naar oude virtuele huisdieren zoals Shimeji, heeft het project interessante architecturale ideeën voor ontwikkelaars.
Ten eerste is het een geweldige referentie voor het creëren van NPC's in indie-games. Als je generatieve AI-gebaseerde personages aan je project wilt toevoegen, kun je hier inspiratie opdoen over hoe je de tekstoutput van een model koppelt aan animatiegraaf-statuswijzigingen.
Ten tweede demonstreert het project prachtig de mechanieken voor het creëren van gepersonaliseerde assistenten met persoonlijkheid. In plaats van een kleurloze bot krijg je een metgezel wiens gedragsparameters en karakter worden geconfigureerd via systeemprompts en configuratiebestanden.
Waar te beginnen
De broncode is open onder de AGPL-3.0-licentie. Documentatie en installatiehandleidingen zijn verzameld op de officiële website van het project https://lingchat.wiki/.
Om het te draaien heb je een geconfigureerde Rust-toolchain nodig en een API-sleutel voor een compatibele LLM-provider (of een lokaal draaiende server zoals Ollama / vLLM met OpenAI-compatibele API-ondersteuning).
Als je al een tijdje je eigen aangepaste desktop-metgezel wilt bouwen of wilt experimenteren met dynamisch sprite-schakelen via LLM, is het zeker de moeite waard om in de SlimeBoyOwO/LingChat-repository te duiken.
Gerelateerde projecten