CommunityRédaction et éditiongithub.com

générer-questions

Générer un pool de questions de recherche candidates avec plusieurs agents générateurs d'IA, selon deux modes (invite simple et transfert de résultats d'un domaine distant nommé), puis fusionner les quasi-doublons et réécrire chaque question dans un style simple et neutre. À utiliser au début d'une recherche de questions de recherche dans un domaine où chaque question peut être testée par un pilote court noté par script, ou chaque fois qu'un large pool dédoublonné de questions candidates est nécessaire avant d'en choisir.

Qu'est-ce que générer-questions ?

Cette compétence aide les chercheurs et les ingénieurs en IA à générer un ensemble diversifié et dédoublonné de questions de recherche pouvant être testées via des expériences pilotes courtes. Elle utilise plusieurs agents LLM générateurs (au moins trois modèles distincts) selon deux modes : un mode « simple » où les questions sont générées à partir d'une invite de base, et un mode « distant » où les résultats bien établis d'un domaine distant (comme la psychologie cognitive ou l'écologie) sont transférés pour inspirer des questions dans le domaine cible. Les questions générées sont ensuite regroupées, les quasi-doublons sont fusionnés par un juge LLM, et chaque question restante est réécrite dans un style neutre et uniforme (ne précisant aucune direction de l'effet recherché). Le résultat final est un fichier `pool.json` contenant des questions anonymisées, prêtes à être soumises à des compétences en aval comme `screen-pilot`, `critique-forecast` ou `check-novelty`. Cette compétence a été testée avec des modèles Claude (Opus 5.5, Fable 5.2, Sonnet 5.5) dans le domaine du comportement des petits modèles de langage ouverts. Elle prend en charge n'importe quel LLM accessible via API ou outil, et nécessite un profil de domaine, des scripts Python (bibliothèque standard uniquement) et un dossier de travail.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/techurbanist/research-skills/tree/HEAD/skills/generate-questions

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait générer-questions ?

Cette compétence produit pool.json : une liste de questions de recherche candidates, chacune avec un identifiant anonyme, fusionnées de sorte que les quasi-doublons n'apparaissent qu'une fois, et réécrites pour que chaque question ait le même style simple et ne nomme aucune direction pour l'effet qu'elle examine. Les compétences suivantes (screen-pilot, critique-forecast, check-novelty) prennent ce fichier en entrée.

Ce dont vous avez besoin en premier

  • Un profil de domaine : une copie de field-profile/TEMPLATE.md de ce package, rempli pour votre domaine et sauvegardé dans le projet (par défaut FIELD-PROFILE.md à la racine du projet). Le chercheur doit approuver son contenu, en particulier le domaine, les sujets sur lesquels les pilotes seront exécutés, les limites des pilotes et qui voudrait connaître les réponses. Le profil testé est field-profile/example-small-language-models.md.
  • Un dossier de travail pour cette série, appelé ici RUN/.
  • Des sous-agents avec leurs propres contextes. Lorsque vous pouvez choisir le modèle, utilisez un modèle différent pour chaque générateur. Vous pouvez également exécuter un générateur via l'outil ou l'API d'un autre fournisseur et enregistrer sa sortie dans le même format.

