O que gerar-perguntas faz?
Esta skill produz pool.json: uma lista de perguntas de pesquisa candidatas,
cada uma com um id anônimo, mescladas para que quase-duplicatas apareçam uma vez e
reescritas para que toda pergunta tenha o mesmo estilo simples e não nomeie nenhuma
direção para o efeito que pergunta. As próximas habilidades (screen-pilot,
critique-forecast, check-novelty) usam este arquivo como entrada.
O que você precisa primeiro
- Um perfil de campo: uma cópia de
field-profile/TEMPLATE.mddeste pacote, preenchida para o seu campo e salva no projeto (por padrãoFIELD-PROFILE.mdna raiz do projeto). O pesquisador deve concordar com seu conteúdo, em particular o campo, os sujeitos nos quais os pilotos serão executados, os limites do piloto e quem gostaria de saber as respostas. O perfil testado éfield-profile/example-small-language-models.md. - Uma pasta de trabalho para esta rodada, aqui chamada de
RUN/. - Subagentes com seus próprios contextos. Onde você puder escolher o modelo, use um modelo diferente para cada gerador. Você também pode executar um gerador através da ferramenta ou API de outro provedor e salvar sua saída no mesmo formato.
Passos
- Escolha os geradores. Use pelo menos três modelos geradores, cada um
em ambos os modos, para que cada modelo execute dois geradores:
plainedistant. No teste, três modelos Claude (Opus 5.5, Fable 5.2, Sonnet 5.5) cada um escreveu 17 perguntas por modo. - Atribua campos distantes. Escolha uma lista de campos distantes com
descobertas bem estabelecidas (testado: psicologia cognitiva,
psicolinguística, economia comportamental, ecologia) e sorteie um por
gerador distante sem reposição:
python3 scripts/assign_fields.py SEED "campo um;campo dois;..." NOME1 NOME2 NOME3. Registre a semente e a saída. - Escreva os briefs.
python3 scripts/make_briefs.py FIELD-PROFILE.md RUN N NOME1:plain NOME1:distant:"CAMPO" ...escreve um brief por gerador emRUN/briefs/(um cabeçalho curto, o prompt do modo deprompts/plain.mdouprompts/distant.md, depoisprompts/constraints.md, tudo preenchido a partir do perfil) e cria as pastas de saída. - Execute os geradores. Inicie um subagente novo por brief, com o
modelo para o qual o brief é, e diga a ele para ler apenas seu brief e segui-lo.
Não mostre a ele perguntas exemplo nem a saída de outro gerador. Ele
escreve
candidates.json(e, em modo distante,transfers.md, sua lista de trabalho, que é mantida para registro e não é passada adiante). - Verifique o formato.
python3 scripts/check_candidates.py N RUN/generation/*/*/candidates.json. Peça a um gerador uma correção se seu arquivo falhar, e registre isso. - Agrupe e encontre quase-duplicatas.
python3 scripts/merge.py RUN/pool SEED plain:NOME1=RUN/generation/plain/NOME1/candidates.json distant:NOME1=... ...mantém apenas o texto da pergunta e embaralha.python3 scripts/candidate_pairs.py RUN/poollista pares de perguntas similares. A versão testada incorpora as perguntas comnomic-embed-textatravés de um servidor Ollama local e mantém pares com similaridade de cosseno de pelo menos 0,83, no máximo 5 vizinhos mais próximos por pergunta. Sem Ollama, adicione--lexical(não testado: similaridade de contagem de palavras, 5 vizinhos mais próximos de cada pergunta).
- Julgue duplicatas. Preencha
prompts/dedup_judge.mda partir do perfil (python3 scripts/fill_prompt.py FIELD-PROFILE.md prompts/dedup_judge.md > RUN/pool/dedup_judge.md). Para mais de cerca de 150 pares, divida-os (python3 scripts/split_pairs.py RUN/pool 150) e dê cada lote a um juiz novo (testado: Sonnet 5.5, quatro lotes de 152 pares). Cada juiz lê apenas o prompt preenchido e seu lote e escreve suas decisões; junte-as compython3 scripts/join_decisions.py RUN/pool decisions_1.json .... Entãopython3 scripts/apply_merges.py RUN/poolmescla clusters e escreveto_rewrite.json. - Reescreva. Preencha
prompts/rewrite.mdda mesma forma e dê a ele, comRUN/pool/to_rewrite.json, para um agente novo (testado: Sonnet 5.5), que escreveRUN/pool/rewritten.jsone não lê nenhum outro arquivo. - Anonimize.
python3 scripts/anonymise.py RUN/pool SEEDverifica se todo id foi reescrito, lista perguntas com mais de 50 palavras, reembaralha e escreveRUN/pool/pool.json(ids Q01, Q02, ... e texto) eRUN/pool/sources.json(de qual gerador e modo cada um veio). Mostre críticos, previsores, construtores de piloto e verificadores de novidade apenaspool.json.
Sementes: quaisquer inteiros fixos, escolhidos e registrados antes da execução do passo.
O que o teste mostrou
No teste (campo: o comportamento observável de modelos de linguagem pequenos e abertos), 12 geradores escreveram 204 perguntas em cerca de três minutos. A mesclagem deixou 168 (18% eram quase-duplicatas; ideias como confiança declarada separando respostas corretas de incorretas surgiram em vários geradores). A parcela de perguntas cujo piloto encontrou um efeito e cuja verificação de literatura não encontrou relato anterior na mesma direção foi:
| Modo | Descobertas novas e confirmadas |
|---|---|
| Prompt simples | 14 de 50 (28%) |
| Transferência de um campo distante | 14 de 51 (27%) |
| Problematização (não incluído) | 6 de 42 (14%) |
| Mapeamento de lacunas a partir de resumos recentes (não incluído) | 3 de 36 (8%) |
Com 36 a 51 perguntas por modo, essas diferenças são descritivas (teste de
taxas iguais, p = 0,054). Os dois modos não incluídos estão documentados em
NOT-RECOMMENDED.md no topo deste pacote.
Arquivos
prompts/plain.md,prompts/distant.md: os prompts de geração.Né substituído pelo número de perguntas; os outros placeholders vêm do perfil de campo.prompts/constraints.md: restrições que todo gerador recebe.prompts/dedup_judge.md,prompts/rewrite.md: o juiz de duplicatas e o reescritor.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. Apenas biblioteca padrão.