生成研究问题池 是做什么的?
此技能生成 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 "领域一;领域二;..." 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。仅使用标准库。