Cloudflare Agents / Workers AI - エッジでAIエージェントを実行する新時代

中級 | 10分 で読める | 2026.04.24

公式ドキュメント

この記事の要点

• CloudflareのエッジネットワークでLLM推論を実行し、低レイテンシを実現
• Workers AIでLlama・Mistral等のオープンソースモデルをサーバーレス実行
• Cloudflare Agentsで複雑なAIワークフローをエッジで自動化

AI/LLMアプリケーションの課題は、推論サーバーのコスト・レイテンシ・スケーラビリティです。Cloudflare AgentsとWorkers AIは、エッジネットワーク上でLLM推論・エージェント実行をサーバーレス提供し、グローバルなAIアプリケーションを低コストで構築できます。本記事では、Cloudflare Agents/Workers AIの特徴と実践的な利用方法を解説します。

Cloudflare Workers AIとは

Cloudflare Workers AIは、Cloudflareのエッジネットワーク上でLLM推論・画像生成・音声認識等のAIモデルを実行するサーバーレスプラットフォームです。開発者はインフラ管理なしに、APIを通じてAI機能を利用できます。

主要な特徴

  • エッジ実行: 世界300都市以上のデータセンターでAI推論を実行
  • 低レイテンシ: ユーザーに最も近いエッジでモデルを実行し、応答時間を最小化
  • サーバーレス: インフラ管理・GPU設定不要、従量課金制
  • 豊富なモデル: Llama・Mistral・Stable Diffusion等のオープンソースモデルを標準装備
  • Workers統合: Cloudflare Workersと統合し、エッジでフルスタックAIアプリを構築
  • ストリーミング: LLM出力をリアルタイムでストリーミング

ポイント: Workers AIは、AWS Lambda等のサーバーレスプラットフォームと異なり、グローバルなエッジネットワークでAIモデルを実行するため、レイテンシが大幅に低減されます。

Cloudflare Agentsとは

Cloudflare Agentsは、Workers AI上でLLMエージェントを実行するフレームワークです。複数のツール(API呼び出し・データベースクエリ・外部サービス連携等)を組み合わせて、複雑なAIワークフローをエッジで自動化できます。

主要な特徴

  • ツール統合: 外部API・Cloudflare D1・KV・R2等と連携
  • ReAct/Function Callingサポート: LLMが自律的にツールを選択・実行
  • ステートフル実行: Durable Objectsで会話履歴・コンテキストを保持
  • 並列実行: 複数のエージェントタスクを同時実行
  • Webフレームワーク統合: Hono・Next.js等と組み合わせてフルスタックアプリを構築

ポイント: Cloudflare Agentsは、LangChain等のエージェントフレームワークと似た機能をエッジで提供します。サーバーを立てずにエージェントアプリを構築できます。

アーキテクチャ

flowchart TB
    subgraph Client["クライアント"]
        A1["Webブラウザ/API"]
    end

    subgraph Edge["Cloudflare Edge (300+ Cities)"]
        B1["Cloudflare Workers"]
        B2["Workers AI<br/>(LLM推論)"]
        B3["Cloudflare Agents<br/>(エージェント実行)"]
        B4["D1 (SQLite)"]
        B5["KV (Key-Value)"]
        B6["R2 (Object Storage)"]
    end

    subgraph External["外部サービス"]
        C1["API/データソース"]
    end

    A1 --> B1
    B1 --> B2
    B1 --> B3
    B3 --> B2
    B3 --> B4
    B3 --> B5
    B3 --> B6
    B3 --> C1
  • Cloudflare Workers: HTTPリクエストを受け取り、エージェントを起動
  • Workers AI: LLM推論を実行(Llama・Mistral等)
  • Cloudflare Agents: ツールを呼び出し、複雑なワークフローを実行
  • D1/KV/R2: データベース・キャッシュ・ストレージとしてエッジで利用

インストールとセットアップ

Wranglerのインストール

# Wrangler(Cloudflare CLIツール)をインストール
npm install -g wrangler

# ログイン
wrangler login

プロジェクト作成

# Workers AIプロジェクトを作成
npm create cloudflare@latest my-ai-app -- --template workers-ai

cd my-ai-app

# 依存関係をインストール
npm install

実践メモ: Wranglerは設定ファイル(wrangler.toml)を自動生成し、デプロイ・ローカル開発を簡素化します。

Workers AIでLLM推論

基本的なLLM推論

// src/index.ts
export interface Env {
  AI: any;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    // Workers AIでLlama 2を実行
    const response = await env.AI.run('@cf/meta/llama-2-7b-chat-int8', {
      prompt: 'Explain quantum computing in simple terms',
    });

