エッジコンピューティングと AI の融合が加速する 2026 年、Cloudflare Workers AI はレイテンシゼロに近い AI 推論を世界 300 以上の PoP で提供します。Antigravity IDE のエージェント機能と組み合わせることで、コードの生成からデプロイまでを驚くほど短いサイクルで実現できます。
Cloudflare Workers AI とエッジ推論の仕組み
Workers AI は Cloudflare のエッジネットワーク上で直接 AI モデルを実行するサービスです。主な特徴は次のとおりです。
- 超低レイテンシ: ユーザーから最近傍 PoP でモデルが動作するため、東京リージョンでも 50ms 以下のレイテンシを実現
- ゼロコールドスタート: サーバーレスでありながら、GPU リソースを瞬時に割り当て
- 課金モデル: Inference Units(IU)単位の従量課金。デフォルトで 1 日 10,000 IU の無料枠あり
- 対応モデル: LLaMA 3.3、Mistral、Whisper、BAAI/bge(埋め込み)など主要 OSS モデルを提供
プロジェクト構成
my-edge-ai/
├── src/
│ ├── index.ts ← メインの Worker エントリポイント
│ ├── rag.ts ← RAG パイプライン
│ └── types.ts ← 型定義
├── wrangler.toml ← Cloudflare 設定
└── package.json
Antigravity でプロジェクトを高速セットアップ
Antigravity の Agent モード(Cmd+I)を活用すると、ボイラープレート生成から型補完まで AI がサポートします。
wrangler.toml の設定
# wrangler.toml
name = "edge-ai-api"
main = "src/index.ts"
compatibility_date = "2026-01-01"
compatibility_flags = ["nodejs_compat"]
[ai]
binding = "AI" # TypeScript では env.AI でアクセス
[[vectorize]]
binding = "VECTORIZE"
index_name = "knowledge-base" # ベクトル DB(RAG 用)
[[kv_namespaces]]
binding = "CACHE"
id = "your-kv-namespace-id" # レスポンスキャッシュ用
[vars]
ENVIRONMENT = "production"
MAX_TOKENS = "1024"POINT: Antigravity のエージェントに「wrangler.toml に Workers AI と Vectorize を追加して」と指示するだけで、上記のような構成を自動提案します。
基本的な AI エンドポイントの実装
// src/index.ts
import { Hono } from "hono";
import { cors } from "hono/cors";
import { stream } from "hono/streaming";
import { RagPipeline } from "./rag";
interface Env {
AI: Ai; // Workers AI バインディング
VECTORIZE: VectorizeIndex; // ベクトルDB バインディング
CACHE: KVNamespace; // KV キャッシュ
}
const app = new Hono<{ Bindings: Env }>();
// CORS の設定(本番では origin を厳格に制限すること)
app.use("*", cors({ origin: ["https://your-domain.com"] }));
// ─── テキスト生成エンドポイント(ストリーミング対応)───
app.post("/api/generate", async (c) => {
const { prompt, stream: useStream = false } = await c.req.json();
if (!prompt || prompt.length > 2000) {
return c.json({ error: "prompt は 1〜2000 文字で指定してください" }, 400);
}
// キャッシュチェック(非ストリーミング時のみ)
if (!useStream) {
const cached = await c.env.CACHE.get(`gen:${btoa(prompt)}`);
if (cached) {
return c.json({ result: cached, cached: true });
}
}
if (useStream) {
// ストリーミングレスポンス
return stream(c, async (s) => {
const response = await c.env.AI.run(
"@cf/meta/llama-3.3-8b-instruct",
{ prompt, stream: true, max_tokens: 1024 }
) as ReadableStream;
const reader = response.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
await s.write(decoder.decode(value));
}
});
}
// 通常レスポンス
const result = await c.env.AI.run(
"@cf/meta/llama-3.3-8b-instruct",
{ prompt, max_tokens: 1024 }
) as { response: string };
// 5 分間キャッシュ(TTL: 300 秒)
await c.env.CACHE.put(`gen:${btoa(prompt)}`, result.response, { expirationTtl: 300 });
return c.json({ result: result.response, cached: false });
});
export default app;
// ─── 期待するレスポンス例(ストリーミングなし)───
// POST /api/generate
// Body: {"prompt": "Cloudflare Workers の利点を教えてください"}
// → {"result": "Cloudflare Workers は...", "cached": false}RAG パイプラインの構築
単純な生成 AI に加え、**RAG(Retrieval-Augmented Generation)**で自社ナレッジベースを活用した応答を生成できます。
// src/rag.ts
interface QueryResult {
answer: string;
sources: string[];
confidence: number;
}
export class RagPipeline {
constructor(
private ai: Ai,
private vectorize: VectorizeIndex,
) {}
/**
* テキストを埋め込みベクトルに変換する
*/
async embed(text: string): Promise<number[]> {
const result = await this.ai.run(
"@cf/baai/bge-large-en-v1.5",
{ text: [text] }
) as { data: number[][] };
return result.data[0];
}
/**
* クエリに関連するドキュメントを取得して回答を生成する
*/
async query(userQuery: string): Promise<QueryResult> {
// Step 1: クエリを埋め込みベクトルに変換
const queryVector = await this.embed(userQuery);
// Step 2: ベクトル DB から上位 5 件の関連ドキュメントを取得
const matches = await this.vectorize.query(queryVector, {
topK: 5,
returnMetadata: "all",
});
if (matches.matches.length === 0) {
return {
answer: "関連する情報が見つかりませんでした。",
sources: [],
confidence: 0,
};
}
// Step 3: 取得したコンテキストを使って LLM で回答を生成
const context = matches.matches
.map((m) => m.metadata?.text ?? "")
.join("\n\n---\n\n");
const sources = matches.matches
.map((m) => m.metadata?.source as string)
.filter(Boolean);
const averageScore =
matches.matches.reduce((sum, m) => sum + m.score, 0) / matches.matches.length;
const prompt = `
以下のコンテキストに基づいて、質問に日本語で簡潔に答えてください。
コンテキスト外の情報は使用しないでください。
コンテキスト:
${context}
質問: ${userQuery}
回答:`;
const result = await this.ai.run(
"@cf/meta/llama-3.3-8b-instruct",
{ prompt, max_tokens: 512 }
) as { response: string };
return {
answer: result.response.trim(),
sources: [...new Set(sources)], // 重複排除
confidence: averageScore,
};
}
/**
* ドキュメントをベクトル DB に追加する
*/
async ingest(docs: { id: string; text: string; source: string }[]): Promise<number> {
const vectors = await Promise.all(
docs.map(async (doc) => ({
id: doc.id,
values: await this.embed(doc.text),
metadata: { text: doc.text, source: doc.source },
}))
);
await this.vectorize.upsert(vectors);
return vectors.length;
}
}
// RAG エンドポイントを index.ts に追加
// app.post("/api/rag", async (c) => {
// const { query } = await c.req.json();
// const rag = new RagPipeline(c.env.AI, c.env.VECTORIZE);
// const result = await rag.query(query);
// return c.json(result);
// });
//
// 期待するレスポンス例:
// {"answer": "Cloudflare Workers AI は...", "sources": ["doc1.pdf"], "confidence": 0.87}Antigravity エージェントを使った効率的な開発フロー
Antigravity の Manager Surface(複数エージェント連携)を使うと、開発フローをさらに高速化できます。
推奨開発フロー
1. Antigravity Agent モード(Cmd+I)で初期コード生成
└─ 「Hono × Workers AI のストリーミングエンドポイントを作って」
2. Plan モードで設計レビュー
└─ 「このコードのセキュリティリスクと最適化ポイントを教えて」
3. ターミナルから直接デプロイ
└─ wrangler deploy --env production
4. Antigravity でエラーログを解析
└─ Cloudflare Dashboard のログを貼り付け → 原因特定
本番デプロイコマンド
# ローカル開発サーバー(Hot Reload 対応)
npx wrangler dev --local
# ステージング環境へデプロイ
npx wrangler deploy --env staging
# 本番環境へデプロイ
npx wrangler deploy --env production
# デプロイ後の動作確認
curl -X POST https://edge-ai-api.your-subdomain.workers.dev/api/generate \
-H "Content-Type: application/json" \
-d '{"prompt": "TypeScript の利点を 3 点挙げてください"}'
# 期待する出力例:
# {
# "result": "1. 静的型付けによるバグの早期発見\n2. 優れた IDE サポート...",
# "cached": false
# }コスト最適化と本番監視
IU(Inference Unit)の節約戦略
| 施策 | 削減効果 | 実装難度 |
|---|---|---|
| KV キャッシュ(同一クエリ) | 最大 80% | 低 |
| プロンプト圧縮(短縮化) | 20〜40% | 中 |
| 軽量モデルへのルーティング | 30〜50% | 中 |
| ベクトル検索による RAG | 変動 | 高 |
// コスト最適化: クエリの複雑度に応じてモデルを自動選択する
function selectModel(prompt: string): string {
const tokenEstimate = prompt.split(/\s+/).length;
if (tokenEstimate < 50) {
// 短いクエリには軽量モデル(低コスト)
return "@cf/meta/llama-3.3-8b-instruct";
} else if (tokenEstimate < 200) {
// 中程度のクエリ
return "@cf/mistral/mistral-7b-instruct-v0.2";
} else {
// 長い複雑なクエリには高性能モデル
return "@cf/meta/llama-3.3-70b-instruct-fp8-fast";
}
}全体を振り返って
Antigravity × Cloudflare Workers AI の組み合わせで実現できることをまとめます。
- 超低レイテンシ AI API:エッジ推論で世界中のユーザーに高速レスポンス
- RAG パイプライン:Vectorize と組み合わせて自社ナレッジを活用
- コスト効率:KV キャッシュとモデルルーティングで IU 消費を最小化
- Antigravity エージェント活用:Plan モードと Manager Surface で設計からデプロイまで高速化
デプロイ基盤について詳しくは Cloudflare Workers デプロイガイド を参照してください。エージェント連携の詳細は Antigravity Agent Manager Framework と Cloudflare MCP サーバー活用ガイド も合わせてご覧ください。