Community写作与编辑github.com

生成研究问题池

使用多个AI生成智能体,以两种模式(纯提示和从指定遥远领域迁移发现)生成候选研究问题池,然后合并近似重复项并以统一、双面风格重写每个问题。适用于需要广泛、去重的候选问题池以进行择优选择的研究领域初期探索阶段。

生成研究问题池 是什么?

该技能旨在为研究人员生成一个结构化、去重且风格统一的研究问题池,适用于任何可通过脚本评分的小型预实验进行测试的研究领域。它利用多个AI生成智能体,每个智能体在两种模式下运行:纯提示模式(plain)和基于指定遥远领域发现迁移的模式(distant),从而从不同角度产生多样化的问题候选集。生成的原始问题列表会经过合并近似重复项(基于语义相似度,如使用nomic-embed-text嵌入模型)和去重判断,确保每个独特问题只出现一次。随后,通过一个独立的智能体对所有剩余问题进行重写,使其采用一致的中性风格(不指明效应方向),并最终匿名化为无偏差的pool.json文件,供后续筛选、预实验设计、结果预测、新颖性检查等下游技能使用。该技能适用于Claude Code等支持子代理和文件系统交互的AI平台,实际测试中,12个生成器在约3分钟内生成了204个问题,合并后保留168个,其中约28%的纯提示模式和27%的迁移模式问题在后续测试中发现了新的且未报道过的发现。

兼容平台✓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 "领域一;领域二;..." 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。仅使用标准库。

相关技能