Community寫作與編輯github.com

生成研究問題

使用多個 AI 生成器代理,以兩種模式(純文字提示和從指定遠端領域轉移發現)生成候選研究問題池,然後合併近似重複項並以一致、雙向的風格改寫每個問題。在開始搜尋研究問題時使用,特別是需要透過腳本評分的簡短試點來測試每個問題的領域,或是在從中選擇之前需要一個廣泛、去重複的候選問題池時使用。

生成研究問題 是什麼?

此技能旨在自動生成一個高品質、去重複的候選研究問題池,供後續的篩選、評估和新穎性檢查步驟使用。它利用多個 AI 生成器模型(例如 Claude、GPT),每種模型都執行兩種模式:「plain」模式直接從提示生成問題,而「distant」模式則從指定的遠端領域(如認知心理學或行為經濟學)轉移已知發現,以促進跨領域靈感。技能流程會自動合併近義重複項、以標準化風格改寫每個問題、匿名化處理並輸出一個 `pool.json` 檔案。此技能特別適用於需要對大量候選問題進行系統性初步篩選的研究項目,例如透過簡短試點測試的假設。它支援 Claude Code、Cursor 和 Codex 等 AI 代理平台,並可與其他命令列腳本整合以進行批次處理。

相容平台✓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 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

生成研究問題 是做什麼的?

此技能產生 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. 選擇生成器。 使用至少三個生成模型,每個模型都以兩種模式運行,因此每個模型運行兩個生成器:plain 和 distant。在測試中,三個 Claude 模型(Opus 5.5、Fable 5.2、Sonnet 5.5)每個模式各寫了 17 個問題。
  2. 分配遠端領域。 選擇一個具有確立發現的遠端領域清單(已測試:認知心理學、心理語言學、行為經濟學、生態學),並為每個遠端生成器抽取一個領域,不重複: python3 scripts/assign_fields.py SEED "field one;field two;..." NAME1 NAME2 NAME3。 記錄種子和輸出。
  3. 撰寫簡報。 python3 scripts/make_briefs.py FIELD-PROFILE.md RUN N NAME1:plain NAME1:distant:"FIELD" ... 為 RUN/briefs/ 中的每個生成器寫入一份簡報(一個簡短標頭、來自 prompts/plain.md 或 prompts/distant.md 的模式提示,然後是 prompts/constraints.md,全部從設定檔中填入),並建立輸出資料夾。
  4. 運行生成器。 為每個簡報啟動一個新的子代理,使用該簡報對應的模型,並告訴它僅閱讀其簡報並遵循指示。不要向它展示範例問題或其他生成器的輸出。它會寫入 candidates.json(以及在遠端模式中,會寫入 transfers.md,其工作清單,保留用於記錄,不會傳遞)。
  5. 檢查格式。 python3 scripts/check_candidates.py N RUN/generation/*/*/candidates.json。 如果某個生成器的檔案不符合要求,要求該生成器修正一次,並記錄下來。
  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 列出相似問題的配對。測試版本透過本地 Ollama 伺服器使用 nomic-embed-text 嵌入問題,並保留餘弦相似度至少為 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 個配對)。每個判斷代理僅讀取已填入的提示和其批次,並寫入其判斷結果;使用 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 一起提供給一個新的代理(已測試: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 個生成器在大約三分鐘內生成了 204 個問題。合併後剩下 168 個(18% 是近似重複項;例如「陳述的信心區分正確與錯誤答案」這樣的想法在多個生成器中出現)。其試點發現效果且文獻查核未發現相同方向的早期報告的問題比例為:

模式新且經確認的發現
純文字提示50 個中的 14 個 (28%)
從遠端領域轉移51 個中的 14 個 (27%)
問題化(未包含)42 個中的 6 個 (14%)
從近期摘要進行差距映射(未包含)36 個中的 3 個 (8%)

每個模式有 36 到 51 個問題,這些差異是描述性的(等比率檢定,p = 0.054)。未包含的兩種模式記錄在此套件頂層的 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。僅使用標準庫。

相關技能