From f369491a1d79d3f8c691abbc29d89b62dfef1f31 Mon Sep 17 00:00:00 2001 From: Loretta Date: Tue, 20 Jan 2026 09:54:28 +0100 Subject: [PATCH] temp --- FruitBankHybrid.Shared.Tests/ToonTests.cs | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/FruitBankHybrid.Shared.Tests/ToonTests.cs b/FruitBankHybrid.Shared.Tests/ToonTests.cs index f56d4b35..136975dc 100644 --- a/FruitBankHybrid.Shared.Tests/ToonTests.cs +++ b/FruitBankHybrid.Shared.Tests/ToonTests.cs @@ -18,6 +18,64 @@ using System.Runtime.Serialization; namespace FruitBankHybrid.Shared.Tests; +1. "Headered List" (A biztonságos táblázatosítás) + +Az LLM-eknek nem kell minden sorban megismételni a mezőneveket, ha a lista elején egyszer definiálod a sorrendet. Ez nem találgatás, hanem egy lokális "szerződés". + +Hagyományos (pazarló): +Kódrészlet + +OrderItemDtos = [ + OrderItemDto { Id = 120, Quantity = 10, ProductName = "Áfonya" } + OrderItemDto { Id = 121, Quantity = 5, ProductName = "Narancs" } +] + +Optimalizált (pontos és tömör): +Kódrészlet + +OrderItemDtos: OrderItemDto[] = [ + [ Id, Quantity, ProductName ] + [ 120, 10, "Áfonya" ] + [ 121, 5, "Narancs" ] +] + + Miért jó ez? Az LLM a fejléc alapján (mint egy CSV-nél) rendeli hozzá az értékeket a típushoz. Mivel a típus (OrderItemDto) ott van a definícióban, a szemantikai kapcsolat nem vész el. + +2. Típus-öröklődés a listákban + +Ha a @types részben már leírtad, hogy az OrderItemDto.ProductDto mezője egy ProductDto típust vár, akkor a @data részben felesleges kiírni a típusnevet minden egyes elemnél. + +Példa: +Kódrészlet + +// A 'ProductDto' elhagyható az objektum elől, mert a sémából tudja +ProductDto = { + Id = 1 + Name = "Áfonya..." + GenericAttributes = [ + { Id = 99, Key = "NetWeight", Value = "178.3" } + { Id = 100, Key = "GrossWeight", Value = "19" } + ] +} + +3. Alapértelmezett értékek elhagyása (Implicit Defaults) + +Ha egy mező értéke megegyezik a @types-ban definiált default-value-val, vagy null/0/false, akkor azt teljesen hagyd ki a @data részből. + + Szabály: Ami nincs ott, az az alapértelmezett. + + Token megtakarítás: A FruitBank példádban a GenericAttributes = (count: 0) [] sorok rengeteg helyet foglalnak. Ha üres, egyszerűen ne küldd el a mezőt. + +4. String Table helyett: "Object Anchoring" + +használd az objektum-referenciákat (amit a @ProductDto:1 jelöléssel már el is kezdett a rendszered). + +Ha ugyanaz a Product szerepel 5 különböző rendelési tételnél, ne írd le ötször. + + Első alkalommal: ProductDto { ... } + + Minden további alkalommal: ProductDto = @ProductDto:1 + //[ToonIgnore][ToonDataIgnore] [ToonDescription(Purpose = "Container model for Shipping, Order")] public class FullProcessModel