protein-sequence-similarity-search

Par mkurman · zorai

Recherche des séquences protéiques homologues à l'aide de MMseqs2 (rapide, par défaut) ou BLAST (exhaustif, fallback). Déclencher cet outil chaque fois que l'utilisateur fournit une séquence protéique ou un fichier FASTA et demande à trouver des homologues, des correspondances de séquences, ou souhaite inférer la fonction d'une protéine sur la base de la similarité de séquence, mais pas lorsque l'utilisateur souhaite inférer la fonction d'une protéine sur la base de la similarité structurale.

npx skills add https://github.com/mkurman/zorai --skill protein-sequence-similarity-search

Prérequis

  1. uv : Lisez la skill uv et suivez ses instructions de configuration pour vous assurer que uv est installé et accessible via PATH.

  2. Notification utilisateur : Si LICENSE_NOTIFICATION.txt n'existe pas déjà dans le répertoire de cette skill, alors (1) notifiez clairement l'utilisateur de vérifier les conditions aux adresses https://www.ebi.ac.uk/jdispatcher/sss/ncbiblast et https://colabfold.com, puis (2) créez le fichier en enregistrant le texte de notification et l'horodatage.

  3. Fichier .env : Assurez-vous que le fichier .env existe dans votre répertoire personnel. Créez-en un s'il n'existe pas.

  4. USER_EMAIL (optionnel mais recommandé) : Recommandé par l'EBI pour le suivi des tâches BLAST, mais la skill fonctionne sans lui. Si la variable manque dans .env, n'INTERROGEZ PAS l'utilisateur pour la coller dans le chat (cela ferait fuir la valeur dans le contexte de l'agent). À la place, donnez à l'utilisateur cette commande — en remplaçant ENV_FILE par le chemin littéral absolu du fichier .env :

    printf "Enter contact email: " && read email && echo "USER_EMAIL=$email" >> "ENV_FILE" && echo "Saved."

    Les scripts chargent les credentials automatiquement via dotenv. NE JAMAIS lire, afficher ou inspecter le fichier .env ou ses variables (c.-à-d. pas de cat, grep, echo, printenv, ou os.environ.get sur les clés). Les credentials doivent rester en dehors du contexte de l'agent.

Objectif

Prendre une séquence d'acides aminés fournie par l'utilisateur (ou un chemin vers un fichier .fasta), rechercher des homologues de séquence en utilisant la méthode la plus rapide disponible, générer un tableau formaté en Markdown des meilleurs résultats, interpréter les métriques clés d'alignement, résumer les fonctions protéiques déduites, et enregistrer les résultats localement pour une analyse programmatique ultérieure.

Règles essentielles

  • Validation stricte : Pour BLAST, utilisez uniquement les codes de base de données listés dans le tableau ci-dessous.
  • Pas d'hallucinations : Si un script génère une erreur ou ne retourne aucun résultat, informez clairement l'utilisateur. N'INVENTEZ PAS d'homologues de séquence.
  • Ne pas analyser les fichiers de sortie : Ne pas analyser le JSON, a3m, ou tout autre fichier de sortie brut. Fiez-vous au fichier .md généré pour votre résumé. JSON et les autres sorties sont destinés à une utilisation d'outil ultérieure uniquement.
  • Déclarer toujours la méthode : Chaque rapport doit clairement indiquer si la recherche a utilisé la méthode rapide MMseqs2 (API ColabFold) ou la méthode plus lente EBI BLAST.
  • Notification : Si cette skill est utilisée, assurez-vous que cela soit mentionné dans la sortie. Déclarez explicitement que le programme correspondant (MMSEQS2 ou EBI BLAST) et les bases de données de séquence ont été utilisés.

Sélection de la méthode de recherche

Choisissez la méthode de recherche en fonction de la demande de l'utilisateur :

Si l'utilisateur dit « quick search » ou « fast search », aucune méthode spécifique demandée / recherche générale d'homologues, ou si vous êtes incertain : Exécutez MMseqs2 (rapide, par défaut) en utilisant mmseqs2_search.py

Si MMseqs2 échoue (code de sortie 2 : RATELIMIT ou erreur API) ou l'utilisateur demande explicitement « BLAST » ou une base de données BLAST spécifique (par ex. uniprotkb_swissprot, pdb, uniprotkb_human) : Exécutez BLAST en utilisant uniprot_blast.py

