Kwaliteitscontroles voor productcontent

Updated 2026-09-05

Scheid structurele geldigheid van productbetekenis. In een lokale case met 40 Japanse en Duitse rijen slaagden veldcontroles terwijl AI-review nog Japanse formuleringen vond die correctie nodig hadden.

Definieer het kwaliteitscontract vóór generatie

Schrijf acceptatieregels voor elk veld. Identiteits- en revisievelden moeten met de bron overeenkomen. Bewerkbare tekst moet de gevraagde locale gebruiken, noodzakelijke informatie bevatten en het doel-formaat respecteren. Claims hebben ondersteunend bewijs nodig. Eén pass/fail-label is te grof om uit te leggen welke voorwaarde een product blokkeerde.

Houd machinecontroleerbare defecten gescheiden van redactionele oordelen. Ontbrekende tekst en identifier drift kunnen deterministisch worden gelokaliseerd. Of een vertaling een voordeel overdrijft, vereist context en gekwalificeerde review. Routeer elk issue naar de persoon of het systeem dat het kan oplossen en koppel het resultaat aan de kandidaat-revisie.

ControleNuttig bewijsVervolgreview
Identiteit en bronrevisieExacte veldvergelijkingNatuurlijke vertaling
Beschermde waardenGelijkheid van getypeerde scalarsCorrecte bron-specificatie
Markup en placeholdersParser en tokencountsAccurate productclaims
ClaimreviewMapping van claim naar bronGeslaagde store-import
Read-back van bestemmingVergelijking goedgekeurd-opgeslagenCommerciële performance

Vergelijk beschermde waarden na assemblage

Genereer alleen toegestane tekstvelden en assembleer daarna het kandidaatrecord met beschermde waarden die uit de bron zijn gekopieerd. Voer op dat geassembleerde record een tweede vergelijking uit. Zo ontdek je zowel mapperfouten als onbedoelde edits tijdens review.

Het illustratieve JavaScript-voorbeeld verwacht schema-gevalideerde objecten met scalaire beschermde waarden. Het detecteert ontbrekende, extra of gewijzigde beschermde keys en een verouderde bronrevisie en retourneert stabiele issuecodes. Voer schema- en waardevalidatie vóór deze helper uit en stuur een structureel geldige kandidaat daarna naar redactionele review.

function checkProtected(source, candidate) {
  const issues = [];
  if (candidate.sourceRevision !== source.sourceRevision) {
    issues.push({ code: "STALE_SOURCE", field: "sourceRevision" });
  }
  const keys = new Set([
    ...Object.keys(source.protected),
    ...Object.keys(candidate.protected),
  ]);
  for (const field of keys) {
    const hasSource = Object.prototype.hasOwnProperty.call(source.protected, field);
    const hasCandidate = Object.prototype.hasOwnProperty.call(candidate.protected, field);
    if (!hasSource || !hasCandidate ||
        !Object.is(source.protected[field], candidate.protected[field])) {
      issues.push({ code: "PROTECTED_FIELD_CHANGED", field });
    }
  }
  return issues;
}

Houd getalopmaak gescheiden van waarden

Een gelokaliseerd getal kan er anders uitzien en toch dezelfde opgeslagen hoeveelheid betekenen. MDN documenteert Intl.NumberFormat voor locale-bewuste presentatie. Pas opmaak toe nadat de autoritatieve waarde is geselecteerd; vraag een taalmodel niet een prijs uit een weergegeven valutatekst te reconstrueren.

Definieer eenheden naast numerieke waarden, inclusief welke eenheid bij elke dimensie hoort. Gebruik bij geautoriseerde conversie een deterministische conversieregel en behoud de oorspronkelijke representatie. Vergelijk niet alleen de cijfers in een zin: twee identieke getallen met verschillende eenheden kunnen verschillende producten beschrijven. Ontbrekende eenheden moeten goedkeuring blokkeren tot de bron is opgelost.

Valideer placeholder-multipliciteit en markup

Gebruik de templateparser van de applicatie om placeholdertokens uit bron en kandidaat te verzamelen. Vergelijk aantallen en niet alleen een set namen; een gedupliceerd token kan een zin of applicatie breken, ook wanneer elk oorspronkelijk token nog voorkomt. Houd formaatspecifieke escapingregels aan de bestemmingsgrens.

De kleine controle hieronder accepteert al geëxtraheerde tokens. Hij probeert geen universele placeholder-regex. Parse voor HTML het documentfragment en vergelijk toegestane structuur en links afzonderlijk. WordPress-escapingrichtlijnen zijn relevant voor custom rendering, maar escaping alleen bewijst niet dat de content de bedoelde betekenis heeft behouden.

function samePlaceholderCounts(sourceTokens, candidateTokens) {
  const counts = new Map();
  for (const token of sourceTokens) {
    counts.set(token, (counts.get(token) ?? 0) + 1);
  }
  for (const token of candidateTokens) {
    if (!counts.has(token)) return false;
    counts.set(token, counts.get(token) - 1);
  }
  return [...counts.values()].every((count) => count === 0);
}

Case: geldige velden, formulering nog te corrigeren

Een vertaalagent die expliciet was geconfigureerd voor gpt-5.6-luna met xhigh reasoning produceerde 20 Japanse en 20 Duitse patches uit 20 synthetische producten. Deterministische schema-, identiteits- en beschermde-veldcontroles slaagden voor alle 40 geassembleerde rijen. Prijs, valuta, materiaal en afmetingen werden uit de bron gekopieerd; gegenereerde patches mochten alleen title en description voor de geïdentificeerde SKU en locale wijzigen.

