CurateGPT es un prototipo de aplicación web y un marco para realizar operaciones de curación y operaciones relacionadas con la curación guiadas por IA de propósito general sobre colecciones de objetos.
Consulte también la aplicación en curategpt.io (nota: a veces está inactiva y es posible que solo tenga un subconjunto de la funcionalidad de la aplicación local)
CurateGPT está disponible en Pypi y puede instalarse con pip
:
pip install curategpt
Primero necesitarás instalar Poetry.
Luego clona este repositorio.
git clone https://github.com/monarch-initiative/curategpt.git
cd curategpt
e instalar las dependencias:
poetry install
Para obtener el mejor rendimiento de CurateGPT, recomendamos obtener una clave API de OpenAI y configurarla:
export OPENAI_API_KEY=
(para miembros de Monarch: pregunta en Slack si quieres usar la clave de grupo)
CurateGPT también funcionará con otros modelos de lenguaje grandes; consulte "Seleccionar modelos" a continuación.
Inicialmente comienza con una base de datos vacía. ¡Puedes cargar lo que quieras en esta base de datos! Se acepta cualquier JSON, YAML o CSV. CurateGPT viene con contenedores para algunas fuentes locales y remotas existentes, incluidas las ontologías. El Makefile contiene algunos ejemplos de cómo cargarlos. Puede cargar cualquier ontología utilizando el objetivo ont-
, por ejemplo:
make ont-cl
Esto carga CL (a través de OAK) en una colección llamada ont_cl
Tenga en cuenta que, de forma predeterminada, esto se carga en un conjunto de colección almacenado en stagedb
, mientras que la aplicación funciona fuera de db
. Puede copiar la colección establecida en la base de datos con:
cp -r stagedb/* db/
Luego puede ejecutar la aplicación Streamlit con:
make app
CurateGPT depende de los índices de bases de datos vectoriales de las bases de datos/ontologías que desea curar.
La aplicación principal es la curación de ontologías, por lo que para crear un índice para una ontología OBO como CL:
make ont-cl
Esto requiere una clave OpenAI.
(Puede crear índices utilizando un modelo de incrustación abierto, modificar el comando para dejar fuera la opción -m
, pero esto no se recomienda ya que actualmente las incrustaciones oai parecen funcionar mejor).
Para cargar las ontologías predeterminadas:
make all
(esto puede llevar algún tiempo)
Para cargar diferentes bases de datos:
make load-db-hpoa
make load-db-reactome
Puede cargar un archivo json, yaml o csv arbitrario:
curategpt view index -c my_foo foo.json
(Tendrás que hacer esto en el shell de poesía)
Para cargar un repositorio de problemas de GitHub:
curategpt -v view index -c gh_uberon -m openai: --view github --init-with "{repo: obophenotype/uberon}"
También se admiten los siguientes:
Actualmente, esta herramienta funciona mejor con el modelo OpenAI gpt-4 (para tareas de instrucción) y OpenAI ada-text-embedding-002
para incrustación.
CurateGPT está superpuesto a simonw/llm, que tiene una arquitectura de complemento para usar modelos alternativos. En teoría, puedes utilizar cualquiera de estos complementos.
Además, puede configurar un proxy que emule openai usando litellm.
El proxy litellm
se puede instalar con pip
como pip install litellm[proxy]
.
Digamos que desea ejecutar mixtral localmente usando ollama. Inicias ollama (es posible que tengas que ejecutar ollama serve
primero):
ollama run mixtral
Luego inicia litellm:
litellm -m ollama/mixtral
Luego edite su extra-openai-models.yaml
como se detalla en los documentos de llm:
- model_name: ollama/mixtral
model_id: litellm-mixtral
api_base: "http://0.0.0.0:8000"
Ahora puedes usar esto:
curategpt ask -m litellm-mixtral -c ont_cl "What neurotransmitter is released by the hippocampus?"
Pero tenga en cuenta que muchas de las indicaciones en curategpt se diseñaron en función de modelos openai y pueden dar resultados subóptimos o fallar por completo en otros modelos. Como ejemplo, ask
parece funcionar bastante bien con Mixtral, pero complete
funciona horriblemente. Aún no hemos investigado si el problema es el modelo, nuestras indicaciones o el enfoque general.
¡Bienvenido al mundo de la ingeniería de IA!
curategpt --help
Verá varios comandos para trabajar con índices, buscar, extraer, generar, etc.
Estas funciones generalmente están disponibles a través de la interfaz de usuario y la prioridad actual es documentarlas.
curategpt ask -c ont_cl "What neurotransmitter is released by the hippocampus?"
puede producir algo como:
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"
rendimientos
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
Puedes comparar todos los objetos en una colección.
curategpt all-by-all --threshold 0.80 -c ont_hp -X ont_mp --ids-only -t csv > ~/tmp/allxall.mp.hp.csv
Esto lleva entre 1 y 2 segundos, ya que implica una comparación de vectores precalculados. Informa de los mejores resultados por encima de un umbral.
Los resultados pueden variar. Es posible que desee probar diferentes textos para las incrustaciones (el valor predeterminado es el objeto json completo; para las ontologías es la concatenación de etiquetas, definiciones y alias).
muestra:
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
Tenga en cuenta que CurateGPT tiene un componente separado para usar un LLM para evaluar coincidencias de candidatos (consulte también https://arxiv.org/abs/2310.03666); esto no está habilitado de forma predeterminada, sería costoso ejecutarlo para una ontología completa.