Metodikbiblioteket: 16 metodiker som täcker fordonets system

Tre metodiker räckte för att visa principen men inte för att arbeta.
Biblioteket flyttas till en egen fil och växer till sexton: vibration,
bromsar, styrning/fjädring, elsystem, start & laddning, motorgång,
kylsystem, drivlina, avgas & emission, klimat, högvolt, felkoder &
kommunikation, läckage, missljud, ADAS — plus generisk.

Att "täcka allt" går inte att lova. Det som går är att täcka systemen
systematiskt och låta generisk vara ett strukturellt komplett skyddsnät
för det ingen förutsett.

Tre regler gäller alla metodiker, och alla tre är låsta av test:

  1. Varje kontroll har ett minimikrav — mätvärde, foto eller
     observation. En kryssruta är inte evidens.
  2. Varje metodik börjar med att verifiera symptomet, aldrig med att
     åtgärda. Kundens ord blir ett symptom först när det reproducerats.
  3. Där arbetet kan skada någon ligger säkerhetssteget först.
     Högvoltsmetodiken kan inte påbörjas utan dokumenterad
     spänningsfrihet, urtagen servicebrytare och skyddsutrustning —
     det arbetet kan döda, och en kryssruta duger inte.

Motorn och innehållet skiljs åt: metodik.ts äger typer, val och
härledningen av nästa steg, metodiker.ts äger metodikerna. Biblioteket
kan växa utan att motorn ändras.

Valet av metodik är inte längre en regexkedja utan poängsatt på
nyckelord, där det längre — mer specifika — ordet väger tyngre:
"traktionsbatteri" slår "batteri". Korta ord matchas som helt ord,
längre som ordstam, annars hade "ac" träffat "acceleration" och en
vibration hamnat i klimatanläggningen. Nyckelorden är stammar, inte
färdigböjda ord: svensk böjning kapar ofta ett e (filter → filtret), så
"partikelfilter" hade aldrig matchat texten teknikern faktiskt skriver.

Valet är en frågeordning, inte en diagnos. Träffar inget blir det
generisk — ett ärligt "vi vet inte var vi ska börja" i stället för en
gissning — varefter orkesterns klassificerare får försöka.

Orkesterns metodikkatalog byggs nu ur en lista i stället för att räknas
upp i både schema och prompt, i båda kopiorna (ai-orkester och
edge-funktionen). Ett test jämför den mot klientens: glider listorna
isär returnerar klassificeraren ett id klienten inte känner igen, och
valet faller tyst tillbaka på generisk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
This commit is contained in:
Claude
2026-08-04 14:17:38 +00:00
parent 69a519be75
commit 1bb40319d8
8 changed files with 1210 additions and 207 deletions
+28 -5
View File
@@ -58,10 +58,33 @@ const SVARS_SCHEMA = {
additionalProperties: false,
};
// Metodikkatalogen. Måste vara identisk med app/src/felsokning/metodiker.ts —
// testet "orkestern känner till exakt samma metodiker som klienten" faller
// om listorna glider isär. Beskrivningen är klassificerarens enda underlag,
// så den ska säga vad symptomet är, inte vad felet tros vara.
const METODIK_KATALOG = [
["vibration", "vibrationer, skakningar eller obalans under körning"],
["bromsar", "bromsverkan, bromspedal, skevhet, gnissel vid inbromsning, ABS"],
["styrning_fjadring", "styrning, ratt, glapp, stötdämpare, hjulinställning, fordonet drar åt sidan"],
["elsystem", "elektriska fel — reläer, säkringar, spänning, belysning, kablage, kontaktdon"],
["start_laddning", "fordonet startar inte, startmotor, generator, batteriet laddar ur"],
["motor_drift", "motorgång och effekt — rycker, misständer, ojämn tomgång, tappar kraft"],
["kylsystem", "överhettning, kylvätska, termostat, kylare, värme i kupén"],
["drivlina", "växellåda, koppling, automatlåda, drivknutar, kardan, differential"],
["avgas_emission", "avgassystem och emissioner — partikelfilter, AdBlue, katalysator, lambda, EGR"],
["klimat", "klimatanläggning — kyler inte, kompressor, köldmedium, imma, lukt i kupén"],
["hogvolt", "högvoltsystem i elbil eller hybrid — traktionsbatteri, laddning, räckvidd"],
["diagnos_natverk", "felkoder, kommunikationsfel, ingen kontakt med styrenhet, CAN/buss"],
["lackage", "läckage — olja, vätska, vatten som tar sig in i fordonet"],
["missljud", "missljud — knack, gnissel, vinande, brummande, skrammel"],
["adas", "förarassistans och kalibrering — kamera, radar, filhållning, parkeringssensorer"],
["generisk", "allt annat, eller när det är oklart"],
];
const METODIK_SCHEMA = {
type: "object",
properties: {
metodikId: { type: "string", enum: ["vibration", "elsystem", "generisk"] },
metodikId: { type: "string", enum: METODIK_KATALOG.map(([id]) => id) },
},
required: ["metodikId"],
additionalProperties: false,
@@ -180,10 +203,10 @@ const ORKESTER = {
modell: "claude-haiku-4-5",
maxTokens: 256,
system: `Du klassificerar en felbeskrivning från en verkstad till EN felsökningsmetodik:
- "vibration": vibrationer, skakningar eller obalans under körning.
- "elsystem": elektriska fel — reläer, säkringar, spänning, batteri, belysning, givare, strömförsörjning.
- "generisk": allt annat, eller när det är oklart.
Gissa inte: välj "generisk" om beskrivningen inte tydligt hör till en specifik metodik.`,
${METODIK_KATALOG.map(([id, beskrivning]) => `- "${id}": ${beskrivning}.`).join("\n")}
Valet är en frågeordning, inte en diagnos — du avgör var teknikern ska börja leta, inte vad som är fel.
Gissa inte: välj "generisk" om beskrivningen inte tydligt hör till en specifik metodik. "generisk" är ett fullgott svar och alltid bättre än en gissning.`,
schema: METODIK_SCHEMA,
},
// Ärendestart: teknikern fotograferar arbetsordern; vi läser dokumentet