Étapes

  1. Choisir les générateurs. Utilisez au moins trois modèles générateurs, chacun dans les deux modes, donc chaque modèle exécute deux générateurs : plain et distant. Lors du test, trois modèles Claude (Opus 5.5, Fable 5.2, Sonnet 5.5) ont chacun écrit 17 questions par mode.
  2. Attribuer des domaines distants. Choisissez une liste de domaines distants avec des résultats bien établis (testés : psychologie cognitive, psycholinguistique, économie comportementale, écologie) et tirez un par générateur distant sans remise : python3 scripts/assign_fields.py GRAINE "domaine un;domaine deux;..." NOM1 NOM2 NOM3. Enregistrez la graine et la sortie.
  3. Rédiger les briefs. python3 scripts/make_briefs.py FIELD-PROFILE.md RUN N NOM1:plain NOM1:distant:"DOMAINE" ... écrit un brief par générateur dans RUN/briefs/ (un court en-tête, le prompt du mode depuis prompts/plain.md ou prompts/distant.md, puis prompts/constraints.md, tous remplis à partir du profil) et crée les dossiers de sortie.
  4. Exécuter les générateurs. Démarrez un sous-agent frais par brief, avec le modèle pour lequel le brief est conçu, et dites-lui de lire uniquement son brief et de le suivre. Ne lui montrez aucun exemple de question et aucune sortie d'un autre générateur. Il écrit candidates.json (et, en mode distant, transfers.md, sa liste de travail, qui est conservée pour mémoire et non transmise).
  5. Vérifier le format. python3 scripts/check_candidates.py N RUN/generation/*/*/candidates.json. Demandez à un générateur une correction une fois si son fichier échoue, et enregistrez-le.
  6. Regrouper et trouver les quasi-doublons.
    • python3 scripts/merge.py RUN/pool GRAINE plain:NOM1=RUN/generation/plain/NOM1/candidates.json distant:NOM1=... ... ne conserve que le texte de la question et mélange.
    • python3 scripts/candidate_pairs.py RUN/pool liste les paires de questions similaires. La version testée intègre les questions avec nomic-embed-text via un serveur Ollama local et conserve les paires avec une similarité cosinus d'au moins 0,83, au maximum 5 plus proches voisins par question. Sans Ollama, ajoutez --lexical (non testé : similarité du nombre de mots, les 5 plus proches voisins de chaque question).
  7. Juger les doublons. Remplissez prompts/dedup_judge.md à partir du profil (python3 scripts/fill_prompt.py FIELD-PROFILE.md prompts/dedup_judge.md > RUN/pool/dedup_judge.md). Pour plus d'environ 150 paires, divisez-les (python3 scripts/split_pairs.py RUN/pool 150) et donnez chaque lot à un juge frais (testé : Sonnet 5.5, quatre lots de 152 paires). Chaque juge lit uniquement le prompt rempli et son lot et écrit ses décisions ; joignez-les avec python3 scripts/join_decisions.py RUN/pool decisions_1.json .... Ensuite, python3 scripts/apply_merges.py RUN/pool fusionne les clusters et écrit to_rewrite.json.
  8. Réécrire. Remplissez prompts/rewrite.md de la même manière et donnez-le, avec RUN/pool/to_rewrite.json, à un agent frais (testé : Sonnet 5.5), qui écrit RUN/pool/rewritten.json et ne lit aucun autre fichier.
  9. Anonymiser. python3 scripts/anonymise.py RUN/pool GRAINE vérifie que chaque identifiant a été réécrit, liste les questions de plus de 50 mots, remélange et écrit RUN/pool/pool.json (identifiants Q01, Q02, ... et texte) et RUN/pool/sources.json (de quel générateur et mode chacun provient). Montrez aux critiques, prévisionnistes, constructeurs de pilotes et vérificateurs de nouveauté uniquement pool.json.

Graines : tout entier fixe, choisi et enregistré avant l'exécution de l'étape.

Ce que le test a montré

Lors du test (domaine : le comportement observable des petits modèles de langage ouverts), 12 générateurs ont écrit 204 questions en environ trois minutes. La fusion en a laissé 168 (18 % étaient des quasi-doublons ; des idées telles que la confiance déclarée séparant les réponses correctes des incorrectes sont apparues chez plusieurs générateurs). La part des questions dont le pilote a trouvé un effet et dont la vérification de la littérature n'a trouvé aucun rapport antérieur dans la même direction était :

ModeRésultats nouveaux et confirmés
Invite simple14 sur 50 (28 %)
Transfert depuis un domaine distant14 sur 51 (27 %)
Problématisation (non inclus)6 sur 42 (14 %)
Cartographie des lacunes à partir de résumés récents (non inclus)3 sur 36 (8 %)

Avec 36 à 51 questions par mode, ces différences sont descriptives (test d'égalité des taux, p = 0,054). Les deux modes non inclus sont documentés dans NOT-RECOMMENDED.md en haut de ce package.

Fichiers

  • prompts/plain.md, prompts/distant.md : les prompts de génération. N est remplacé par le nombre de questions ; les autres espaces réservés proviennent du profil de domaine.
  • prompts/constraints.md : contraintes que chaque générateur reçoit.
  • prompts/dedup_judge.md, prompts/rewrite.md : le juge de doublons et le réécrivain.
  • scripts/ : fill_prompt.py, make_briefs.py, assign_fields.py, check_candidates.py, merge.py, candidate_pairs.py, split_pairs.py, join_decisions.py, apply_merges.py, anonymise.py. Bibliothèque standard uniquement.

Skills associés