Was macht fragen-generieren?
Dieser Skill erzeugt pool.json: eine Liste von Kandidaten-Forschungsfragen,
jeweils mit einer anonymen ID, zusammengeführt, sodass nahe Duplikate nur einmal erscheinen, und
umgeschrieben, sodass jede Frage den gleichen schlichten Stil hat und keine
Richtung für den Effekt benennt, nach dem sie fragt. Die nächsten Skills (screen-pilot,
critique-forecast, check-novelty) verwenden diese Datei als Eingabe.
Was Sie zuerst brauchen
- Ein Feldprofil: eine Kopie von
field-profile/TEMPLATE.mdaus diesem Paket, ausgefüllt für Ihr Fachgebiet und im Projekt gespeichert (standardmäßigFIELD-PROFILE.mdim Projektstammverzeichnis). Der Forscher sollte den Inhalt bestätigen, insbesondere das Fachgebiet, die Probanden, an denen die Piloten durchgeführt werden, die Pilotenlimits und wer die Antworten wissen möchte. Das getestete Profil istfield-profile/example-small-language-models.md. - Ein Arbeitsordner für diese Runde, hier
RUN/genannt. - Unter-Agenten mit ihren eigenen Kontexten. Wo Sie das Modell wählen können, verwenden Sie ein anderes Modell für jeden Generator. Sie können einen Generator auch über das Tool oder die API eines anderen Anbieters ausführen und seine Ausgabe im gleichen Format speichern.
Schritte
- Wählen Sie die Generatoren aus. Verwenden Sie mindestens drei generierende Modelle, jedes
in beiden Modi, sodass jedes Modell zwei Generatoren ausführt:
plainunddistant. Im Test schrieben drei Claude-Modelle (Opus 5.5, Fable 5.2, Sonnet 5.5) jeweils 17 Fragen pro Modus. - Weisen Sie entfernte Fachgebiete zu. Wählen Sie eine Liste entfernter Fachgebiete mit
gut etablierten Erkenntnissen (getestet: Kognitionspsychologie,
Psycholinguistik, Verhaltensökonomie, Ökologie) und ziehen Sie eines pro entferntem
Generator ohne Zurücklegen:
python3 scripts/assign_fields.py SEED "Fachgebiet eins;Fachgebiet zwei;..." NAME1 NAME2 NAME3. Notieren Sie den Samen und die Ausgabe. - Schreiben Sie die Kurzbeschreibungen.
python3 scripts/make_briefs.py FIELD-PROFILE.md RUN N NAME1:plain NAME1:distant:"FIELD" ...schreibt eine Kurzbeschreibung pro Generator inRUN/briefs/(einen kurzen Header, die Eingabeaufforderung des Modus ausprompts/plain.mdoderprompts/distant.md, dannprompts/constraints.md, alles aus dem Profil ausgefüllt) und erstellt die Ausgabeordner. - Führen Sie die Generatoren aus. Starten Sie einen frischen Unter-Agenten pro Kurzbeschreibung, mit
dem Modell, für das die Kurzbeschreibung bestimmt ist, und weisen Sie ihn an, nur seine Kurzbeschreibung zu lesen und zu befolgen.
Zeigen Sie ihm keine Beispielfragen und keine Ausgabe eines anderen Generators. Er
schreibt
candidates.json(und im distant-Modustransfers.md, seine Arbeitsliste, die für die Aufzeichnung aufbewahrt und nicht weitergegeben wird). - Überprüfen Sie das Format.
python3 scripts/check_candidates.py N RUN/generation/*/*/candidates.json. Bitten Sie einen Generator einmal um eine Korrektur, wenn seine Datei fehlschlägt, und notieren Sie dies. - Zusammenführen und nahe Duplikate finden.
python3 scripts/merge.py RUN/pool SEED plain:NAME1=RUN/generation/plain/NAME1/candidates.json distant:NAME1=... ...behält nur den Fragetext und mischt.python3 scripts/candidate_pairs.py RUN/poollistet Paare ähnlicher Fragen auf. Die getestete Version bettet die Fragen mitnomic-embed-textüber einen lokalen Ollama-Server ein und behält Paare mit Kosinus-Ähnlichkeit von mindestens 0,83, maximal 5 nächste Nachbarn pro Frage. Ohne Ollama fügen Sie--lexicalhinzu (ungtestet: Wortanzahl-Ähnlichkeit, die 5 nächsten Nachbarn jeder Frage).
- Beurteilen Sie Duplikate. Füllen Sie
prompts/dedup_judge.mdaus dem Profil (python3 scripts/fill_prompt.py FIELD-PROFILE.md prompts/dedup_judge.md > RUN/pool/dedup_judge.md). Bei mehr als etwa 150 Paaren teilen Sie sie auf (python3 scripts/split_pairs.py RUN/pool 150) und geben Sie jede Charge einem frischen Richter (getestet: Sonnet 5.5, vier Chargen von 152 Paaren). Jeder Richter liest nur die ausgefüllte Eingabeaufforderung und seine Charge und schreibt seine Entscheidungen; führen Sie sie zusammen mitpython3 scripts/join_decisions.py RUN/pool decisions_1.json .... Dann führtpython3 scripts/apply_merges.py RUN/pooldie Cluster zusammen und schreibtto_rewrite.json. - Umschreiben. Füllen Sie
prompts/rewrite.mdauf die gleiche Weise und geben Sie es zusammen mitRUN/pool/to_rewrite.jsoneinem frischen Agenten (getestet: Sonnet 5.5), derRUN/pool/rewritten.jsonschreibt und keine andere Datei liest. - Anonymisieren.
python3 scripts/anonymise.py RUN/pool SEEDprüft, dass jede ID umgeschrieben wurde, listet Fragen mit über 50 Wörtern auf, mischt erneut und schreibtRUN/pool/pool.json(IDs Q01, Q02, ... und Text) undRUN/pool/sources.json(von welchem Generator und Modus jede stammt). Zeigen Sie Kritikern, Prognostikern, Pilotenbauern und Neuheitsprüfern nurpool.json.
Samen: beliebige feste ganze Zahlen, vor Ausführung des Schritts gewählt und notiert.
Was der Test zeigte
Im Test (Fachgebiet: das beobachtbare Verhalten kleiner offener Sprachmodelle) schrieben 12 Generatoren 204 Fragen in etwa drei Minuten. Das Zusammenführen hinterließ 168 (18 % waren nahe Duplikate; Ideen wie angegebene Konfidenz, die richtige von falschen Antworten trennt, kamen in mehreren Generatoren auf). Der Anteil der Fragen, deren Pilot einen Effekt fand und deren Literaturprüfung keinen früheren Bericht in der gleichen Richtung ergab, war:
| Modus | Neue und bestätigte Ergebnisse |
|---|---|
| Einfache Aufforderung | 14 von 50 (28 %) |
| Übertragung aus einem entfernten Fachgebiet | 14 von 51 (27 %) |
| Problematisierung (nicht enthalten) | 6 von 42 (14 %) |
| Lückenkartierung aus aktuellen Zusammenfassungen (nicht enthalten) | 3 von 36 (8 %) |
Mit 36 bis 51 Fragen pro Modus sind diese Unterschiede deskriptiv
(Test auf gleiche Raten, p = 0,054). Die beiden nicht enthaltenen Modi sind in
NOT-RECOMMENDED.md oben in diesem Paket dokumentiert.
Dateien
prompts/plain.md,prompts/distant.md: die Generierungsaufforderungen.Nwird durch die Anzahl der Fragen ersetzt; die anderen Platzhalter stammen aus dem Feldprofil.prompts/constraints.md: Einschränkungen, die jeder Generator erhält.prompts/dedup_judge.md,prompts/rewrite.md: der Duplikatrichter und der Umschreiber.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. Nur Standardbibliothek.