日曜日, 9月 7, 2025
日曜日, 9月 7, 2025
- Advertisment -
ホームニューステックニュースCloudflare Agentsコトハジメ

Cloudflare Agentsコトハジメ



https://agents.cloudflare.com/

最近自作コーディングエージェントShaftの動作確認でWorkers AIを使っており、せっかくなのでCloudflareだけで完結するAIエージェントも作ろうと思い立ったのでCloudflare Agentsについて色々調べていたのですが、日本語・英語問わず内部の詳しい資料が全くなかったので、広範囲にわたり調べた内容をまとめることにしました。

今回はちゃんとTool Callingをやっていきます。

APIだけ知りたい人向けのCloudflare Agents Deep Diveはこちら。

https://zenn.dev/tkithrta/scraps/3c63e71e4cdbc2

まずCloudflare Agentsの開発にはAgent SDKが必要で、このAgent SDKを使いAIエージェントが呼び出すツールを定義したり、ReactでチャットUIを追加したものがChat Agent Starter Kitです。

https://github.com/cloudflare/agents

https://github.com/cloudflare/agents-starter

Cloudflare Agentsのドキュメントと併せて、この2つのリポジトリをCloneして完全に理解すればよさそうですが、ReactやらMCPやらくっついているので、それらを使わない最小限の要素から理解を進めていく必要があります。

前提として、Cloudflare AgentsはCloudflare Workersに依存しているのですが、現在のCloudflare Workersは何ができるのかを理解する必要があります。

ただRuntime APIやBindingを読み進めていっても、ありとあらゆることができることしか分からず困ってしまいます。

https://developers.cloudflare.com/workers/runtime-apis/

https://developers.cloudflare.com/workers/runtime-apis/bindings/

2025/09/08現在、cloudflare:workersモジュールのエントリポイントとして以下の3つが用意されていますから、まずはここから始めましょう。

  1. Cloudflare Workers (WorkerEntrypoint)
  2. Durable Objects (DurableObject)
  3. Cloudflare Workflows (WorkflowEntrypoint)

実際、Agent SDKが発表された数ヶ月後の2025/04/07に、Durable Objectsに無料枠が追加されたり、Cloudflare WorkflowsがGAになったことから、Cloudflare Agentsの利用においても非常に重要であることが分かります。

https://blog.cloudflare.com/ja-jp/building-ai-agents-with-mcp-authn-authz-and-durable-objects/

まずはAgent SDKの以下3つのファイルを見ていきましょう。

https://github.com/cloudflare/agents/blob/main/packages/agents/src/index.ts

https://github.com/cloudflare/agents/blob/main/packages/agents/src/client.ts

https://github.com/cloudflare/agents/blob/main/packages/agents/src/ai-chat-agent.ts

これらのファイルはパッケージとしてインポートすることができ、主に以下のクラスを使用することができます。

  1. Agent (agentsからインポート)
  2. AgentClient (agents/clientからインポート)
  3. AIChatAgent (agents/ai-chat-agentからインポート)

Agent

AgentはAIエージェントを実装するための基本となる抽象クラスで、このクラスを継承して独自のAIエージェントを作成できます。
また、AgentはPartyServerを継承していて、このPartyServerはDurable Objectsを用いたリアルタイムアプリケーション構築のためのコアライブラリです。
Cloudflareがメンテナンスしています。

https://www.npmjs.com/package/partyserver

通常のプロパティとメソッドの他にライフサイクルメソッドというものがあって、必要に応じてサブクラスでオーバーライドしてカスタムロジックを実装できます。

ルーティング関数routeAgentRequest()とヘルパー関数getAgentByName()がありますが、この2つもPartyServerのユーティリティメソッドをAgent用にラップしたものです。

また、@callable(metadata?: CallableMetadata)という謎のデコレータがありますが、これはDurable ObjectsのWebSocket接続を通じて、AgentClientのcall()メソッドと一緒に使います。

他にもタスクスケジューリング、キューイング、Eメール処理、MCPで使える様々なAPIがありますが、長くなるので今回は解説しません。

AgentClient

AgentClientはPartySocketを継承しています。Web標準のWebSocket APIクラスと互換性があり、再接続、バッファリング、耐障害性などの機能を備えています。

https://www.npmjs.com/package/partysocket

ただAgentClientはAgentサーバーへのWebSocket接続を管理するためにあるので、WebSocketを使わずにAgentサーバーへHTTPリクエストを送信したい場合はagentFetch()関数を使います。

ちなみにagents/reactuseAgent()フックはpartysocket/reactusePartySocket()フックを使っているので、Agentサーバーとの通信ではWebSocket接続を行っています。

AIChatAgent

AIChatAgentはAgentを継承した、AIチャット機能を持つAIエージェントの基本クラスです。

