Cloudflareは10月9日、テキストと画像、音声クリップ、動画を同時に調べられるWorkers AIのホスト型判断モデルとしてClef-omniを公開しました。アプリ開発者にとって有用なテストは限定的です。モデルにチケットの状態と固定した質問群を渡し、回答を確認し、振り分けの判断は人に委ねます。このガイドは、 Cloudflareの最新モデルドキュメント と 公開時のサンプルに沿っています。BIG CHANGEはAPIを実行しておらず、サポートチケットでの精度も測定していません。

Workers AIでのモデルIDは @cf/cloudflare/clef-omni です。これは判断モデルです。呼び出し側が型付き質問と許可する選択肢を定義し、その選択肢のスコアを受け取ります。サポートへの返信文は作成しません。Cloudflareはオープンウェイトも公開しましたが、以下の手順では同社のホスト型エンドポイントを使います。速度やベンチマークに関する数値はCloudflare自身の主張であり、このワークフローがお使いのチケットでどの程度機能するかを示すものではありません。

アクセスと範囲を絞った質問群を準備する

Workers AIにアクセスできるCloudflareアカウント、そのアカウントID、Workers AI APIトークン、そして requests をインストールしたPython、または同じHTTPリクエストを送信できるツールが必要です。 CloudflareのREST設定ガイド では、ダッシュボードでアカウントIDをコピーし、トークンを作成する場所を説明しています。手動で作成したトークンには Workers AI - Read と Workers AI - Edit の権限が必要です。トークンをチケットやソース管理に含めないでください。

実際のチケットや添付ファイルを送ると、顧客のコンテンツが処理のためCloudflareに送信されます。 CloudflareのWorkers AIデータ利用ページ には、明示的な同意なしにそのコンテンツをWorkers AIで提供するモデルの学習やサービス改善に使わないとあります。また、R2やKVなどのストレージサービスとWorkers AIを併用すると、コンテンツが保存される場合があるとも記載されています。顧客チケットを送る前に、適用されるCloudflareとの契約と組織の顧客データ規則を確認し、可能な範囲で個人情報を削減またはマスキングしてください。Cloudflareが学習に使わないと述べているだけでは、特定の顧客データを送る許可があるとは限りません。

メディアを追加する前に、まずテキストで応答を確認してください。Cloudflare独自のサポート例では状態 Checkout has been failing for every customer for the last hour を使い、3つの質問をします。緊急かどうか(noul、はい/いいえ型)、どのチームが担当すべきか(choice)、影響の深刻さ(score)です。これは文書化された例であり、実際に観測されたインシデントではありません。APIは state として文字列または構造化オブジェクト/配列を受け付けます。 questions マップには1~64個の質問IDが必要で、それぞれに型と指示があります。 choice と score は、許可する回答を定義する基準を使います。

テキストリクエストを送信する

環境に CLOUDFLARE_AUTH_TOKEN を設定し、以下のアカウントIDを置き換えてください。このPythonリクエストは、Cloudflareのモデル例にある 正確なエンドポイントと項目を使用します:

Python
import os
import requests

account_id = "your-account-id"
token = os.environ["CLOUDFLARE_AUTH_TOKEN"]

payload = {
    "model": "clef-omni",
    "state": "Checkout has been failing for every customer for the last hour.",
    "questions": {
        "urgent": {
            "type": "noul",
            "instructions": "Is this support request urgent?",
        },
        "team": {
            "type": "choice",
            "instructions": "Which team should handle this request?",
            "criteria": {
                "billing": "Payments, invoices, and refunds",
                "technical": "Outages, errors, and configuration",
                "sales": "Plans and upgrades",
            },
        },
        "severity": {
            "type": "score",
            "instructions": "How severe is the customer impact?",
            "criteria": ["No impact", "Minor", "Major", "Critical"],
        },
    },
}

response = requests.post(
    f"https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/cloudflare/clef-omni",
    headers={"Authorization": f"Bearer {token}"},
    json=payload,
    timeout=60,
)
response.raise_for_status()
print(response.json())

確認が成功したら、応答の answers エントリを、同じ urgent、 team 、 severity の各IDの下で確認します。Cloudflareは、1つ目を緊急度の確率、2つ目を各選択肢の確率を伴う選択チーム、3つ目を確率加重スコア(最低レベルはゼロ)として説明しています。APIには model と usage の応答項目も記載されています。アプリケーションに割り当てる前に、アカウントに返されたJSON全体を確認してください。確率は、指定された質問と状態に対するモデルの出力であり、実際のチケットがそのキューに属するという保証ではありません。操作前に、チケットと添付ファイルを提案された振り分け先と人が照合してください。

写真、録音、動画を追加する

Cloudflareの 公開時のリクエスト では、任意のメディアを埋め込みbase64の images、 audio 、 videos の各配列に分けて格納します。たとえばサンプルでは data: 、 data:image/png;base64,...、 data:audio/mpeg;base64,... を使います。POSTの前にローカルファイルをPythonのpayloadに追加するには、ファイルをエンコードし、対応する配列にdata URLを追加します: data:video/mp4;base64,... ローカルファイルをPython payloadに追加するには、 requests.postエンコードし、対応する配列にdata URLを追加します:

Python
import base64
from pathlib import Path

def add_media(payload, field, file_path, mime_type):
    raw = Path(file_path).read_bytes()
    encoded = base64.b64encode(raw).decode("ascii")
    payload.setdefault(field, []).append(f"data:{mime_type};base64,{encoded}")

# Examples: use only the files present in the ticket, with their real MIME types.
# add_media(payload, "images", "photo.png", "image/png")
# add_media(payload, "audio", "recording.mp3", "audio/mpeg")
# add_media(payload, "videos", "clip.mp4", "video/mp4")

を実行します。 add_media POSTの前に実行し、 state は事実に即した内容にし、各添付ファイルの内容を説明してください。チケットと利用可能なメディアから答えられる質問だけをします。Cloudflareの公開例では、装置の写真、音声録音、ファンの動画を使って、目や耳で確認できる詳細について3つのはい/いいえ質問をしています。サポートアプリは独自のチケット項目を state に、許可するキューを criteria に保持できますが、実際のワークフローに照らして定義を確認してください。このサービスはリモートメディアURLを受け付けません。

エンコードの前に制限を確認してください。モデルページ では、PNG、JPEG、WebP画像を最大4枚(各4 MiB、1600万画素まで、デコード後の画像合計8 MiBまで)受け付けます。音声クリップは最大4件(各8 MiB、300秒まで)、動画は2件(各16 MiB、60秒まで)です。音声と動画のデコード後合計は16 MiBまでです。動画は毎秒2フレームでサンプリングされ、リクエスト内のすべての動画に音声があれば、映像と併せて音声も使われます。画像の費用はリサイズ後の画像によって異なり、1枚あたり1,024トークンが上限です。添付ファイルが大きすぎる、または長すぎる場合は、人が関連する短い部分を選ぶか、テキストのみで確認したうえで元のメディアを別途確認してください。切り抜きや短縮したファイルを完全な証拠として扱わないでください。

費用、コンテキスト、エラー時の対応を確認する

Cloudflareは現在、Clef-omniの料金を 入力100万トークンあたり0.15ドル と掲載し、出力トークンには課金しないとしています。メディアはその料金で入力トークンに変換されます。モデルページによると、音声は1分あたり約780トークン、最高解像度の動画は1分あたり約15,400トークンまでで、動画に音声がある場合は音声トークンも加わります。画像の費用はリサイズ後の画像により異なり、1枚あたり1,024トークンが上限です。これは請求ルールであり、添付ファイルごとの固定料金ではありません。

ホスト型モデルのコンテキストは64,000トークンです。メディアと質問もこの枠に含まれます。上限を超えるとリクエストは失敗するとCloudflareは説明しています。超えない場合でも、長いチケットの state は枠に収まるよう切り詰められることがあります。そのため、応答が返っても、長いチケットの全行をモデルが考慮した証拠にはなりません。リクエストが失敗したらHTTPエラーを確認し、文書化された制限内で添付ファイルを縮小または削除してから再試行してください。成功したら、想定した質問IDがあることを確認し、元のチケットをレビュー用に保管して、提案された振り分け先を証拠と照合します。モデルの確率はレビュー担当者の注意を向ける助けになりますが、サービス保証や安全な自動しきい値を定めるには、自社のラベル付きチケットで評価する必要があります。

大きな変化

Cloudflareの10月9日のリリースにより、テキストと画像に関する型付き質問に使われてきたホスト型Clef判断モデルの経路に、音声と動画が加わりました。開発者は、対応するメディア付きの1件のチケット状態を単一のWorkers AIリクエストで送信し、固定スキーマに対応した回答を受け取れます。アプリチームには、どの質問をスキーマに含めるかを決め、自社のチケットで性能を試し、返信や振り分けの前に人の承認を必須にする作業が残ります。

出典と参考資料

  • Cloudflare Clef-omniモデルドキュメント、2026年10月10日確認。ホスト型モデルID、API項目と例、メディアとコンテキストの制限、応答形式、記載されたトークン価格の主要資料。ドキュメントはサービスの動作を説明するもので、BIG CHANGEはリクエストを実行していません。
  • CloudflareのClef-omni発表記事、2026年10月9日。公開日を確認でき、メディアを埋め込んだリクエスト例が掲載されています。性能やベンチマークの数値はCloudflare自身の主張です。
  • Cloudflare Workers AI REST設定、2026年9月15日最終更新、10月10日確認。アカウントIDとAPIトークンの取得方法、および手動作成したトークンに必要な権限を示します。
  • Cloudflare Workers AIのデータ利用、2026年4月21日最終更新、10月10日確認。顧客コンテンツの処理、明示的な同意なしでの学習やサービス改善への利用制限、別のストレージサービス使用時の保存可能性、適用される契約の範囲を説明します。特定のチケットや録音を開発者が送信してよいかどうかは判断しません。