Instructions

  1. Identifiez la requête de l'utilisateur. Il peut s'agir d'une chaîne de séquence brute (par ex., « MKVLY... ») ou d'un chemin vers un fichier local (par ex., « ./data/sequence.fasta »).

  2. Déterminez la méthode de recherche en utilisant la liste ci-dessus.

Chemin A : Recherche MMseqs2 (Par défaut)

  1. Générer les noms de fichier : Générez des noms de fichiers de sortie descriptifs en fonction de l'entrée (par ex., proteinA_mmseqs2.json et proteinA_mmseqs2.md).

  2. Exécutez le script MMseqs2 :

    • Par défaut :
    uv run scripts/mmseqs2_search.py <SEQUENCE_OR_FILE> -o <generated-filename.md> -j <generated-filename.json>
    • Avec mgnify :
    uv run scripts/mmseqs2_search.py <SEQUENCE_OR_FILE> -o <generated-filename.md> -j <generated-filename.json> --include-mgnify
  3. Le script interrogera l'API MMseqs2 ColabFold et sondéra pour l'achèvement. C'est généralement rapide (moins de 2 minutes).

  4. Si le script se termine avec le code 2 (erreur API, limite de débit), basculez automatiquement vers BLAST (Chemin B ci-dessous). Informez l'utilisateur : « La recherche MMseqs2 a échoué, basculement vers BLAST ».

  5. Lire les résultats : Ouvrez et lisez le fichier .md généré.

Chemin B : Recherche BLAST (Explicite ou Fallback)

  1. Sélection et validation de la base de données : Déterminez la base de données la plus appropriée en fonction de la demande de l'utilisateur.

    • Consultez le tableau Bases de données BLAST disponibles ci-dessous.
    • Si l'utilisateur spécifie un groupe taxonomique (par ex., « Trouver des homologues chez les microbes »), sélectionnez le Database Code correspondant (par ex., uniprotkb_bacteria).
    • Si l'utilisateur demande explicitement des résultats annotés, utilisez uniprotkb_swissprot.
    • Si aucune base de données spécifique n'est demandée, ne spécifiez pas --databases.
    • Validation : Assurez-vous que le code de base de données correspond exactement à une entrée du tableau. Si l'utilisateur demande une base de données absente de la liste, ne procédez pas et fournissez la liste autorisée.
  2. Générer les noms de fichier : (par ex., proteinA_ebi_blast.json et proteinA_ebi_blast.md).

  3. Cette API nécessite que l'adresse e-mail de l'utilisateur soit définie dans la variable d'environnement USER_EMAIL pour inclusion dans l'en-tête de la requête.

  4. Exécutez le script BLAST :

    • Par défaut (uniprotkb) :
    uv run scripts/uniprot_blast.py <SEQUENCE_OR_FILE> -o <generated-filename.md> -j <generated-filename.json>
    • Base de données personnalisée :
    uv run scripts/uniprot_blast.py <SEQUENCE_OR_FILE> -o <generated-filename.md> -j <generated-filename.json> --databases <db1,db2>
  5. Le script interrogera l'API EBI BLAST et sondéra le serveur. Remarque : Cela peut prendre jusqu'à 15 minutes ; attendez patiemment.

  6. Lire les résultats : Ouvrez et lisez le fichier .md généré.

Étapes communes (Les deux méthodes)

  1. Interpréter les métriques : Résumez les 3 à 5 meilleurs homologues de séquence. Évaluez la qualité de la correspondance en utilisant :
    • Q-Cov (Query Coverage) : Les pourcentages élevés signifient que la correspondance couvre la majeure partie de la séquence de requête.
    • E-value : Les valeurs E plus basses (par ex., 1e-50) indiquent une signification statistique extrême.
    • Seq Identity : Fournit un contexte évolutif (hautement conservé vs. homologue distant).
  2. Effectuer une analyse fonctionnelle :
    • Si le tableau de résultats inclut des descriptions de protéines, analysez-les directement : signalez les noms/fonctions spécifiques des protéines des meilleurs homologues et résumez la variété des fonctions, domaines ou familles de protéines trouvées.
    • Si les résultats contiennent uniquement des identifiants d'accès UniProt sans descriptions (courant avec MMseqs2), recherchez les noms et fonctions des protéines pour les 3–5 meilleurs résultats en utilisant la skill uniprot-database ou d'autres méthodes appropriées avant de résumer.
  3. Informez l'utilisateur des fichiers nouvellement créés (.json et .md) et de leurs emplacements.

