Communityライティング&編集github.com

generate-questions

複数のAIジェネレーターエージェントを用いて研究質問の候補プールを生成し、単純なプロンプトモードと遠方分野からの知見転送モードの2つのモードで動作させ、その後、類似質問を統合し、すべての質問を平易で両方向性のあるスタイルに書き換えます。各質問がスクリプトでスコアリング可能な短期パイロットでテストできる研究分野での質問探索の開始時や、質問選択前に広範で重複除去された候補プールが必要なときに使用します。

generate-questions とは?

このスキルは、研究の初期段階で、候補となる研究質問のプールを体系的に生成するためのワークフローを提供します。複数の異なるAIモデル(ジェネレーター)を2つの異なるモード(単純なプロンプトによる直接生成、および指定された遠方分野の確立された知見を転用する方法)で並列実行し、多様な質問を生成します。その後、埋め込みベクトルに基づく類似度計算と専用のジャッジエージェントによる重複判定を経て、類似質問を統合します。最後に、すべての質問を一貫した平易な文体に書き換え、匿名化して`pool.json`として出力します。主にClaude等の大規模言語モデル上で動作し、スクリプトによる自動化とワークフローの各ステップが明確に定義されているため、再現性が高く、研究者が選択肢を公平に評価するための基盤を提供します。

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

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

generate-questions は何をしますか?

このスキルはpool.jsonを生成します。これは、候補研究質問のリストであり、各質問は匿名IDを持ち、類似質問は統合され、すべての質問が同じ平易なスタイルで、質問している効果の方向性を特定しないように書き換えられています。後続のスキル(screen-pilot、critique-forecast、check-novelty)はこのファイルを入力として使用します。

事前に必要なもの

  • フィールドプロファイル: このパッケージのfield-profile/TEMPLATE.mdをコピーし、あなたのフィールド用に記入してプロジェクト内に保存してください(デフォルトではプロジェクトルートのFIELD-PROFILE.md)。研究者はその内容、特にフィールド、パイロットテストの対象者、パイロットの制限、誰が回答を知りたいと思うかについて合意する必要があります。テスト済みのプロファイルはfield-profile/example-small-language-models.mdです。
  • 今回のラウンド用のワークフォルダ。ここではRUN/と呼びます。
  • それぞれ独自のコンテキストを持つサブエージェント。モデルを選択できる場合は、ジェネレーターごとに異なるモデルを使用してください。別のプロバイダーのツールやAPIを介してジェネレーターを実行し、その出力を同じ形式で保存することもできます。