    return new Response(JSON.stringify(response), {
      headers: { 'Content-Type': 'application/json' },
    });
  },
};
# ローカルで実行
npm run dev

# デプロイ
npm run deploy

ポイント: env.AI.run() でモデルを指定するだけで、エッジで推論が実行されます。GPU設定・Dockerイメージ等は不要です。

ストリーミングレスポンス

// ストリーミングでLLM出力を返す
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const stream = await env.AI.run(
      '@cf/meta/llama-2-7b-chat-int8',
      {
        prompt: 'Write a short story about a robot',
        stream: true,
      }
    );

    return new Response(stream, {
      headers: {
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
      },
    });
  },
};

ユーザーは生成されたテキストをリアルタイムで受け取れます。

複数プロンプトのバッチ処理

// 複数プロンプトを並列実行
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const prompts = [
      'Summarize the latest AI trends',
      'Explain Rust programming',
      'Describe quantum computing',
    ];

    const results = await Promise.all(
      prompts.map((prompt) =>
        env.AI.run('@cf/meta/llama-2-7b-chat-int8', { prompt })
      )
    );

    return new Response(JSON.stringify(results), {
      headers: { 'Content-Type': 'application/json' },
    });
  },
};

実践メモ: Workers AIは並列実行に最適化されており、複数のプロンプトを同時処理してもレイテンシが増加しません。

Cloudflare Agentsでエージェント実行

基本的なエージェント

// エージェントにツールを追加
import { Ai } from '@cloudflare/ai';

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const ai = new Ai(env.AI);

    // ツール定義
    const tools = [
      {
        name: 'get_weather',
        description: 'Get current weather for a city',
        parameters: {
          type: 'object',
          properties: {
            city: { type: 'string', description: 'City name' },
          },
          required: ['city'],
        },
      },
    ];

    // エージェント実行
    const response = await ai.run('@cf/meta/llama-2-7b-chat-int8', {
      messages: [
        {
          role: 'user',
          content: 'What is the weather in Tokyo?',
        },
      ],
      tools,
    });

    // ツール呼び出しを処理
    if (response.tool_calls) {
      const toolCall = response.tool_calls[0];
      if (toolCall.function.name === 'get_weather') {
        const args = JSON.parse(toolCall.function.arguments);
        const weather = await fetchWeather(args.city);
        
        // 結果をLLMに返す
        const finalResponse = await ai.run('@cf/meta/llama-2-7b-chat-int8', {
          messages: [
            {
              role: 'user',
              content: 'What is the weather in Tokyo?',
            },
            {
              role: 'assistant',
              tool_calls: response.tool_calls,
            },
            {
              role: 'tool',
              content: JSON.stringify(weather),
            },
          ],
        });

        return new Response(finalResponse.response);
      }
    }

    return new Response(response.response);
  },
};

async function fetchWeather(city: string) {
  // 天気APIを呼び出し(ダミー)
  return { city, temperature: 22, condition: 'sunny' };
}

D1データベースとの統合

// D1(SQLite)とエージェントを統合
export interface Env {
  AI: any;
  DB: D1Database;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const ai = new Ai(env.AI);

    const tools = [
      {
        name: 'query_users',
        description: 'Query users from database',
        parameters: {
          type: 'object',
          properties: {
            name: { type: 'string', description: 'User name' },
          },
        },
      },
    ];

    const response = await ai.run('@cf/meta/llama-2-7b-chat-int8', {
      messages: [
        {
          role: 'user',
          content: 'Find user Alice in the database',
        },
      ],
      tools,
    });

    if (response.tool_calls) {
      const toolCall = response.tool_calls[0];
      if (toolCall.function.name === 'query_users') {
        const args = JSON.parse(toolCall.function.arguments);
        
        // D1でクエリ実行
        const result = await env.DB.prepare(
          'SELECT * FROM users WHERE name = ?'
        ).bind(args.name).all();

        return new Response(JSON.stringify(result.results));
      }
    }

    return new Response(response.response);
  },
};

注意: エージェントが実行するツールは、信頼できる入力のみを受け付けるようにしてください。SQLインジェクション等のセキュリティリスクに注意が必要です。

利用可能なモデル

Workers AIは、以下のオープンソースモデルを標準提供しています。

LLM(テキスト生成)

  • @cf/meta/llama-2-7b-chat-int8: Llama 2 7B(チャット最適化)
  • @cf/mistral/mistral-7b-instruct-v0.1: Mistral 7B Instruct
  • @cf/meta/llama-3-8b-instruct: Llama 3 8B Instruct

