CommunityRedacción y edicióngithub.com

generate-questions

Genera un conjunto de preguntas de investigación candidatas utilizando varios agentes generadores de IA, en dos modos (indicación simple y transferencia de hallazgos desde un campo distante), luego fusiona casi duplicados y reescribe cada pregunta en un estilo simple y bidireccional.

¿Qué es generate-questions?

Esta habilidad crea un archivo `pool.json` con una lista de preguntas de investigación candidatas, cada una con un ID anónimo, después de fusionar casi duplicados y reescribir cada pregunta en un estilo simple y bidireccional, sin nombrar una dirección para el efecto que investiga. Es útil al inicio de una búsqueda de preguntas de investigación en un campo donde cada pregunta se puede probar con un piloto corto puntuado por script, o siempre que se necesite un conjunto amplio y sin duplicados de preguntas candidatas antes de elegir entre ellas. La habilidad es compatible con Claude, Cursor, Codex y otras plataformas de agentes de IA. Funciona utilizando múltiples modelos generadores (al menos tres) en dos modos: indicación simple y transferencia desde un campo distante, luego aplica deduplicación basada en similitud coseno y reescritura mediante un agente juez y un reescritor.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/techurbanist/research-skills/tree/HEAD/skills/generate-questions

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace generate-questions?

Esta habilidad produce pool.json: una lista de preguntas de investigación candidatas, cada una con un ID anónimo, fusionadas para que los casi duplicados aparezcan una sola vez, y reescritas para que cada pregunta tenga el mismo estilo simple y no nombre una dirección para el efecto que investiga. Las siguientes habilidades (screen-pilot, critique-forecast, check-novelty) toman este archivo como entrada.

Lo que necesitas primero

  • Un perfil de campo: una copia de field-profile/TEMPLATE.md de este paquete, completada para tu campo y guardada en el proyecto (por defecto FIELD-PROFILE.md en la raíz del proyecto). El investigador debe acordar su contenido, en particular el campo, los sujetos con los que se ejecutarán los pilotos, los límites del piloto y quién querría saber las respuestas. El perfil probado es field-profile/example-small-language-models.md.
  • Una carpeta de trabajo para esta ronda, aquí llamada RUN/.
  • Sub-agentes con sus propios contextos. Donde puedas elegir el modelo, usa un modelo diferente para cada generador. También puedes ejecutar un generador a través de la herramienta o API de otro proveedor y guardar su salida en el mismo formato.