Bases de données BLAST disponibles

  • uniprotkb – UniProt Knowledgebase (La base de connaissances UniProt comprend UniProtKB/Swiss-Prot et UniProtKB/TrEMBL) : La base de connaissances UniProt (UniProtKB) est le point d'accès central pour les informations protéiques étendues et annotées, y compris la fonction, la classification et les références croisées. Recherchez UniProtKB pour récupérer « tout ce qui est connu » sur une séquence particulière
  • uniprotkb_swissprot – UniProtKB/Swiss-Prot (La section annotée manuellement d'UniProtKB) : La sous-section manuellement annotée de la base de connaissances UniProt
  • uniprotkb_swissprotsv – Isoformes UniProtKB/Swiss-Prot (Les isoformes annotées manuellement d'UniProtKB/Swiss-Prot) : Les séquences d'isoformes pour la sous-section manuellement annotée de la base de connaissances UniProt
  • uniprotkb_reference_proteomes – Protéomes de référence UniProtKB : Sous-ensemble taxonomique des protéomes de référence UniProtKB
  • uniprotkb_trembl – UniProtKB/TrEMBL (La section annotée automatiquement d'UniProtKB) : Sous-section de la base de connaissances UniProt dérivée des traductions de séquences de codage de la banque de données de séquences ENA (anciennement EMBL-Bank) avec annotation produite par un processus automatisé
  • uniprotkb_refprotswissprot – Protéomes de référence UniProtKB plus Swiss-Prot : Protéomes de référence UniProtKB plus Swiss-Prot
  • uniprotkb_archaea – UniProtKB Archaea : Sous-ensemble taxonomique de la base de connaissances UniProt pour archaea
  • uniprotkb_arthropoda – UniProtKB Arthropoda : Sous-ensemble taxonomique de la base de connaissances UniProt pour arthropoda
  • uniprotkb_bacteria – UniProtKB Bacteria : Sous-ensemble taxonomique de la base de connaissances UniProt pour bactéries
  • uniprotkb_complete_microbial_proteomes – Protéomes microbiens complets UniProtKB : Sous-ensemble taxonomique de la base de connaissances UniProt pour protéomes microbiens complets
  • uniprotkb_eukaryota – UniProtKB Eukaryota : Sous-ensemble taxonomique de la base de connaissances UniProt pour eukaryota
  • uniprotkb_fungi – UniProtKB Fungi : Sous-ensemble taxonomique de la base de connaissances UniProt pour fungi
  • uniprotkb_human – UniProtKB Human : Sous-ensemble taxonomique de la base de connaissances UniProt pour humain
  • uniprotkb_mammals – UniProtKB Mammals : Sous-ensemble taxonomique de la base de connaissances UniProt pour mammifères
  • uniprotkb_nematoda – UniProtKB Nematoda : Sous-ensemble taxonomique de la base de connaissances UniProt pour nematoda
  • uniprotkb_rodents – UniProtKB Rodents : Sous-ensemble taxonomique de la base de connaissances UniProt pour rongeurs
  • uniprotkb_vertebrates – UniProtKB Vertebrates : Sous-ensemble taxonomique de la base de connaissances UniProt pour vertébrés
  • uniprotkb_viridiplantae – UniProtKB Viridiplantae : Sous-ensemble taxonomique de la base de connaissances UniProt pour viridiplantae
  • uniprotkb_viruses – UniProtKB Viruses : Sous-ensemble taxonomique de la base de connaissances UniProt pour virus
  • uniprotkb_enzyme – UniProtKB Enzyme : Sous-ensemble taxonomique de la base de connaissances UniProt pour enzymes
  • uniprotkb_covid19 – UniProtKB COVID-19 : Sous-ensemble taxonomique de la base de connaissances UniProt pour COVID-19
  • uniref100 – Grappes UniProt 100% (UniRef100) : Les grappes de référence UniProt (UniRef) contenant des séquences qui sont identiques à 100 %.
  • uniref90 – Grappes UniProt 90% (UniRef90) : Les grappes de référence UniProt (UniRef) contenant des séquences qui sont identiques à 90 %.
  • uniref50 – Grappes UniProt 50% (UniRef50) : Les grappes de référence UniProt (UniRef) contenant des séquences qui sont identiques à 50 %.
  • pdb – Séquences de structures protéiques (séquences de structure protéique PDBe) : Séquences protéiques de structures décrites dans la Protein Data Bank de Brookhaven (PDB)

Skills similaires