Vertex AI Matching Engineを使ってみる
より新しい記事: Vertex AI ベクトル検索を使ってみる
Vertex AIを有効化しておく
Matching Engine APIを使用してインデックスを作成できます
実験のうちは最も安いリージョンを選んでおく
初期データを保存するGCSバケットも同じリージョンに作ること。multi regionはだめ。
Node.jsから呼び出してみよう
どのAPIが関係するかは叩きながら考える
Cloud Run jobsを触ったときと雰囲気が似ている
未実装のメソッドが多くて結局これは使えず、素朴にfetchするしかなかった 
実験リポジトリ
OpenAIの text-embedding-ada-002 で得られる1536次元のembeddingを使った
1で作ったIndexはindexUpdateMethodが
BATCH_UPDATE
だったので作り直し PaLM APIの textembedding-gecko@001 で得られる768次元のembeddingを試す
あとで読みたくなりそう
public endpoint (認証必須) の作成方法
これそのものは目指さないけれど参考になる
さらに先: 検索クエリ発行
この論理フィルタは柔軟で凄い
検索時にどうやって指定するのか
Vertex AI Matching Engineでフィルタ機能を使う (Python)
Protocol Buffersの定義を読み解く
Node.jsのClient libraryを使ったサンプルコードが世に無いので自分で引数を考えて組み立てるしかない
https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-aiplatform/samples/generated/v1beta1/match_service.find_neighbors.js (findNeighbors関数の呼び出し)
https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-aiplatform/protos/google/cloud/aiplatform/v1/match_service.proto#L64 (FindNeighborsRequest, Query)
https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-aiplatform/protos/google/cloud/aiplatform/v1/index.proto#L126 (IndexDatapoint)
https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-aiplatform/protos/google/cloud/aiplatform/v1/match_service.proto#L126 (FindNeighborsResponse)
~~~
https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-aiplatform/protos/google/cloud/aiplatform/v1/index_service.proto#L242 (UpsertDatapointsRequest)
疑問
STREAM_UPDATEモードでupsertしてから検索可能になるまでの時間
ただちに可能
upsertされたデータポイントはインデックス作成時に指定したGCSに永続化されるの?
されない。Elasticsearchの運用と同様に永続化は別でやっておくべき。upsertする前にGCSに保存しておけばいい。次回のインデックス構築時の初期データとしてもそのまま使える。
ストリーミング更新で追加されたものを含めてデータポイント数を確認するには?
不明
大きい
neighbor_count
で検索して全件取得する方法しか思いつかない