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"]

違いは、返り値の型が ndarraylist かの違いくらいなもんで、あっさり使える。レスポンスは早い気がするけど、そもそも負荷のかかるような量は試していない。

ただ、埋め込みの数値が微妙にローカルで流したものと異なる。SentenceTransformer のと何かしらの設定が違いそうだけど、あまり深掘りはしていない。そもそも、OpenAIのEmbedding APIと同じと書かれているが、中身は encode_queryencode_document をどう呼んでいるのか公開されていない。たぶん、model.encode と同じだと思うんだけど。

ところで、CloudflareのWebのUIが非常に分かりにくい。

  • ACCOUNT IDとトークン: ACCOUNT_IDAUTH_TOKENが必要で。どちらも、APIのガイドに従えば簡単に取得できる。しかし、一度APIを使うと、Workers AIの画面はMetricsを表示するため、もしもう1つトークンが必要になる場合、それぞれ別の経路で取得する必要がある。
    • ACCOUNT_ID はAccount Homeのユーザー名の右の「︙」からコピーできる1
    • AUTH_TOKEN はMy Profileから管理・作成できる2
  • 2FA: トークンを発行するには、2FAが必須だが、2FAに設定にはアカウントとパスワードが求められる。Googleなどのソーシャルアカウント連携でログインすると、当然パスワードを設定していないため、2FAが作成できない3
    • Change Passwordは旧パスワードが求められるため使えない
    • 一度ログアウトし、Forget passwordからパスワード情報をリセットすると、ソーシャルアカウント連携ではないログインが可能となる

特に2つ目は罠では…


  1. Find account and zone IDs · Cloudflare Fundamentals docs ↩︎

  2. Create API token · Cloudflare Fundamentals docs ↩︎

  3. redditなどのコメントに「ソーシャルアカウント連携の場合は、add passwordが出てくる」というコメント見かけたが、そんな文言は見かけなかった ↩︎