Communitygithub.com

BioTender-max/awesome-bio-agent-skills

Una colección curada de habilidades de agentes de IA para investigación biomédica, que abarca genómica, proteómica, análisis de células individuales, IA clínica y diseño de proteínas.

¿Qué es awesome-bio-agent-skills?

Esta habilidad, 'ESM2 Protein Language Model', permite a los agentes de IA (como Claude Code o Codex) ejecutar modelos de lenguaje de proteínas ESM2 para tareas de bioinformática y diseño de proteínas. Su principal utilidad radica en calcular puntuaciones de plausibilidad de secuencias y generar embeddings de proteínas, esenciales para filtrar diseños, analizar diversidad o predecir efectos de variantes. Es compatible con ejecución vía Modal (comando CLI) o mediante API directa en Python con PyTorch. La habilidad detalla los prerrequisitos de hardware (GPU con mínimo 8 GB de VRAM, recomendado 24 GB), los modelos disponibles (desde 8M hasta 3B parámetros), formatos de salida (archivos .npy, CSV y JSON), y proporciona una guía de interpretación de resultados como el PLL normalizado. Incluye además un árbol de decisión para elegir el modelo según la tarea, una tabla de rendimiento típico en diferentes tamaños de campaña y soluciones a errores comunes, facilitando su integración en flujos de trabajo de biología computacional.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add BioTender-max/awesome-bio-agent-skills

Preguntar en tu IA favorita

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

Documentación

Modelo de Lenguaje de Proteínas ESM2

Prerrequisitos

RequisitoMínimoRecomendado
Python3.8+3.10
PyTorch1.10+2.0+
CUDA11.0+11.7+
VRAM de GPU8GB24GB (A10G)
RAM16GB32GB

Cómo ejecutar

¿Es tu primera vez? Consulta la Guía de instalación para configurar Modal y biomodals.

Opción 1: Modal

cd biomodals
modal run modal_esm2_predict_masked.py \
  --input-faa sequences.fasta \
  --out-dir embeddings/

GPU: A10G (24GB) | Tiempo de espera: 300s predeterminado

Opción 2: API de Python (recomendada)

import torch
import esm

# Cargar modelo
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model = model.eval().cuda()

# Procesar secuencias
data = [("seq1", "MKTAYIAKQRQISFVK...")]
batch_labels, batch_strs, batch_tokens = batch_converter(data)

with torch.no_grad():
    results = model(batch_tokens.cuda(), repr_layers=[33])

# Obtener embeddings
embeddings = results["representations"][33]

Parámetros clave

Modelos ESM2

ModeloParámetrosVelocidadCalidad
esm2_t6_8M8MMás rápidoCribado rápido
esm2_t12_35M35MRápidoBuena
esm2_t33_650M650MMediaMejor
esm2_t36_3B3BLentaÓptima

Formato de salida

embeddings/
├── embeddings.npy       # Array (N, 1280)
├── pll_scores.csv       # PLL para cada secuencia
└── metadata.json        # Información de la secuencia

Ejemplo de salida

Ejecución exitosa

$ modal run modal_esm2_predict_masked.py --input-faa designs.fasta
[INFO] Cargando modelo ESM2-650M...
[INFO] Procesando 100 secuencias...
[INFO] Calculando pseudo-log-verosimilitud...

embeddings/pll_scores.csv:
sequence_id,pll,pll_normalized,length
design_0,-0.82,0.15,78
design_1,-0.95,0.08,85
design_2,-1.23,-0.12,72
...

Resumen:
  PLL media: -0.91
  Secuencias con PLL > 0: 42/100 (42%)

¿Qué es una buena salida?

  • PLL_normalized: > 0.0 (más similar a la naturaleza)
  • Forma de embeddings: (N, 1280) para el modelo de 650M
  • PLL más alto = secuencia más natural

Árbol de decisión

¿Debería usar ESM2?
│
├─ ¿Qué necesitas?
│  ├─ Puntuación de plausibilidad de secuencia → PLL de ESM2 ✓
│  ├─ Embeddings para agrupamiento → ESM2 ✓
│  ├─ Predicción de efectos de variantes → ESM2 ✓
│  └─ Predicción de estructura → Usa ESMFold
│
├─ ¿Qué tamaño de modelo?
│  ├─ Cribado rápido → esm2_t12_35M
│  ├─ Uso estándar → esm2_t33_650M ✓
│  └─ Mejor calidad → esm2_t36_3B
│
└─ ¿Caso de uso?
   ├─ Filtrado de control de calidad → umbral PLL > 0.0
   ├─ Análisis de diversidad → Embeddings promediados por media
   └─ Escaneo de mutaciones → Log-odds por posición

Interpretación del PLL

PLL normalizadoInterpretación
> 0.2Secuencia muy natural
0.0 - 0.2Buena, similar a la natural
-0.5 - 0.0Aceptable
< -0.5Puede ser no natural

Rendimiento típico

Tamaño de campañaTiempo (A10G)Costo (Modal)Notas
100 secuencias5-10 min~$1Cribado rápido
1000 secuencias30-60 min~$5Estándar
5000 secuencias2-3h~$20Lote grande

Rendimiento: ~100-200 secuencias/minuto con el modelo de 650M.


Verificar

wc -l embeddings/pll_scores.csv  # Debe coincidir con entrada + 1 (cabecera)

Solución de problemas

Errores OOM: Usa un modelo más pequeño o procesa las secuencias por lotes Procesamiento lento: Usa esm2_t12_35M para mayor velocidad Puntuaciones PLL bajas: Pueden indicar secuencias inusuales/diseñadas

Interpretación de errores

ErrorCausaSolución
RuntimeError: CUDA out of memorySecuencia demasiado larga o lote grandeReduce el tamaño del lote
KeyError: representationCapa solicitada incorrectaUsa la capa 33 para el modelo de 650M
ValueError: sequenceAminoácido no válidoVerifica que no haya aminoácidos no estándar

Siguiente: Predicción de estructura con chai o boltz → protein-qc para filtrado.

Skills relacionados