生成研究問題 是做什麼的?
此技能產生 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 運行生成器,並以相同格式儲存其輸出。
步驟
- 選擇生成器。 使用至少三個生成模型,每個模型都以兩種模式運行,因此每個模型運行兩個生成器:
plain和distant。在測試中,三個 Claude 模型(Opus 5.5、Fable 5.2、Sonnet 5.5)每個模式各寫了 17 個問題。 - 分配遠端領域。 選擇一個具有確立發現的遠端領域清單(已測試:認知心理學、心理語言學、行為經濟學、生態學),並為每個遠端生成器抽取一個領域,不重複:
python3 scripts/assign_fields.py SEED "field one;field two;..." NAME1 NAME2 NAME3。 記錄種子和輸出。 - 撰寫簡報。
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,全部從設定檔中填入),並建立輸出資料夾。 - 運行生成器。 為每個簡報啟動一個新的子代理,使用該簡報對應的模型,並告訴它僅閱讀其簡報並遵循指示。不要向它展示範例問題或其他生成器的輸出。它會寫入
candidates.json(以及在遠端模式中,會寫入transfers.md,其工作清單,保留用於記錄,不會傳遞)。 - 檢查格式。
python3 scripts/check_candidates.py N RUN/generation/*/*/candidates.json。 如果某個生成器的檔案不符合要求,要求該生成器修正一次,並記錄下來。 - 合併並尋找近似重複項。
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 個最近鄰居)。
- 判斷重複項。 從設定檔中填入
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。 - 改寫。 以相同方式填入
prompts/rewrite.md,並將其與RUN/pool/to_rewrite.json一起提供給一個新的代理(已測試:Sonnet 5.5),該代理會寫入RUN/pool/rewritten.json,且不讀取任何其他檔案。 - 匿名化。
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。僅使用標準庫。