以前の記事で、Llama_cpp.serverのOpenAI互換APIとベクトル・データベースとしてPineconeを使ったIn-context Learningを行なうAPEXアプリケーションを作成しました。そのPineconeの部分をChromaに置き換えてみました。
ベクトル・データベースを置き換えただけなので、APEXアプリケーション自体にほとんど変更はありません。
置き換えたAPEXアプリケーションのエクスポートは以下になります。
https://github.com/ujnak/apexapps/blob/master/exports/vector-documents-search-chroma.zip
ChromaにAPEXからアクセスするためのパッケージCHROMA_APIを作成しています。JavaScript APIを参考にしていますが、実装を省略した部分は多々あります。(例えば引数としてstringまたはstring[]を受け取る部分をstring[]に限定していたりします)。
パッケージKB_LLM_UTILのPineconeの呼び出し部分を、パッケージCHROMA_APIのファンクションの呼び出しに置き換えています。
APEXアプリケーションの置換文字列のG_INDEXに、Chromaに作成したコレクションのIDを設定します。G_ENDPOINTとして、LLama_cpp.serverとChromaが稼働しているホストを指すURLを設定します。
パッケージCHROMA_APIにはコレクションを作成するファンクションCREATE_COLLECTIONまたはGET_OR_CREATE_COLLECTIONが含まれています。そのファンクションを呼び出して、Chromaのコレクションを作成します。
metadataのhnsw:spaceにcosineを指定し、ベクトル検索時にコサイン類似度を使うようにします。
作成されているコレクションを一覧するには、LIST_COLLECTIONSを呼び出します。
作成したコレクションを削除するには、DELETE_COLLECTIONを呼び出します。
以上が、Chromaに切り替えた変更点です。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完