Hoe TOON te gebruiken met LLM's

LLM
Snelle techniek

Als je ooit een grote JSON-array in ChatGPT of Claude hebt geplakt, heb je waarschijnlijk de pijn gevoeld van het sluiten van het contextvenster. JSON is fantastisch voor web-API's, maar voor Large Language Models (LLM's) is het ongelooflijk verspillend. Het herhalen van veldnamen zoals "id":, "name": en "timestamp": voor elk afzonderlijk record is niet alleen overbodig; het brandt door tokens die echt geld en waardevolle contextruimte kosten.

Dit is waar TOON (Table Object Notation) uitblinkt. Het is niet alleen een gegevensformaat; het is een strategie voor het optimaliseren van LLM-interacties. Door de syntaxisbelasting van JSON weg te halen en expliciete structuurheaders toe te voegen, kunt u met TOON meer gegevens aan uw modellen doorgeven en in ruil daarvoor betrouwbaardere gestructureerde outputs krijgen.

De symbolische economie van TOON

Waarom de moeite nemen om van formaat te wisselen? De wiskunde is eenvoudig. In een standaard JSON-array met objecten wordt het schema voor elke rij herhaald. Als u een lijst met 50 gebruikers heeft, betaalt u 50 keer voor de veldnamen.

TOON elimineert deze redundantie door het schema één keer in de header te declareren. De gegevens volgen in een compact, gestroomlijnd formaat. In de praktijk resulteert dit doorgaans in een 30-60% reductie in tokengebruik voor uniforme arrays vergeleken met geformatteerde JSON. Wanneer u te maken heeft met enorme contextvensters of API-aanroepen met hoog volume, vertaalt die efficiëntie zich rechtstreeks in lagere facturen en een lagere latentie.

Gegevens verzenden: de regel 'Show, don't tell'

Wanneer u een LLM nodig heeft om gegevens te analyseren, is uw snelle strategie cruciaal. Beginners schrijven vaak lange paragrafen waarin ze het gegevensformaat uitleggen. Met TOON hoeft dat niet.

LLM's zijn patroon-matching-engines. Ze begrijpen TOON intuïtief omdat het lijkt op een hybride van YAML- en CSV-formaten die ze tijdens de training miljarden keren hebben gezien.

Om gegevens te verzenden, verpakt u deze eenvoudigweg in een omheind codeblok. Je kunt het 'toon' noemen, maar zelfs als de syntaxismarkeerstift van het model dit niet officieel ondersteunt, begrijpt het model de structuur onmiddellijk.

Invoervoorbeeld

In plaats van het schema te beschrijven, geeft u gewoon het blok op:

De header users[3]{id,name,role,lastLogin} vertelt het model alles wat het moet weten: het entiteitstype, het aantal (3 rijen) en de volgorde van de velden. De inspringing zorgt voor de hiërarchie. Deze "zelfdocumenterende" aard maakt uw prompt vrij om zich te concentreren op de daadwerkelijke logische taak in plaats van op instructies voor het parseren van syntaxis.

Hier is het gebruikersactiviteitenlogboek. De gegevens zijn in TOON-formaat (inspringing met 2 spaties, expliciete headers). 

gebruikers[3]{id,naam,rol,lastLogin}: 
1,Alice,beheerder,2025-01-15T10:30:00Z 
2,Bob,gebruiker,2025-01-14T15:22:00Z 
3,Charlie,gebruiker,2025-01-13T09:45:00Z 

Taak: Analyseer de logbestanden en identificeer welke gebruikers de afgelopen 24 uur niet hebben ingelogd. 

Betrouwbare output genereren

Het is eenvoudig om een ​​LLM gegevens te laten lezen; het moeilijkste deel is om ervoor te zorgen dat het geldige gestructureerde gegevens genereert. Modellen houden ervan om te hallucineren, JSON af te korten of de accolades te vergeten.

TOON voegt een veiligheidslaag toe via de header-syntaxis, met name de [N]-telling. Wanneer je een model vraagt ​​om TOON uit te voeren, vraag je het om zich aan een structuur te binden voordat het de gegevens genereert.

Vragen om generatie

Om de beste resultaten te krijgen, geeft u het koptekstformaat op dat u verwacht en geeft u het model de opdracht om de rijen te vullen.

Door het model te vragen [N] te berekenen, forceer je een "keten van gedachte"-proces waarbij het model de uitvoergrootte moet plannen. Deze ogenschijnlijk kleine beperking verkleint aanzienlijk de kans dat het model halverwege een lijst stopt.

