AI
ワーカーから言語モデルを呼び出します。env.ai 一つでフロンティアモデルとバリューモデルを呼び、料金は組織のクレジット残高から引かれます。
{ "ai": true }runlot deployデプロイすると、ワーカーで env.ai が使えます。作成コマンドはありません — 宣言がそのまま付与です。
env.ai はワーカーの中からしか届きません。ワーカーのエントリーポイントを持たず静的アセットだけを配るプロジェクトでは使えません。
呼び出す
const r = await env.ai.run("anthropic/claude-sonnet-5", {
messages: [{ role: "user", content: "注文確認メールの文面を書いてください。" }],
maxTokens: 1024,
});
r.text // 生成されたテキスト
r.usage // { inputTokens, outputTokens, cachedInputTokens }
r.model // 実際に呼ばれたモデル ID
r.stopReason // 生成が終わった理由メッセージが 1 つだけなら prompt に短く書けます。ユーザーメッセージを 1 つ書くのと同じです。
const r = await env.ai.run("@runlot/nova-micro", { prompt: "1 行で要約してください。" });| オプション | |
|---|---|
messages | { role, content } の配列 |
prompt | ユーザーメッセージ 1 つの省略形 |
system | システムプロンプト |
maxTokens | 生成する最大トークン数 |
temperature | サンプリング温度 |
stream | true なら ReadableStream を返します |
role は user と assistant の 2 つだけです。システムプロンプトは messages ではなく system に書きます。
ストリーミング
stream: true にすると SSE フレームの ReadableStream が返ります。そのまま Response に載せてブラウザーへ送れます。
const stream = await env.ai.run("@runlot/nova-micro", { prompt, stream: true });
return new Response(stream, { headers: { "content-type": "text/event-stream" } });フレームの形はこうです。
data: {"delta":"こんに"}
data: {"delta":"ちは"}
event: done
data: {"model":"@runlot/nova-micro"}生成が途中で切れた場合、最後のフレームは event: error です。
event: error
data: {"message":"…"}ストリームが始まったあとの失敗は、例外ではなくこのフレームで届きます。 最初のフレームと一緒に 200 がすでに出ているからです。ストリームを読む側で event: error を扱ってください。
カタログ
このプロジェクトが実際に呼べるモデルの一覧はコードから読めます。
const models = await env.ai.models();レーンは 2 つあり、売り方が違います。
| レーン | モデル ID | 単価 |
|---|---|---|
| フロンティア | anthropic/… · openai/… · google/… | プロバイダーの定価そのまま、マークアップなしで通します |
| バリュー | @runlot/… | Runlot が決めます |
カタログにないモデル ID は 400 です。一覧は私たちが選んだ固定のリストです。
無料利用枠
組織ごとに 1 日 $0.11 をバリューモデルに使えます。UTC の 0 時にリセットされます。クレジットがまったくなくても、@runlot/… のモデルは毎日この分まで呼べます。
フロンティアモデルに無料利用枠はありません。 1 日分をフロンティアに開くと 1 回の呼び出しで消えます — それは無料枠ではなく故障です。anthropic/… · openai/… · google/… は組織にクレジットがないと呼べず、なければ 402 です。
クレジットは金額です
クレジットは金額の残高であって、トークンの束ではありません。1 回の呼び出しで引かれる金額は、その呼び出し時点の価格表に従います。
プロバイダーの定価は動きます。たとえば Google の定価は 2027 年 1 月 1 日から 2 倍になります。クレジットをトークンの束として売ると、その日に、すでに買った人の分が黙って付け替えられます。金額の残高はそれを防ぎます — 買ったのは金額で、何をいくらで買うかは呼ぶときに決まります。
2 つのレーンの値は同じ通貨で付きます。違うのは値の出どころだけです。別に覚える単位はありません。
画面と CLI は USD で表示します。API と --json 出力の整数はマイクロセントです(1 マイクロセント = 1e-8 USD)。セントで書くと小さな呼び出しが丸めで 0 になり、黙って無料になってしまうからです — 1000 トークンの呼び出しは 1 セントの 100 分の 1 にも届きません。
上限
| 無料 | プロ | |
|---|---|---|
| 同時呼び出し(プロジェクトごと) | 2 | 10 |
| 1 分あたりの呼び出し(プロジェクトごと) | 30 | 300 |
1 回の maxTokens | 4,096 | モデルの最大 |
| 1 回の入力 | 128k トークン | モデルの最大 |
| 1 日の無料利用枠(バリュー) | 組織ごとに $0.11 | 同じ |
エラー
拒否・失敗した呼び出しは例外を投げます。エラーが持つのは 2 つです — e.status(HTTP ステータス)と e.code(短い文字列)。
| ステータス | code | 意味 |
|---|---|---|
| 400 | unknown_model | カタログにないモデル ID です。一覧は env.ai.models() が返します。 |
| 402 | no_credit | クレジットがない、または 1 日の無料利用枠を使い切りました。 |
| 413 | input_too_large | 入力が 1 回あたりの上限を超えました。 |
| 429 | rate_limited | 1 分あたりの上限です。 |
| 429 | too_many_concurrent | 同時呼び出しの上限です。 |
| 429 | upstream_rate_limited | プロバイダー側が混んでいます。 |
| 502 | upstream_error | プロバイダーの呼び出しが失敗しました。 |
| 503 | model_unavailable | そのモデルはこのデプロイでは呼べません。 |
| 504 | upstream_timeout | プロバイダーの呼び出しが時間を超えました。 |
rate_limited と upstream_rate_limited はレスポンスに Retry-After ヘッダーが付きます。too_many_concurrent には付きません — 枠がいつ空くかは私たちにも言えないからです。実行中の呼び出しが終われば解けます。
チャージ
ダッシュボードの組織画面の 請求 タブからチャージします。
自動チャージ
残高が決めた値を下回ると、保存したカードに自動でチャージします。既定はオフです。
| チャージ金額 | $10 · $20 · $50 · $100 のいずれか |
| 基準残高 | 0 より大きく、チャージ金額より小さいこと |
| 1 日の請求回数 | 5 回 |
| 連続失敗 | 3 回でオフになります |
- 最初のチャージは手動です。 カードが保存されるのはその決済だからです。保存された支払い方法がなければ自動チャージは有効にできません。
- 有効にすることが明示的な同意です。 決済画面にいない状態で保存済みのカードに請求するため、画面が請求の条件を文のまま示し、確認を求めます。
- 1 日 5 回がそのまま支出の上限です。 1 日の最大請求額は 5 × チャージ金額です。バグのあるコードがループで呼び出しても請求はそこで止まります。この回数は変更できません — もっと必要ならチャージ金額を上げてください。
- 基準残高は 0 より大きくしてください。 チャージは非同期なので、着金するまで持ちこたえる残高が要ります。0 は拒否します。
- 基準残高はチャージ金額より小さくしてください。 そうでないと 1 回チャージしてもまだ基準を下回り、1 日の上限までチャージし続けます。これも拒否します。
- 拒否が 3 回続くと自動チャージを切ります。 失敗のたびに通知を送り、3 回目で設定をオフにします。利用者のカードに黙って永遠に再試行することはしません。
CLI
runlot ai # 呼び出し数・トークン・使った金額と上限
runlot ai models # モデル一覧と 100 万トークンあたりの単価
runlot ai credit # 組織のクレジット残高と自動チャージの設定
runlot ai delete # 無効にする(admin)参照する 3 つはいずれも --json を受け取ります。モデルを呼ぶコマンドはありません — CLI はワーカーの外で、env.ai はワーカーの中からしか届きません。
ないもの
- 任意のモデルのパススルー。 カタログは私たちが選んで管理する固定のリストです。
- 外から呼ぶ道。
env.aiはデプロイされたワーカーの中からのみ届きます。API キーもなく、外部エンドポイントもなく、Runlot の外から呼ぶ方法もありません。抜けている機能ではなく、引いた境界です。 - BYOK。 自分のプロバイダーキーを預けて私たち経由で呼ぶ道はありません。
- 埋め込み · ベクトル検索、ファインチューニング、画像 · 音声モデル。 まだありません。