CurateGPT est un prototype d'application Web et un framework permettant d'effectuer des opérations générales de conservation guidées par l'IA et liées à la conservation sur des collections d'objets.
Voir également l'application sur curategpt.io (remarque : elle est parfois en panne et peut n'avoir qu'un sous-ensemble des fonctionnalités de l'application locale)
CurateGPT est disponible sur Pypi et peut être installé avec pip
:
pip install curategpt
Vous devrez d’abord installer Poetry.
Clonez ensuite ce dépôt.
git clone https://github.com/monarch-initiative/curategpt.git
cd curategpt
et installez les dépendances :
poetry install
Afin d'obtenir les meilleures performances de CurateGPT, nous vous recommandons d'obtenir une clé API OpenAI et de la définir :
export OPENAI_API_KEY=
(pour les membres de Monarch : demandez sur Slack si vous souhaitez utiliser la clé de groupe)
CurateGPT fonctionnera également avec d'autres grands modèles de langage - voir « Sélection de modèles » ci-dessous.
Vous commencez initialement avec une base de données vide. Vous pouvez charger ce que vous voulez dans cette base de données ! Tout JSON, YAML ou CSV est accepté. CurateGPT est livré avec des wrappers pour certaines sources locales et distantes existantes, y compris les ontologies. Le Makefile contient quelques exemples sur la façon de les charger. Vous pouvez charger n'importe quelle ontologie en utilisant la cible ont-
, par exemple :
make ont-cl
Cela charge CL (via OAK) dans une collection appelée ont_cl
Notez que par défaut, cela se charge dans un ensemble de collections stocké dans stagedb
, alors que l'application fonctionne hors db
. Vous pouvez copier l'ensemble de collections dans la base de données avec :
cp -r stagedb/* db/
Vous pouvez ensuite exécuter l'application rationalisée avec :
make app
CurateGPT dépend des index de bases de données vectorielles des bases de données/ontologies que vous souhaitez organiser.
L'application phare est la curation d'ontologies, donc pour construire un index pour une ontologie OBO comme CL :
make ont-cl
Cela nécessite une clé OpenAI.
(Vous pouvez créer des index à l'aide d'un modèle d'intégration ouvert, modifier la commande pour laisser de côté l'option -m
, mais cela n'est pas recommandé car actuellement les intégrations oai semblent fonctionner mieux).
Pour charger les ontologies par défaut :
make all
(cela peut prendre un certain temps)
Pour charger différentes bases de données :
make load-db-hpoa
make load-db-reactome
Vous pouvez charger un fichier json, yaml ou csv arbitraire :
curategpt view index -c my_foo foo.json
(vous devrez le faire dans le shell de poésie)
Pour charger un dépôt GitHub de problèmes :
curategpt -v view index -c gh_uberon -m openai: --view github --init-with "{repo: obophenotype/uberon}"
Les éléments suivants sont également pris en charge :
Actuellement, cet outil fonctionne mieux avec le modèle OpenAI gpt-4 (pour les tâches d'instruction) et OpenAI ada-text-embedding-002
pour l'intégration.
CurateGPT est superposé à simonw/llm qui possède une architecture de plugin pour utiliser des modèles alternatifs. En théorie, vous pouvez utiliser n'importe lequel de ces plugins.
De plus, vous pouvez configurer un proxy d'émulation openai à l'aide de litellm.
Le proxy litellm
peut être installé avec pip
en tant que pip install litellm[proxy]
.
Disons que vous souhaitez exécuter Mixtral localement en utilisant ollama. Vous démarrez ollama (vous devrez peut-être d'abord exécuter ollama serve
) :
ollama run mixtral
Ensuite démarrez litellm :
litellm -m ollama/mixtral
Modifiez ensuite votre extra-openai-models.yaml
comme détaillé dans la documentation LLM :
- model_name: ollama/mixtral
model_id: litellm-mixtral
api_base: "http://0.0.0.0:8000"
Vous pouvez maintenant utiliser ceci :
curategpt ask -m litellm-mixtral -c ont_cl "What neurotransmitter is released by the hippocampus?"
Mais sachez que de nombreuses invites dans curategpt ont été conçues pour des modèles openai et qu'elles peuvent donner des résultats sous-optimaux ou échouer complètement sur d'autres modèles. À titre d'exemple, ask
semble fonctionner assez bien avec Mixtral, mais complete
fonctionne horriblement. Nous n'avons pas encore étudié si le problème vient du modèle, de nos invites ou de l'approche globale.
Bienvenue dans le monde de l'ingénierie IA !
curategpt --help
Vous verrez diverses commandes pour travailler avec des index, rechercher, extraire, générer, etc.
Ces fonctions sont généralement disponibles via l'interface utilisateur, et la priorité actuelle est de les documenter.
curategpt ask -c ont_cl "What neurotransmitter is released by the hippocampus?"
peut donner quelque chose comme :
The hippocampus releases gamma-aminobutyric acid (GABA) as a neurotransmitter [1](#ref-1).
...
## 1
id: GammaAminobutyricAcidSecretion_neurotransmission
label: gamma-aminobutyric acid secretion, neurotransmission
definition: The regulated release of gamma-aminobutyric acid by a cell, in which the
gamma-aminobutyric acid acts as a neurotransmitter.
...
curategpt view ask -V pubmed "what neurons express VIP?"
curategpt ask -c gh_obi "what are some new term requests for electrophysiology terms?"
curategpt complete -c ont_cl "mesenchymal stem cell of the apical papilla"
rendements
id : MesenchymalStemCellOfTheApicalPapilla
definition : A mesenchymal cell that is part of the apical papilla of a tooth and has
the ability to self-renew and differentiate into various cell types such as odontoblasts,
fibroblasts, and osteoblasts.
relationships :
- predicate : PartOf
target : ApicalPapilla
- predicate : subClassOf
target : MesenchymalCell
- predicate : subClassOf
target : StemCell
original_id : CL:0007045
label : mesenchymal stem cell of the apical papilla
Vous pouvez comparer tous les objets d'une seule collection
curategpt all-by-all --threshold 0.80 -c ont_hp -X ont_mp --ids-only -t csv > ~/tmp/allxall.mp.hp.csv
Cela prend 1 à 2 secondes, car cela implique une comparaison sur des vecteurs pré-calculés. Il rapporte les meilleurs hits au-dessus d'un seuil.
Les résultats peuvent varier. Vous souhaiterez peut-être essayer différents textes pour les intégrations (la valeur par défaut est l'objet json entier ; pour les ontologies, il s'agit d'une concaténation d'étiquettes, de définitions et d'alias).
échantillon:
HP:5200068,Socially innappropriate questioning,MP:0001361,social withdrawal,0.844015132437909
HP:5200069,Spinning,MP:0001411,spinning,0.9077306606290237
HP:5200071,Delayed Echolalia,MP:0013140,excessive vocalization,0.8153252835818089
HP:5200072,Immediate Echolalia,MP:0001410,head bobbing,0.8348177036912526
HP:5200073,Excessive cleaning,MP:0001412,excessive scratching,0.8699103725005582
HP:5200104,Abnormal play,MP:0020437,abnormal social play behavior,0.8984862078522344
HP:5200105,Reduced imaginative play skills,MP:0001402,decreased locomotor activity,0.85571629684631
HP:5200108,Nonfunctional or atypical use of objects in play,MP:0003908,decreased stereotypic behavior,0.8586700411012859
HP:5200129,Abnormal rituals,MP:0010698,abnormal impulsive behavior control,0.8727804272023427
HP:5200134,Jumping,MP:0001401,jumpy,0.9011393233129765
Notez que CurateGPT dispose d'un composant distinct pour utiliser un LLM pour évaluer les correspondances de candidats (voir également https://arxiv.org/abs/2310.03666) ; ceci n'est pas activé par défaut, cela coûterait cher à exécuter pour toute une ontologie.