trace-to-training-data

Par wshobson · agents

Convertissez des traces d'évaluation et des logs de production en exemples SFT et en paires de préférences. À utiliser lorsque des traces notées ou des exemples d'échecs doivent devenir des données d'entraînement, lors de l'application du rejection sampling aux sorties du modèle, ou lors de la construction de paires DPO à partir d'exécutions réussies et échouées.

npx skills add https://github.com/wshobson/agents --skill trace-to-training-data

Tracer vers Données d'Entraînement

Cette skill suppose que eval-harness-first a déjà noté les traces converties ici — goldens, graders, et runs/<run-id>/results.json existent tous avant le début de la conversion. C'est le bord du flywheel que la skill nomme dans son propre flow : « les mêmes traces étiquetées deviennent l'ensemble d'entraînement. » La conversion se fait ici ; la notation a déjà eu lieu en amont.

Entrée : traces notées — eval/goldens.jsonl plus runs/<run-id>/results.json, chaque ligne portant un task_id, un verdict du grader, et une reward quand la tâche supporte un score scalaire (score de juge, crédit partiel d'exécution, ou un verifier RLVR) :

{"task_id": "t-042", "trace_id": "t-042-a3",
 "messages": [{"role": "user", "content": "..."}],
 "verdict": "pass", "reward": 0.91,
 "grader": "exact_match"}

Format de sortie : lignes façonnées exactement comme le tableau Format Selection de dataset-curation — lignes SFT messages ou paires DPO prompt/chosen/rejected — donc la sortie de cette skill est l'entrée de celle-ci sans étape de restructuration entre les deux.

Le Principe

L'harness d'eval a déjà fait le travail d'étiquetage : chaque trace dans results.json porte un verdict, et souvent une reward, avant que cette skill la touche. Convertir une trace notée en ligne d'entraînement est mécanique — choisir une forme du tableau dataset-curation, mapper les champs, écrire du JSONL. La curation est le travail qui reste — quelles traces franchissent un seuil de qualité, quelles paires sont informatives, et quelles lignes ne doivent jamais entrer dans l'ensemble d'entraînement du tout.

Traitez toute étape de conversion qui nécessite de re-noter une trace comme un signe que l'harness manque d'un grader, pas une lacune que cette skill devrait masquer. Une trace sans verdict ou reward n'est pas encore convertible — routez-la vers eval-harness-first d'abord, ne l'étiquetez pas manuellement ici pour débloquer la conversion.

SFT à partir de Traces

  • Conservez la fraction de récompense supérieure des trajectoires couronnées de succès, pas chaque trajectoire réussie. Classez les traces réussies par reward et prenez une fraction (le pattern Agent-lightning) plutôt que chaque trace qui a simplement franchi la barre de réussite — une trace à peine réussie est un signal SFT plus faible qu'une qui a bien dépassé le seuil.
  • Les échecs corrigés par un expert deviennent directement des exemples SFT d'or (le pattern Langfuse) — quand un humain édite la sortie d'une trace échouée en une correcte, cette correction n'a besoin d'aucun seuil de reward ; un humain l'a déjà validée. Routez les corrections directement dans l'ensemble SFT.
  • Le masquage au niveau des étapes bénéficie plus que l'abandon de trajectoire entière pour les traces multi-étapes. Quand seulement certaines étapes dans une trajectoire multi-étape sont mauvaises, masquez la perte sur les mauvaises étapes et conservez les bonnes, plutôt que de jeter la trajectoire entière. SRFT rapporte 32,2 % vs. 30,9 % sur SWE-bench pour le masquage du critique au niveau des étapes comparé à l'abandon de trajectoire — un écart réel, bien que modeste, de la découpe plus fine.

Paires de Préférence à partir de Traces

  • Construisez des paires à partir de trajectoires réussie-vs-échouée sur la MÊME tâche, jamais à partir de traces sans rapport avec les meilleures et pires scores tirées de différentes tâches — les paires cross-task apprennent au modèle à préférer une tâche à une autre, pas une réponse à une autre.
  • Sélectionnez le membre rejeté à μ−2σ de la distribution de reward pour cette tâche, jamais le minimum absolu. La section Pair Construction de preference-optimization possède la formule de sélection complète ; cette skill fournit les trajectoires notées qu'elle consomme.
  • La sélection delta notée par juge coupe le volume des paires sans couper le signal. Notez chaque paire candidate par delta du juge chosen-minus-rejected et conservez seulement le sous-ensemble avec le delta le plus élevé — les 5k supérieurs d'un pool candidat de 16,5k correspondaient au résultat du pool complet. Construisez d'abord l'ensemble candidat complet, puis filtrez par delta ; ne limitez pas la génération à 5k au départ.

Hygiène

  • Scannez les secrets et PII avant qu'une ligne ne soit expédiée, et rédigez ce qui est trouvé. Les traces provenant des journaux de production peuvent contenir des credentials, des clés API, des tokens, ou des données client — exécutez un scan secret/PII sur chaque ligne SFT et DPO et rédigez les correspondances ; la conversion échoue fermée (la ligne est supprimée, non expédiée avec le contenu brut) si des champs sensibles restent après rédaction. Ne commitez jamais des secrets.
  • Les goldens d'eval ne doivent jamais fuir dans les données d'entraînement. Tenez tous les IDs de eval/goldens.jsonl à l'écart de chaque ensemble SFT et DPO converti — une trace qui apparaît aussi comme un golden s'entraîne sur l'élément exact pour lequel le checkpoint est noté plus tard, gonflant silencieusement chaque exécution d'eval ultérieure.
  • Dédup par rapport à l'ensemble d'entraînement, pas seulement dans les lignes nouvellement converties — correspondance exacte ou similitude d'embedding, correspondant à la méthode dedup de dataset-curation, exécutez sur les données d'entraînement qui existent déjà avant que ce lot ne s'y ajoute.
  • La provenance entre dans la carte de dataset. Chaque ligne convertie doit remonter à sa source run_id et trace_id — le champ Provenance de dataset-curation vérifie exactement ce lien vers la sortie trace-to-training-data ; une ligne sans source traçable n'est pas prête à fusionner.

Skills Connexes

  • eval-harness-first — produit les traces notées que cette skill convertit ; une trace sans verdict ou reward n'est pas convertible encore, routez-la là-bas avant la conversion.
  • dataset-curation — possède les formats cibles et la carte de dataset que les données de provenance de cette skill alimentent ; les lignes converties doivent correspondre exactement à ses noms de champs du tableau Format Selection, pas une approximation d'eux.
  • preference-optimization — consomme les paires DPO que cette skill construit et possède la formule de sélection de rejet μ−2σ complète référencée ci-dessus.

Les conversions JSONL-to-JSONL travaillées — trace notée vers ligne SFT, paire de trace vers paire DPO, correction vers ligne SFT, la boucle de rejection-sampling, et la vérification de holdout des goldens — se trouvent dans references/conversion-recipes.md.

Skills similaires