CurateGPT는 객체 컬렉션 에 대해 범용 AI 기반 큐레이션 및 큐레이션 관련 작업을 수행하기 위한 프로토타입 웹 애플리케이션 및 프레임워크입니다.
curategpt.io의 앱도 참조하세요(참고: 이 앱은 때때로 다운되며 로컬 앱 기능의 하위 집합만 있을 수 있음).
CurateGPT는 Pypi에서 사용할 수 있으며 pip
와 함께 설치할 수 있습니다.
pip install curategpt
먼저 Poetry를 설치해야 합니다.
그런 다음 이 저장소를 복제하세요.
git clone https://github.com/monarch-initiative/curategpt.git
cd curategpt
종속성을 설치합니다.
poetry install
CurateGPT에서 최고의 성능을 얻으려면 OpenAI API 키를 가져와서 설정하는 것이 좋습니다.
export OPENAI_API_KEY=
(Monarch 회원의 경우: 그룹 키 사용 여부를 Slack에 문의하세요.)
CurateGPT는 다른 대규모 언어 모델과도 작동합니다. 아래의 '모델 선택'을 참조하세요.
처음에는 빈 데이터베이스로 시작합니다. 이 데이터베이스에 원하는 것을 로드할 수 있습니다! 모든 JSON, YAML 또는 CSV가 허용됩니다. CurateGPT에는 온톨로지를 포함하여 일부 기존 로컬 및 원격 소스에 대한 래퍼가 함께 제공됩니다. Makefile에는 이를 로드하는 방법에 대한 몇 가지 예가 포함되어 있습니다. ont-
대상을 사용하여 모든 온톨로지를 로드할 수 있습니다. 예:
make ont-cl
이는 OAK를 통해 CL을 ont_cl
이라는 컬렉션에 로드합니다.
기본적으로 이는 stagedb
에 저장된 컬렉션 세트로 로드되는 반면, 앱은 db
에서 작동합니다. 다음을 사용하여 컬렉션 세트를 db에 복사할 수 있습니다.
cp -r stagedb/* db/
그런 다음 다음을 사용하여 Streamlit 앱을 실행할 수 있습니다.
make app
CurateGPT는 큐레이트하려는 데이터베이스/온톨로지의 벡터 데이터베이스 인덱스에 따라 달라집니다.
주력 애플리케이션은 온톨로지 큐레이션이므로 CL과 같은 OBO 온톨로지에 대한 인덱스를 구축하려면 다음을 수행하세요.
make ont-cl
OpenAI 키가 필요합니다.
(개방형 임베딩 모델을 사용하여 인덱스를 구축하고 -m
옵션을 생략하도록 명령을 수정할 수 있지만 현재 oai 임베딩이 가장 잘 작동하는 것처럼 보이므로 이는 권장되지 않습니다.)
기본 온톨로지를 로드하려면:
make all
(시간이 좀 걸릴 수 있습니다)
다른 데이터베이스를 로드하려면:
make load-db-hpoa
make load-db-reactome
임의의 json, yaml 또는 csv 파일을 로드할 수 있습니다.
curategpt view index -c my_foo foo.json
(시 쉘에서 이 작업을 수행해야 합니다)
문제의 GitHub 저장소를 로드하려면 다음을 수행하세요.
curategpt -v view index -c gh_uberon -m openai: --view github --init-with "{repo: obophenotype/uberon}"
다음도 지원됩니다.
현재 이 도구는 OpenAI gpt-4 모델(교육 작업용) 및 OpenAI ada-text-embedding-002
(임베딩용)에서 가장 잘 작동합니다.
CurateGPT는 대체 모델을 사용하기 위한 플러그인 아키텍처가 있는 simonw/llm 위에 계층화되어 있습니다. 이론적으로는 이러한 플러그인 중 하나를 사용할 수 있습니다.
또한 litellm을 사용하여 openai 에뮬레이션 프록시를 설정할 수 있습니다.
litellm
프록시는 pip install litellm[proxy]
로 pip
와 함께 설치될 수 있습니다.
ollama를 사용하여 로컬에서 mixtral을 실행한다고 가정해 보겠습니다. ollama를 시작합니다( ollama serve
먼저 실행해야 할 수도 있음).
ollama run mixtral
그런 다음 litellm을 시작하십시오.
litellm -m ollama/mixtral
다음으로 llm 문서에 설명된 대로 extra-openai-models.yaml
편집합니다.
- model_name: ollama/mixtral
model_id: litellm-mixtral
api_base: "http://0.0.0.0:8000"
이제 다음을 사용할 수 있습니다.
curategpt ask -m litellm-mixtral -c ont_cl "What neurotransmitter is released by the hippocampus?"
그러나 curategpt의 많은 프롬프트는 개방형 모델에 대해 설계되었으며 다른 모델에서는 차선책 결과를 제공하거나 완전히 실패할 수 있다는 점에 유의하세요. 예를 들어, ask
mixtral과 꽤 잘 작동하는 것 같지만, complete
끔찍하게 작동합니다. 문제가 모델인지, 프롬프트인지, 전반적인 접근 방식인지 아직 조사하지 않았습니다.
AI 엔지니어링의 세계에 오신 것을 환영합니다!
curategpt --help
인덱스 작업, 검색, 추출, 생성 등에 대한 다양한 명령을 볼 수 있습니다.
이러한 기능은 일반적으로 UI를 통해 사용할 수 있으며 현재 우선순위는 이를 문서화하는 것입니다.
curategpt ask -c ont_cl "What neurotransmitter is released by the hippocampus?"
다음과 같은 결과가 나올 수 있습니다.
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"
수확량
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
하나의 컬렉션에 있는 모든 개체를 비교할 수 있습니다.
curategpt all-by-all --threshold 0.80 -c ont_hp -X ont_mp --ids-only -t csv > ~/tmp/allxall.mp.hp.csv
사전 계산된 벡터에 대한 비교가 포함되므로 1~2초가 걸립니다. 임계값을 초과하는 최고 조회수를 보고합니다.
결과는 다를 수 있습니다. 임베딩을 위해 다른 텍스트를 시도할 수도 있습니다(기본값은 전체 json 객체이고 온톨로지의 경우 레이블, 정의, 별칭의 연결입니다).
견본:
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
CurateGPT에는 LLM을 사용하여 후보 일치를 평가하기 위한 별도의 구성 요소가 있습니다(https://arxiv.org/abs/2310.03666 참조). 이는 기본적으로 활성화되어 있지 않으므로 전체 온톨로지에 대해 실행하는 데 비용이 많이 듭니다.