画像生成

  • @cf/stabilityai/stable-diffusion-xl-base-1.0: Stable Diffusion XL

音声認識

  • @cf/openai/whisper: Whisper(音声→テキスト)

埋め込み

  • @cf/baai/bge-base-en-v1.5: BGE Embedding

ポイント: モデルは定期的に追加されています。最新のモデルリストは公式ドキュメントで確認してください。

Workers AIとOpenAI APIの比較

項目Workers AIOpenAI API
実行場所CloudflareエッジOpenAI中央サーバー
レイテンシ低い(エッジ実行)高い(地理的距離に依存)
モデルオープンソースモデルGPT-4・GPT-3.5等
料金従量課金(低価格)従量課金(高価格)
カスタマイズ限定的Fine-tuning可能
プライバシーCloudflareのみOpenAIに送信

低レイテンシ・低コストを重視するならWorkers AI、最高精度のモデルを使うならOpenAI APIを選択します。

Workers AIとAWS Bedrockの比較

項目Workers AIAWS Bedrock
実行場所エッジリージョン
セットアップシンプル複雑
モデルオープンソース中心Claude・Llama等豊富
統合Workers統合AWSサービス統合
スケーリング自動自動

Cloudflareエコシステムを使うならWorkers AI、AWSエコシステムならBedrockを選択します。

実践的なユースケース

1. チャットボット

// D1でチャット履歴を保存
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const { message, userId } = await request.json();

    // 過去のメッセージを取得
    const history = await env.DB.prepare(
      'SELECT role, content FROM messages WHERE user_id = ? ORDER BY created_at DESC LIMIT 10'
    ).bind(userId).all();

    const messages = [
      ...history.results.reverse(),
      { role: 'user', content: message },
    ];

    // LLMで応答生成
    const response = await env.AI.run('@cf/meta/llama-2-7b-chat-int8', {
      messages,
    });

    // メッセージを保存
    await env.DB.prepare(
      'INSERT INTO messages (user_id, role, content) VALUES (?, ?, ?)'
    ).bind(userId, 'user', message).run();

    await env.DB.prepare(
      'INSERT INTO messages (user_id, role, content) VALUES (?, ?, ?)'
    ).bind(userId, 'assistant', response.response).run();

    return new Response(response.response);
  },
};

2. 画像生成API

// Stable Diffusionで画像生成
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const { prompt } = await request.json();

    const image = await env.AI.run(
      '@cf/stabilityai/stable-diffusion-xl-base-1.0',
      {
        prompt,
      }
    );

    return new Response(image, {
      headers: { 'Content-Type': 'image/png' },
    });
  },
};

3. RAG(Retrieval-Augmented Generation)

// Vectorizeでベクトル検索、LLMで回答生成
export interface Env {
  AI: any;
  VECTORIZE: VectorizeIndex;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const { query } = await request.json();

    // クエリを埋め込みベクトルに変換
    const queryVector = await env.AI.run('@cf/baai/bge-base-en-v1.5', {
      text: query,
    });

    // ベクトル検索で関連ドキュメントを取得
    const results = await env.VECTORIZE.query(queryVector.data[0], {
      topK: 3,
    });

    const context = results.matches.map((m) => m.metadata.text).join('\n');

    // LLMで回答生成
    const response = await env.AI.run('@cf/meta/llama-2-7b-chat-int8', {
      messages: [
        {
          role: 'system',
          content: `Answer the question based on the following context:\n${context}`,
        },
        {
          role: 'user',
          content: query,
        },
      ],
    });

    return new Response(response.response);
  },
};

詳細なRAG実装については、RAG 2025 - 最新の検索拡張生成技術を参照してください。

まとめ

Cloudflare AgentsとWorkers AIは、エッジネットワーク上でLLM推論・エージェント実行をサーバーレス提供し、低レイテンシ・低コスト・グローバル配信を実現します。Cloudflare Workers統合により、フルスタックAIアプリをエッジで構築できます。

Cloudflare Agents/Workers AIを選ぶべきケース

  • グローバルにユーザーがいるアプリで低レイテンシを実現したい
  • サーバーレスでAI機能を提供したい
  • Cloudflareエコシステム(Workers・D1・KV・R2)を使っている
  • オープンソースモデルで十分な精度が得られる
  • 従量課金で低コストにAIアプリを運用したい

CloudflareはエッジAIに積極的に投資しており、Workers AIのモデル・機能は今後さらに拡充される予定です。エッジでのAI実行は、次世代のWebアプリケーションの標準になると予想されます。

関連記事

この技術を体系的に学びたいですか?

未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。

メールで無料相談する
← 一覧に戻る