Ook de onaangeroerde Japanse patches slagen voor de structurele validator. AI-review vond toch de twee formuleringproblemen hieronder en herzag hun beschrijvingen. Daarom kan controle van een beschermd materiaalveld niet vaststellen dat proza het materiaal accuraat beschrijft. Vergelijk elke belangrijke claim met de bron, ook nadat alle schemacontroles groen zijn.

Screenshot van het lokale synthetische-productreviewrapport met nul schema- of identiteitsschendingen en openstaande native-speaker- en merchantreview; de gecorrigeerde DEMO-003-draft is zichtbaar.
Lokaal reviewrapport van de synthetische catalogus uit de Luna xhigh-case. Alle 40 rijen slaagden voor de geregistreerde schema- en identiteitscontroles; semantische goedkeuring blijft open na de Japanse AI-reviewcorrecties.
Engelse uitleg van wijzigingen aan de echte Japanse drafts; raw-ja.json bewaart de oorspronkelijke output.
Synthetisch productBetekenis van de bronJapanse AI-reviewcorrectie
DEMO-003: schetsblokKartonnen achterkantEen onbewezen implicatie van golfkarton verwijderd
DEMO-010: opbergmandTwee zijhandvatten in totaalHet totale aantal handvatten verduidelijkt om ambiguïteit weg te nemen

Test de reviewexport naast de import

OWASP beschrijft spreadsheet formula injection en merkt op dat veiligheidstransformaties per consumer verschillen. Behandel leverancier- en gegenereerde cellen als niet-vertrouwd. Gebruik een gereviewde serialisatiepolicy voor de werkelijke spreadsheettool en inspecteer het opgeslagen artefact en niet alleen een tabel in memory.

Houd machine-imports gescheiden van reviewbestanden. Een prefix voor veilige menselijke weergave mag tijdens import niet stilzwijgend een identifier of openbare beschrijving wijzigen. Valideer encoding, quoteafhandeling en verwachte rijidentiteiten met een parser. Bewaar de onaangeroerde bron zodat wijzigingen door een spreadsheeteditor kunnen worden gevonden en gecorrigeerd.

Koppel goedkeuring aan de exacte kandidaat

Sla kandidaat-revisie of hash op met feitelijke en taalkundige goedkeuring. Elke latere edit moet de relevante goedkeuring ongeldig maken totdat die opnieuw is gereviewd. De uiteindelijke publisher moet ook de actuele bronrevisie vergelijken, want een onveranderde vertaling kan verouderd zijn nadat een productspecificatie wijzigde.

In de case-artefacts worden de gecorrigeerde Japanse patches en Duitse patches geassembleerd tot rijen met review_status: unreviewed. Beide reports behouden translation_semantic_review: pending. AI-ondersteunde correctie is een revisiestap en geen native-speaker- of merchantondertekening. Bewaar ruwe en herziene kandidaten en laat de passende reviewer daarna exact de tekst goedkeuren die in een importpakket terechtkomt.

Reproduceer de controles en houd hun scope duidelijk

De test van de lokale case oefent behoud van bronvelden, dubbele SKU, ontbrekende SKU en een verboden prijsoverride. Read-only reassembly van de opgeslagen Japanse en Duitse patches reproduceert beide gevalideerde outputs. Voeg voor een bredere catalogus controles toe voor je eigen placeholdergrammatica, markup en revisiepolicy; de illustratieve helpers hierboven zijn afzonderlijke voorbeelden en niet de validator voor deze 40 rijen.

Dit was een lokale vertaalcase die voor Luna was geconfigureerd, zonder Astra- of gateway-call en zonder echte store-import. De tool toonde geen API-usage, request-ID's of facturering; beide outputs behouden null voor usage en cost. Gebruik het structurele resultaat om door te gaan naar semantische review en test daarna de geautoriseerde storeadapter afzonderlijk.

node --test examples/commerce-localization-case/case.test.mjs

Veelgestelde vragen

Kan een JSON-geldige response toch onveilig zijn om te importeren?

Ja. Geldige syntax stelt correcte identifiers, bronactualiteit, ondersteunde velden, accurate claims of goedkeuring niet vast. Valideer die contracten afzonderlijk.

Waarom beschermde velden vergelijken als het model ze niet kan bewerken?

Assemblage-, mapping- en reviewfasen kunnen nog steeds fouten introduceren. Een vergelijking na assemblage controleert het echte record dat voor levering wordt voorbereid.

Kan ik claims valideren met een lijst toegestane woorden?

Een woordenlijst kan sommige problemen signaleren, maar betekenis of kracht van een claim niet vaststellen. Review de zin tegen het productbewijs.

Is matching van placeholdernamen voldoende?

Vergelijk ook multipliciteit met de echte templateparser. Een herhaald of ontbrekend token kan een defect zijn, ook als de set namen vertrouwd lijkt.

Wat stelde de case met 40 rijen vast?

De opgeslagen patches werden geassembleerd zonder geregistreerde structurele fouten en behielden brongecontroleerde productvelden. Japanse formulering had nog twee AI-reviewcorrecties nodig en semantische goedkeuring blijft voor beide talen open.