Taak: Retourneer een lijst met actieve gebruikers met de rol "gebruiker". 
Formaat: Gebruik TOON. Stel de waarde [N] in de kop in, zodat deze overeenkomt met het exacte aantal rijen dat u genereert. 

Verwacht formaat: 
gebruikers[N]{id,naam,rol,lastLogin}: 

Valideren met strikte modus

Wanneer u het antwoord van de LLM ontvangt, moet u er niet alleen op vertrouwen. Dit is waar de strikte modus van de TOON-bibliotheek een superkracht wordt voor productietoepassingen.

Als u de TypeScript-bibliotheek gebruikt, valideert decodering met de strikte modus dat de gegenereerde rijen overeenkomen met het aantal headers:

Hierdoor kunt u programmatisch "luie" modeluitvoer of netwerkafkappingen onmiddellijk onderscheppen, in plaats van dat u stroomafwaarts in uw toepassing slechte gegevens ontdekt.

importeer {decoderen} uit '@toon-format/toon'; 

probeer { 
// Als het model [5] zegt maar 4 rijen biedt, levert dit een fout op. 
const data = decode(modelOutput, { strikt: waar }); 
console.log('Geldige gegevens ontvangen:', data); 
} catch (fout) { 
console.error('Modelhallucinatie of afkapping gedetecteerd:', error.message); 
} 

Geavanceerde optimalisatie: de tab-truc

Als u geobsedeerd bent door optimalisatie (en dat zou u in de wereld van LLM's waarschijnlijk ook moeten zijn), kunt u nog meer efficiëntie uit uw systeem halen door uw scheidingstekens verstandig te kiezen.

Komma's zijn standaard, maar tabs (\t) worden in veel tokenizer-vocabulaires vaak weergegeven als een enkel token. Bovendien verschijnen tabbladen zelden in natuurlijke tekstvelden, waardoor er minder escape-tekens nodig zijn (zoals tekenreeksen tussen aanhalingstekens).

U kunt uw gegevens coderen met behulp van tabbladen voordat u deze naar het model verzendt:

Vergeet niet om het model in de prompt te informeren: "Gegevens zijn door tabs gescheiden TOON." Hierdoor ontstaat een hypercompacte weergave die het model ongelooflijk gemakkelijk kan parseren en genereren.

const toonPrompt = coderen(data, {delimiter: '\t' }); 

Een compleet workflowvoorbeeld

Laten we eens kijken naar een realistisch scenario: systeemlogboeken filteren. U wilt onbewerkte logboeken naar het model sturen en een gestructureerde lijst met fouten terugkrijgen.

De prompt:

De modeluitvoer:

Systeemlogboeken in TOON-formaat (door tabs gescheiden): 

evenementen[4]{id,niveau,bericht,tijdstempel}: 
1,fout,Time-out verbinding,2025-01-15T10:00:00Z 
2,waarschuwing,Langzame zoekopdracht,2025-01-15T10:05:00Z 
3,info,Gebruiker inloggen,2025-01-15T10:10:00Z 
4,fout,Databasefout025-01-15T10:15:00Z 

Taak: Extraheer alle gebeurtenissen met niveau 'fout'. Retourneer het resultaat als geldige TOON met een bijgewerkte headertelling. 

Het resultaat:

evenementen[2]{id,niveau,bericht,tijdstempel}: 
1,fout,Time-out verbinding,2025-01-15T10:00:00Z 
4,fout,Databasefout,2025-01-15T10:15:00Z 

Het model heeft de lijst correct gefilterd en, cruciaal, de header bijgewerkt naar events[2]. Door dit antwoord te decoderen, krijgt u een schone, typeveilige array klaar voor uw applicatielogica.

Samenvatting

TOON overbrugt de kloof tussen menselijke leesbaarheid en machine-efficiëntie. Het respecteert de kostenbeperkingen van LLM's en biedt tegelijkertijd de structuur die nodig is voor robuuste softwareontwikkeling.

  1. Houd het klein: Gebruik 2-5 rijen in je voorbeelden; het model zal generaliseren.
  1. Wees expliciet: Definieer headers duidelijk, zodat het model het schema kent.
  1. Strikt valideren: Gebruik de metadata van het formaat om generatiefouten op te sporen.

Door af te stappen van JSON voor uw snelle payloads, bespaart u niet alleen tokens, maar bouwt u een betrouwbaardere AI-pijplijn op.