Pasos

  1. Elige los generadores. Usa al menos tres modelos generadores, cada uno en ambos modos, por lo que cada modelo ejecuta dos generadores: plain y distant. En la prueba, tres modelos de Claude (Opus 5.5, Fable 5.2, Sonnet 5.5) cada uno escribió 17 preguntas por modo.
  2. Asigna campos distantes. Elige una lista de campos distantes con hallazgos bien establecidos (probados: psicología cognitiva, psicolingüística, economía del comportamiento, ecología) y asigna uno por generador distante sin reemplazo: python3 scripts/assign_fields.py SEED "campo uno;campo dos;..." NOMBRE1 NOMBRE2 NOMBRE3. Registra la semilla y la salida.
  3. Escribe las instrucciones. python3 scripts/make_briefs.py FIELD-PROFILE.md RUN N NOMBRE1:plain NOMBRE1:distant:"CAMPO" ... escribe una instrucción por generador en RUN/briefs/ (un encabezado corto, el mensaje del modo desde prompts/plain.md o prompts/distant.md, luego prompts/constraints.md, todo completado desde el perfil) y crea las carpetas de salida.
  4. Ejecuta los generadores. Inicia un sub-agente nuevo por instrucción, con el modelo para el que está la instrucción, y dile que lea solo su instrucción y la siga. No le muestres preguntas de ejemplo ni la salida de otro generador. Este escribe candidates.json (y, en modo distante, transfers.md, su lista de trabajo, que se conserva para el registro y no se pasa más adelante).
  5. Verifica el formato. python3 scripts/check_candidates.py N RUN/generation/*/*/candidates.json. Pídele al generador una corrección una vez si su archivo falla, y registra eso.
  6. Agrupa y encuentra casi duplicados.
    • python3 scripts/merge.py RUN/pool SEED plain:NOMBRE1=RUN/generation/plain/NOMBRE1/candidates.json distant:NOMBRE1=... ... conserva solo el texto de la pregunta y mezcla.
    • python3 scripts/candidate_pairs.py RUN/pool lista pares de preguntas similares. La versión probada incrusta las preguntas con nomic-embed-text a través de un servidor Ollama local y conserva pares con similitud coseno de al menos 0.83, como máximo 5 vecinos más cercanos por pregunta. Sin Ollama, añade --lexical (no probado: similitud de recuento de palabras, 5 vecinos más cercanos de cada pregunta).
  7. Juzga duplicados. Completa prompts/dedup_judge.md desde el perfil (python3 scripts/fill_prompt.py FIELD-PROFILE.md prompts/dedup_judge.md > RUN/pool/dedup_judge.md). Para más de aproximadamente 150 pares, divídelos (python3 scripts/split_pairs.py RUN/pool 150) y entrega cada lote a un juez nuevo (probado: Sonnet 5.5, cuatro lotes de 152 pares). Cada juez lee solo la instrucción completada y su lote y escribe sus decisiones; únelos con python3 scripts/join_decisions.py RUN/pool decisions_1.json .... Luego python3 scripts/apply_merges.py RUN/pool fusiona clústeres y escribe to_rewrite.json.
  8. Reescribe. Completa prompts/rewrite.md de la misma manera y entrégaselo, con RUN/pool/to_rewrite.json, a un solo agente nuevo (probado: Sonnet 5.5), que escribe RUN/pool/rewritten.json y no lee ningún otro archivo.
  9. Anonimiza. python3 scripts/anonymise.py RUN/pool SEED verifica que cada ID fue reescrito, lista preguntas de más de 50 palabras, reordena, y escribe RUN/pool/pool.json (IDs Q01, Q02, ... y texto) y RUN/pool/sources.json (de qué generador y modo proviene cada uno). Muestra solo pool.json a críticos, pronosticadores, constructores de pilotos y verificadores de novedad.

Semillas: cualquier entero fijo, elegido y registrado antes de ejecutar el paso.

Lo que mostró la prueba

En la prueba (campo: el comportamiento observable de modelos de lenguaje pequeños abiertos), 12 generadores escribieron 204 preguntas en aproximadamente tres minutos. La fusión dejó 168 (el 18% eran casi duplicados; ideas como confianza declarada que separa respuestas correctas de incorrectas surgieron en varios generadores). La proporción de preguntas cuyo piloto encontró un efecto y cuya revisión de literatura no encontró informe previo en la misma dirección fue:

ModoHallazgos nuevos y confirmados
Indicación simple14 de 50 (28%)
Transferencia desde un campo distante14 de 51 (27%)
Problematización (no incluida)6 de 42 (14%)
Mapeo de brechas desde resúmenes recientes (no incluido)3 de 36 (8%)

Con 36 a 51 preguntas por modo, estas diferencias son descriptivas (prueba de tasas iguales, p = 0.054). Los dos modos no incluidos están documentados en NOT-RECOMMENDED.md en la parte superior de este paquete.

Archivos

  • prompts/plain.md, prompts/distant.md: los mensajes de generación. N se reemplaza por el número de preguntas; los otros marcadores de posición provienen del perfil de campo.
  • prompts/constraints.md: restricciones que recibe cada generador.
  • prompts/dedup_judge.md, prompts/rewrite.md: el juez de duplicados y el 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. Solo biblioteca estándar.

Skills relacionados