Curation SynthLabs
Vue d'ensemble
Utilisez cette skill pour la curation de datasets SynthLabs qui s'exécute via les routes HTTP job existantes au lieu d'un travail manuel axé sur l'UI. Ceci est une guidance de workflow pour une application externe ; ne supposez pas que zorai expose des outils SynthLabs dédiés.
Quand l'utiliser
Utilisez cette skill quand :
- la tâche consiste à auto-scorer, réécrire, supprimer des éléments, ou migrer du contenu de raisonnement via des jobs de fond,
- l'opérateur veut une boucle de polling répétable au lieu d'actions navigateur ligne par ligne,
- l'exécution doit laisser une trace de vérification dans les notes de session active, de tâche ou d'objectif zorai,
- ou les vérifications de maintenance telles que les statistiques de logs, le nettoyage de tags ou les scans d'orphelins aident à valider l'état du dataset.
N'utilisez pas cette skill quand :
- la tâche est une revue manuelle au niveau ligne, approbation de vérificateur, aperçu de données ou autre inspection visuelle,
- les credentials du fournisseur doivent être entrés de manière interactive dans l'UI SynthLabs,
- ou le backend n'est pas encore sain et
synthlabs-setupdoit encore démarrer ou le réparer.
Règles agent
- Lisez l'état du job ou de la session actuel avant de démarrer un nouveau job de curation.
- Démarrez un job spécifique, enregistrez son
jobId, puis faites du polling jusqu'à ce qu'il atteignecompletedoufailed. - Traitez autoscore et rewrite comme des jobs soutenus par l'IA qui ont besoin d'une valeur
apiKeychiffrée compatible avec SynthLabs. - Traitez remove-items, migrate-reasoning, les vérifications d'orphelins et la plupart du nettoyage de tags comme des maintenances non-IA qui ne nécessitent pas de credentials de modèle chiffré.
- Routez la revue manuelle au niveau ligne, l'approbation de vérificateur et les vérifications ponctuelles visuelles vers
synthlabs-ui-operator.
Boucle vérification-d'abord
- Inspectez le travail existant avec
GET /api/jobsou l'état de session pour ne pas démarrer de jobs en doublon. - Démarrez exactement une route de curation avec la charge utile la plus étroite et sûre.
- Faites du polling
GET /api/jobs/:idjusqu'à ce que le job soitcompletedoufailed. - Examinez les champs
progress,resulteterroravant de déclarer le succès. - Mettez à jour les notes de session active, de tâche ou d'objectif zorai avec l'ID de session, l'ID de job, les filtres utilisés, les dénombrements finaux et si la vérification UI est toujours en attente.
- Si des lignes ont besoin d'un jugement humain ou d'une approbation visuelle, confiez ce suivi à
synthlabs-ui-operatorau lieu de continuer en mode HTTP aveugle.
Polling et découverte
Listez les jobs récents, optionnellement filtrés par type ou statut :
curl -fsS "http://localhost:8787/api/jobs?type=rewrite&status=running&limit=20"
Récupérez l'état complet d'un job après le démarrage :
curl -fsS "http://localhost:8787/api/jobs/job_123"
Préférez GET /api/jobs/:id une fois que vous avez un jobId ; utilisez GET /api/jobs pour la découverte, la visibilité de la queue ou pour confirmer si une exécution similaire est déjà active.
Jobs soutenus par l'IA
POST /api/jobs/autoscore
Utilisez autoscore quand les éléments d'une session ont besoin d'un scoring basé modèle de 1-5.
curl -fsS -X POST "http://localhost:8787/api/jobs/autoscore" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "session_abc",
"provider": "openai",
"model": "gpt-4.1-mini",
"baseUrl": "https://api.openai.com/v1",
"apiKey": "<encrypted iv:ciphertext value>",
"limit": 100,
"offset": 0,
"concurrency": 1,
"maxRetries": 2,
"retryDelay": 2000,
"sleepMs": 500,
"force": false
}'
POST /api/jobs/rewrite
Utilisez rewrite quand le backend doit améliorer les champs query, reasoning ou answer sur place.
curl -fsS -X POST "http://localhost:8787/api/jobs/rewrite" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "session_abc",
"provider": "openai",
"model": "gpt-4.1-mini",
"baseUrl": "https://api.openai.com/v1",
"apiKey": "<encrypted iv:ciphertext value>",
"fields": ["reasoning", "answer"],
"limit": 50,
"concurrency": 1,
"sleepMs": 500
}'
Autoscore et rewrite appellent tous deux le client SynthLabs AI et déchiffrent l'apiKey soumis. Utilisez une valeur chiffrée compatible avec le comportement VITE_API_KEY_SALT ou API_KEY_SALT du backend. N'envoyez pas une clé de fournisseur en texte brut et n'inventez pas votre propre flux de chiffrement.
Jobs de migration et nettoyage non-IA
POST /api/jobs/remove-items
Utilisez remove-items pour le nettoyage déterministe. Cette route n'a pas besoin de credentials de modèle.
Testez d'abord un nettoyage par seuil :
curl -fsS -X POST "http://localhost:8787/api/jobs/remove-items" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "session_abc",
"scoreThreshold": 3,
"scoreField": "score",
"dryRun": true
}'
La route accepte exactement une méthode de suppression : indices ou scoreThreshold, jamais les deux.
POST /api/jobs/migrate-reasoning
Utilisez migrate-reasoning pour déplacer le contenu assistant <think> dans les champs reasoning_content pour une session. Cette route n'a pas besoin de credentials de modèle.
curl -fsS -X POST "http://localhost:8787/api/jobs/migrate-reasoning" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "session_abc",
"limit": 200,
"offset": 0,
"concurrency": 5,
"sleepMs": 100,
"force": false
}'
Surfaces de maintenance optionnelles
- Utilisez
GET /api/logs/statspour les résumés au niveau log avant ou après une passe de curation.
curl -fsS "http://localhost:8787/api/logs/stats?sessionUid=session_abc"
- Utilisez la gestion de tags quand l'organisation de session fait partie du flux de curation :
GET /api/tags,POST /api/tags,DELETE /api/tags/:uid,GET /api/sessions/:sessionUid/tags,POST /api/sessions/:sessionUid/tagsetDELETE /api/sessions/:sessionUid/tags. - Utilisez
POST /api/orphans/checkquand vous avez besoin d'un scan de fond pour les logs orphelins.
curl -fsS -X POST "http://localhost:8787/api/orphans/check"
Erreurs courantes
- Démarrer un deuxième job avant de vérifier qu'un équivalent ne s'exécute pas déjà.
- Traiter autoscore ou rewrite comme des routes à clés en texte brut quand elles nécessitent des credentials chiffrés.
- Utiliser remove-items de manière destructive avant un test ou avant de capturer les critères de suppression dans les notes.
- Déclarer le succès à partir de la réponse initiale
{ "jobId": ... }sans faire du pollingGET /api/jobs/:id. - Garder le travail de revieweur au niveau ligne en mode HTTP uniquement au lieu de le confier à
synthlabs-ui-operator.