CloudflareのWorkers AIという、グローバルネットワーク上でサーバーレスGPUを使い、各種生成AIモデルを実行できるサービスに、インド、日本、東南アジアのモデルが追加された。日本代表(?)のモデルはplamo-embedding-1bとなっている。
ちょうど先日、plamo-embedding-1bを使って関連メモのリンクを挿入するロジックを描いたので(メモ)、Workers AIに切り替えて使ってみた。
使い方は簡単というか、API Docsにある通りに実装すれば良い。
import requests
ACCOUNT_ID = "your-account-id"
AUTH_TOKEN = os.environ.get("CLOUDFLARE_AUTH_TOKEN")
stories = text_contents # a list of target texts
response = requests.post(
f"https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/@cf/pfnet/plamo-embedding-1b",
headers={"Authorization": f"Bearer {AUTH_TOKEN}"},
json={"text": stories}
)
embeddings = response.json()["result"]["data"]
違いは、返り値の型が ndarray
か list
かの違いくらいなもんで、あっさり使える。レスポンスは早い気がするけど、そもそも負荷のかかるような量は試していない。
ただ、埋め込みの数値が微妙にローカルで流したものと異なる。SentenceTransformer
のと何かしらの設定が違いそうだけど、あまり深掘りはしていない。そもそも、OpenAIのEmbedding APIと同じと書かれているが、中身は encode_query
や encode_document
をどう呼んでいるのか公開されていない。たぶん、model.encode
と同じだと思うんだけど。
ところで、CloudflareのWebのUIが非常に分かりにくい。
- ACCOUNT IDとトークン:
ACCOUNT_ID
とAUTH_TOKEN
が必要で。どちらも、APIのガイドに従えば簡単に取得できる。しかし、一度APIを使うと、Workers AIの画面はMetricsを表示するため、もしもう1つトークンが必要になる場合、それぞれ別の経路で取得する必要がある。 - 2FA: トークンを発行するには、2FAが必須だが、2FAに設定にはアカウントとパスワードが求められる。Googleなどのソーシャルアカウント連携でログインすると、当然パスワードを設定していないため、2FAが作成できない3
- Change Passwordは旧パスワードが求められるため使えない
- 一度ログアウトし、Forget passwordからパスワード情報をリセットすると、ソーシャルアカウント連携ではないログインが可能となる
特に2つ目は罠では…
redditなどのコメントに「ソーシャルアカウント連携の場合は、add passwordが出てくる」というコメント見かけたが、そんな文言は見かけなかった ↩︎