手順

  1. ジェネレーターを選択します。 少なくとも3つの生成モデルを使用し、それぞれを両方のモードで実行します。これにより、各モデルはplainとdistantの2つのジェネレーターを実行することになります。テストでは、3つのClaudeモデル(Opus 5.5、Fable 5.2、Sonnet 5.5)が各モードで17の質問を生成しました。
  2. 遠方分野を割り当てます。 確立された知見を持つ遠方分野のリスト(テスト済み:認知心理学、心理言語学、行動経済学、生態学)を選択し、ジェネレーターごとに重複なく1つ割り当てます: python3 scripts/assign_fields.py SEED "分野1;分野2;..." NAME1 NAME2 NAME3 シードと出力を記録します。
  3. ブリーフを作成します。 python3 scripts/make_briefs.py FIELD-PROFILE.md RUN N NAME1:plain NAME1:distant:"FIELD" ... これにより、RUN/briefs/にジェネレーターごとに1つのブリーフが作成されます(短いヘッダー、モードのプロンプト(prompts/plain.mdまたはprompts/distant.md)、その後にprompts/constraints.mdが続き、すべてプロファイルから埋め込まれます)。また、出力フォルダも作成されます。
  4. ジェネレーターを実行します。 ブリーフごとに、そのブリーフ用のモデルを使用して新しいサブエージェントを起動し、そのブリーフのみを読んで従うように指示します。例となる質問や他のジェネレーターの出力は見せないでください。エージェントはcandidates.json(および、distantモードの場合は、その作業リストであるtransfers.mdも)を書き込みます。これは記録として保持され、後続の処理には渡されません。
  5. フォーマットを確認します。 python3 scripts/check_candidates.py N RUN/generation/*/*/candidates.json ファイルが不合格だった場合、ジェネレーターに1回だけ修正を依頼し、その記録を残します。
  6. プールし、類似質問を見つけます。
    • python3 scripts/merge.py RUN/pool SEED plain:NAME1=RUN/generation/plain/NAME1/candidates.json distant:NAME1=... ... 質問テキストのみを保持し、シャッフルします。
    • python3 scripts/candidate_pairs.py RUN/pool 類似質問のペアをリストアップします。テスト済みバージョンでは、nomic-embed-textを使用してローカルのOllamaサーバーを介して質問を埋め込み、コサイン類似度が少なくとも0.83、質問あたり最大5つの最近傍を保持します。Ollamaがない場合は、--lexicalを追加します(未テスト:単語数ベースの類似度、各質問の5つの最近傍)。
  7. 重複を判定します。 プロファイルからprompts/dedup_judge.mdを埋め込みます(python3 scripts/fill_prompt.py FIELD-PROFILE.md prompts/dedup_judge.md > RUN/pool/dedup_judge.md)。ペアが約150組を超える場合は、分割します(python3 scripts/split_pairs.py RUN/pool 150)。各バッチを新しいジャッジに渡します(テスト済み:Sonnet 5.5、152組の4バッチ)。各ジャッジは埋め込まれたプロンプトとそのバッチのみを読み、判定を書き込みます。python3 scripts/join_decisions.py RUN/pool decisions_1.json ...でそれらを結合します。次にpython3 scripts/apply_merges.py RUN/poolがクラスターを統合し、to_rewrite.jsonを書き出します。
  8. 書き換えます。 同様にprompts/rewrite.mdを埋め込み、それをRUN/pool/to_rewrite.jsonとともに1つの新しいエージェント(テスト済み:Sonnet 5.5)に渡します。このエージェントはRUN/pool/rewritten.jsonを書き出し、他のファイルは読み込みません。
  9. 匿名化します。 python3 scripts/anonymise.py RUN/pool SEED すべてのIDが書き換えられたことを確認し、50語を超える質問をリストアップし、再シャッフルし、RUN/pool/pool.json(ID Q01、Q02, ... とテキスト)およびRUN/pool/sources.json(各質問のジェネレーターとモード)を書き出します。批評家、予測者、パイロットビルダー、新規性チェッカーにはpool.jsonのみを表示します。

シード:任意の固定整数。手順の実行前に選択し、記録しておきます。

テスト結果

テスト(フィールド:小規模オープン言語モデルの観察可能な動作)では、12個のジェネレーターが約3分で204の質問を生成しました。統合後は168個(18%が類似質問。正解と不正解を区別する表明された確信などのアイデアは複数のジェネレーターで現れました)。パイロットで効果が見つかり、文献調査で同じ方向の先行報告が見つからなかった質問の割合は以下の通りです。

モード新規かつ確認された知見
単純プロンプト50件中14件 (28%)
遠方分野からの転送51件中14件 (27%)
問題化(未含む)42件中6件 (14%)
最近のアブストラクトからのギャップマッピング(未含む)36件中3件 (8%)

モードあたり36~51の質問であるため、これらの差は記述的なものです(比率の等質性検定、p = 0.054)。含まれていない2つのモードは、このパッケージのトップにあるNOT-RECOMMENDED.mdに文書化されています。

ファイル

  • prompts/plain.md、prompts/distant.md:生成プロンプト。Nは質問数に置き換えられ、その他のプレースホルダーはフィールドプロファイルから埋め込まれます。
  • prompts/constraints.md:すべてのジェネレーターが受け取る制約。
  • prompts/dedup_judge.md、prompts/rewrite.md:重複ジャッジと書き換え用プロンプト。
  • 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。標準ライブラリのみを使用しています。

関連スキル