CurateGPT é um protótipo de aplicativo da web e estrutura para realizar curadoria guiada por IA de uso geral e operações relacionadas à curadoria em coleções de objetos.
Veja também o aplicativo em curategpt.io (observação: às vezes está indisponível e pode ter apenas um subconjunto da funcionalidade do aplicativo local)
CurateGPT está disponível no Pypi e pode ser instalado com pip
:
pip install curategpt
Primeiro você precisará instalar o Poetry.
Em seguida, clone este repositório.
git clone https://github.com/monarch-initiative/curategpt.git
cd curategpt
e instale as dependências:
poetry install
Para obter o melhor desempenho do CurateGPT, recomendamos obter uma chave de API OpenAI e configurá-la:
export OPENAI_API_KEY=
(para membros do Monarch: pergunte no Slack se gostaria de usar a chave do grupo)
CurateGPT também funcionará com outros modelos de linguagem grandes - consulte "Selecionando modelos" abaixo.
Você inicialmente começa com um banco de dados vazio. Você pode carregar o que quiser neste banco de dados! Qualquer JSON, YAML ou CSV é aceito. CurateGPT vem com wrappers para algumas fontes locais e remotas existentes, incluindo ontologias. O Makefile contém alguns exemplos de como carregá-los. Você pode carregar qualquer ontologia usando o destino ont-
, por exemplo:
make ont-cl
Isso carrega CL (via OAK) em uma coleção chamada ont_cl
Observe que, por padrão, isso é carregado em um conjunto de coleta armazenado em stagedb
, enquanto o aplicativo funciona fora de db
. Você pode copiar o conjunto de coleções para o banco de dados com:
cp -r stagedb/* db/
Você pode então executar o aplicativo streamlit com:
make app
CurateGPT depende dos índices de banco de dados vetoriais dos bancos de dados/ontologias que você deseja curar.
A principal aplicação é a curadoria de ontologias, portanto, para construir um índice para uma ontologia OBO como CL:
make ont-cl
Isso requer uma chave OpenAI.
(Você pode construir índices usando um modelo de incorporação aberto, modificar o comando para deixar de fora a opção -m
, mas isso não é recomendado, pois atualmente os embeddings oai parecem funcionar melhor).
Para carregar as ontologias padrão:
make all
(isso pode levar algum tempo)
Para carregar bancos de dados diferentes:
make load-db-hpoa
make load-db-reactome
Você pode carregar um arquivo json, yaml ou csv arbitrário:
curategpt view index -c my_foo foo.json
(você precisará fazer isso no shell de poesia)
Para carregar um repositório GitHub de problemas:
curategpt -v view index -c gh_uberon -m openai: --view github --init-with "{repo: obophenotype/uberon}"
Os seguintes também são suportados:
Atualmente esta ferramenta funciona melhor com o modelo OpenAI gpt-4 (para tarefas de instrução) e OpenAI ada-text-embedding-002
para incorporação.
CurateGPT é colocado sobre simonw/llm, que possui uma arquitetura de plugin para usar modelos alternativos. Em teoria você pode usar qualquer um desses plugins.
Além disso, você pode configurar um proxy emulador de openai usando litellm.
O proxy litellm
pode ser instalado com pip
como pip install litellm[proxy]
.
Digamos que você queira executar mixtral localmente usando ollama. Você inicia o ollama (talvez seja necessário executar ollama serve
primeiro):
ollama run mixtral
Então inicie o litellm:
litellm -m ollama/mixtral
Em seguida, edite seu extra-openai-models.yaml
conforme detalhado nos documentos do llm:
- model_name: ollama/mixtral
model_id: litellm-mixtral
api_base: "http://0.0.0.0:8000"
Agora você pode usar isto:
curategpt ask -m litellm-mixtral -c ont_cl "What neurotransmitter is released by the hippocampus?"
Mas esteja avisado que muitos dos prompts no curategpt foram projetados contra modelos openai e podem fornecer resultados abaixo do ideal ou falhar totalmente em outros modelos. Por exemplo, ask
parece funcionar muito bem com mixtral, mas complete
funciona horrivelmente. Ainda não investigamos se o problema é o modelo, nossas instruções ou a abordagem geral.
Bem-vindo ao mundo da engenharia de IA!
curategpt --help
Você verá vários comandos para trabalhar com índices, pesquisar, extrair, gerar, etc.
Essas funções geralmente estão disponíveis por meio da IU e a prioridade atual é documentá-las.
curategpt ask -c ont_cl "What neurotransmitter is released by the hippocampus?"
pode render 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"
rendimentos
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
Você pode comparar todos os objetos em uma coleção
curategpt all-by-all --threshold 0.80 -c ont_hp -X ont_mp --ids-only -t csv > ~/tmp/allxall.mp.hp.csv
Isso leva de 1 a 2 segundos, pois envolve comparação com vetores pré-computados. Ele relata os principais resultados acima de um limite.
Os resultados podem variar. Você pode tentar textos diferentes para incorporações (o padrão é todo o objeto json; para ontologias é concatenação de rótulos, definição, aliases).
amostra:
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
Observe que o CurateGPT possui um componente separado para usar um LLM para avaliar correspondências de candidatos (consulte também https://arxiv.org/abs/2310.03666); isso não está habilitado por padrão, seria caro executá-lo para uma ontologia inteira.