多くの例ではagents/reactuseAgent()フックやagents/ai-reactuseAgentChat()フックと一緒に出てくることが多いですが、状態管理をUIに反映できれば別にReactを使わなくてもいいみたいです。

また、Vercel AI SDKと互換性を持っているため、Vercel AI SDKのAPIとの相性もいいです。

OpenAI SDK

ではVercel AI SDKがなければAgent SDKは使えないのかと思ってしまうのですが、どうやらそんなことはないようです。
Agent SDKのリポジトリにはOpenAI SDKの例があるので、これを確認してみましょう。

https://github.com/cloudflare/agents/blob/main/openai-sdk/basic/src/server.ts

AIChatAgentを使わずに継承したAgentクラス内でOpenAI SDKのAgentクラスを呼び出せば良さそうです。
ただクラス名が衝突してしまうので、この例のようにインポート時にCFAgentクラスに名前変更を行う必要がありますし、AIChatAgentで行っているチャット履歴管理は別途実装しなければいけないようです。

Hono

Agent SDKのリポジトリではagentsパッケージだけではなくhono-agentsパッケージも配布しています。

https://github.com/cloudflare/agents/blob/main/packages/hono-agents/src/index.ts

agentsパッケージのrouteAgentRequest()関数をラップしているだけなので、AIエージェントの実装は別途行う必要がありますが、ミドルウェアを追加するだけでより直感的にAIエージェントのルーティングが分かるようになりますし、別のHonoミドルウェアと組み合わせることもできます。

それではChat Agent Starter Kitの以下3つのファイルを見ていきましょう。

https://github.com/cloudflare/agents-starter/blob/main/src/server.ts

https://github.com/cloudflare/agents-starter/blob/main/src/tools.ts

https://github.com/cloudflare/agents-starter/blob/main/src/utils.ts

これらのファイルは主に以下の処理を行っています。

  1. Agent SDKのAIChatAgentを継承したAIエージェントの実装 (server.ts)
  2. Agent SDKのrouteAgentRequest()関数でルーティング (server.ts)
  3. getWeatherInformation()関数やgetLocalTime()関数といったAIエージェントが呼び出すツールを定義 (tools.ts)
  4. processToolCalls()関数で確認が必要なツールの処理 (utils.ts)

getWeatherInformation()関数ですが、以下コメントが記載されていることが分かります。

execute()関数が定義されているツールは、AIがそのツールを呼び出した際に自動的に実行されますが、execute()関数が省略されているツールは、人間による確認が必要なツールとして扱われます。

このヒューマン・イン・ザ・ループ (HITL) の確認はprocessToolCalls()関数で行っており、HITL確認が必要なツール呼び出しの状態を永続的に保持できるようになっています。

AIChatAgent(Agent)を継承することで、AIエージェントが休止したり接続が切れたりしても、Durable Objectsで状態を継続できるようにしています。

もちろんチャット履歴、スケジュール、MCPサーバー接続情報などの情報もDurable Objectsに保存されるため、AIエージェントがオフラインになっても失われることはありません。

また、ありとあらゆるところでVercel AI SDKとZodが使われていることが分かりますね。

Vercel AI SDKで@ai-sdk/anthropic@ai-sdk/googleをインポートすれば簡単にプロバイダやモデルを変更できますし、README.mdに記載されている通りworkers-ai-providerをインポートしてBindingの設定を行えばWorkers AIを使うこともできます。

https://www.cloudflare.com/ja-jp/developer-platform/products/workers-ai/

app.tsxをはじめとした残りのファイルはReactでチャットUIを追加しているだけなので特に解説しません。

  • Cloudflare AgentsはCloudflare Workers, Durable Objects, Cloudflare Workflowsを使い倒し、簡単にAIエージェントを開発できるツール
  • Agent, AgentClient, AIChatAgentを継承したり、シンプルな関数を使うことで簡単に実装できる
  • Durable ObjectsやWebSocketをより便利に扱える、PartyServerとPartySocketについても学ぶことができる
  • Cloudflare WorkersやPartyServerでも使えるHonoとの相性もいい
  • Vercel AI SDKとOpenAI SDKで学んだ内容がそのまま活かせる
  • Workers AIを使えば、Cloudflareアカウントの無料枠で完結する

https://zenn.dev/yusukebe/articles/f1d5aa529ba873

https://zenn.dev/yusukebe/articles/ab5501e53735f9

https://blog.cloudflare.com/build-ai-agents-on-cloudflare/

https://blog.cloudflare.com/building-agents-with-openai-and-cloudflares-agents-sdk/

https://speakerdeck.com/syumai/introduction-to-cloudflare-ai-chat-agent-starter-kit

https://speakerdeck.com/yusukebe/aishi-dai-nouihadokohexing-ku



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -