はじめに
2026-08-21、ローカル LLM の入れ替え候補として Qwen3.8-27B を試すことになった。4bit 量子化でも 15GB あるので、ダウンロードする前に Cloudflare Workers AI の無料枠で性能を見ておく。そういう順番にした。
Workers AI のモデル一覧(/ai/models/search)は 64モデルを返した。前回の調査から新しく入ったのはこの6つ。
@cf/qwen/qwen3.8-27b@cf/deepseek-ai/deepseek-v4-flash-0731@cf/deepseek-ai/deepseek-v4-pro-0813@cf/zai-org/glm-5.2@cf/nvidia/nemotron-3-120b-a12b@cf/moonshotai/kimi-k2.7-code
一覧に並んでいても、叩くと403が返る
新しく入ったモデルを1本ずつ呼んだ。4本が 403 で返ってきた。
Model ... is not available on the Workers Free plan
| モデル | 無料プラン | 応答 |
|---|---|---|
deepseek-v4-flash-0731 |
✕ 403 | — |
deepseek-v4-pro-0813 |
✕ 403 | — |
glm-5.2 |
✕ 403 | — |
kimi-k2.7-code |
✕ 403 | — |
qwen3.8-27b |
○ | 2.3〜7.3秒 |
nemotron-3-120b-a12b |
○ | 0.5秒 |
gpt-oss-120b |
○ | 0.3秒 |
gemma-4-26b-a4b-it |
○ | 0.8秒 |
モデル一覧の API は、プランによる制限を区別せずに全部を返す。一覧に載っていることと、無料で呼べることは別だった。
どのモデルが弾かれるかは今後も変わりうる。組み込む前に1回だけ実際に叩いて、200 が返るかを見る手順を足した。
本文が空文字で返ってきた
無料で通った qwen3.8-27b に短い質問を投げた。HTTP 200、エラーなし。なのに本文が空だった。
旧来のテキスト生成モデルは、本文を result.response に入れて返す。
{ "result": { "response": "本文" } }
qwen3.8-27b は OpenAI 互換の形で返ってくる。response は空文字のまま残っていて、本文は choices の中にあった。
{
"result": {
"response": "",
"choices": [
{ "message": { "content": "本文", "reasoning": "思考の過程" } }
]
}
}
response キーを読むコードでは、「モデルが無言で返した」ように見える。実際に最初の1回はこれで空振りした。
読み出しは両方の形に対応させた。
r = res.json()["result"]
text = r.get("response") or ""
if not text and r.get("choices"):
text = r["choices"][0]["message"].get("content") or ""
思考だけで枠を使い切る
qwen3.8-27b は思考型のモデルで、思考は message.reasoning に分けて返る。ここにもう一段の落とし穴があった。
max_tokens を小さく絞ると、上限まで全部を思考に使って、content が空のまま終わる。
客観的に正解が決まる5題を既定の設定のまま解かせたところ、1題は本文がゼロだった。その1題だけで 878 neurons を思考に消費している。正答は5題中3題。
エラーは出ないので、空の content を「答えられなかった」と読むか「思考で打ち切られた」と読むかは、reasoning の長さを見ないと区別できない。
無料枠でどれくらい回せるか
無料枠は 1日 10,000 neurons。モデルごとではなく、全モデルで共有される。
| 呼び方 | 所要 | 消費 |
|---|---|---|
| 短答(入力66トークン・出力80トークン) | 7.3秒 | 26 neurons |
| Python の設問に1問答える | 2.3秒 | 29 neurons |
| 長め(出力400トークン) | 86秒 | 121 neurons |
短答なら 1日およそ380回。ダウンロード前にモデルの当たりを付けるには足りる量だった。このあと 27B は実際にダウンロードして、手元で比べている。
一覧に載っているものは使えるものだと思っていた。
200 が返ってきたら、答えも入っていると思っていた。どちらも1回叩くまで分からなかった。
![無料プランで8本を呼んだ結果。4本が403、4本が200。200でも qwen3.8-27b は result.response が空文字で、本文は result.choices[0].message.content にあった](https://qiita-user-contents.imgix.net/https%3A%2F%2Fkuroto-blog.pages.dev%2Fimages%2Fw42%2F104-workers-ai-free-gate.png?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=6f27ca9fe552ef342fbb7e0e7b0ec2eb)