CurateGPT は、オブジェクトのコレクションに対して汎用 AI ガイドによるキュレーションおよびキュレーション関連の操作を実行するためのプロトタイプ Web アプリケーションおよびフレームワークです。
curategpt.io のアプリも参照してください (注: これは時々ダウンしているため、ローカル アプリの機能のサブセットしかない場合があります)
CurateGPT は Pypi で利用でき、 pip
でインストールできます。
pip install curategpt
まずPoetryをインストールする必要があります。
次に、このリポジトリのクローンを作成します。
git clone https://github.com/monarch-initiative/curategpt.git
cd curategpt
そして依存関係をインストールします。
poetry install
CerateGPT から最高のパフォーマンスを得るには、OpenAI API キーを取得して設定することをお勧めします。
export OPENAI_API_KEY=
(Monarch メンバーの場合: グループ キーを使用したい場合は Slack で質問してください)
CurateGPT は他の大きな言語モデルでも動作します。以下の「モデルの選択」を参照してください。
最初は空のデータベースから開始します。好きなものをこのデータベースにロードできます。任意の JSON、YAML、または CSV が受け入れられます。 CurateGPT には、オントロジーを含む、いくつかの既存のローカルおよびリモート ソースのラッパーが付属しています。 Makefile には、これらをロードする方法の例がいくつか含まれています。 ont-
ターゲットを使用して、任意のオントロジーをロードできます。例:
make ont-cl
これにより、CL が (OAK 経由で) ont_cl
というコレクションにロードされます。
デフォルトでは、これはstagedb
に保存されているコレクション セットに読み込まれますが、アプリは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
を使用してインストールできます。
ollam を使用して mixtral をローカルで実行したいとします。 ollam を起動します (最初にollama serve
実行する必要がある場合があります)。
ollama run mixtral
次に、litelm を起動します。
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 のプロンプトの多くは openai モデルに対して設計されており、他のモデルでは次善の結果が得られたり、完全に失敗したりする可能性があることに注意してください。例として、 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
1 つのコレクション内のすべてのオブジェクトを比較できます
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 も参照)。これはデフォルトでは有効になっていないため、オントロジー全体に対して実行するとコストが高くなります。