Cloudflare Agents Deep Dive

免責
Cloudflare Agentsコトハジメ用にGoogle AI StudioのGemini 2.5 Proで生成したAPIドキュメントです。
ソースコードを参照しているため、ハルシネーションは少ないと思いますが、より正しい情報を確認したい場合は公式リファレンスを確認してください。
agents
概要 (Overview)
このコードは、Cloudflare Workers上で動作するステートフルなエージェントを構築するためのフレームワークです。partyserver
ライブラリをベースにしており、Durable Objectsの能力を活用して、永続的な状態、リアルタイム通信(WebSocket)、タスクスケジューリング、キューイング、Eメール処理などの機能を提供します。
主な機能は以下の通りです。
-
状態管理:
state
プロパティを通じて、エージェントの状態を永続化します。 -
RPC (Remote Procedure Call):
@callable
デコレータを使用して、クライアントから安全に呼び出せるメソッドを定義できます。ストリーミング応答もサポートします。 -
タスクスケジューリング:
schedule()
メソッドで、特定の日時、遅延時間、またはcron式に基づいてタスクを実行できます。 -
キューイング:
queue()
メソッドで、先入れ先出し(FIFO)で非同期タスクを処理できます。 -
Eメール処理:
routeAgentEmail
関数とonEmail
メソッドで、エージェントへのEメールのルーティングと処理を実装できます。 -
MCP (Model Context Protocol) 統合:
addMcpServer
などのメソッドを通じて、外部のAIモデルやツールと連携できます。
主要なクラス (Main Classes)
Agent<Env, State>
エージェントを実装するための基本となる抽象クラスです。このクラスを継承して独自のエージェントを作成します。
-
Env
: エージェントがアクセスできる環境変数やバインディングの型(wrangler.toml
で定義)。 -
State
: エージェントが保持する状態の型。
プロパティ (Properties)
-
state: State
- エージェントの現在の状態を取得します。
- このプロパティに初めてアクセスしたとき、Durable Object Storageから状態を読み込みます。データがない場合は
initialState
の値を使用します。 - 状態を変更するには
setState()
メソッドを使用します。
-
initialState: State
- エージェントが初めて作成されたとき、または状態がまだ保存されていないときに使用される初期状態。
- デフォルトの状態を提供したい場合に、サブクラスでこのプロパティをオーバーライドします。
-
mcp: MCPClientManager
- Model Context Protocol (MCP) サーバーとの接続を管理するためのクライアントマネージャー。
-
observability?: Observability
- エージェントのイベント(接続、状態更新、RPC呼び出しなど)を監視・ログ記録するための実装。
-
static options
- エージェントの動作を設定する静的オプション。
-
hibernate: boolean
:true
(デフォルト)の場合、エージェントが非アクティブなときに休止状態になり、メモリとCPUを節約します。
メソッド (Methods)
-
setState(state: State): void
- エージェントの状態を更新し、永続化します。
- 状態が更新されると、接続されているすべてのクライアントに新しい状態がブロードキャストされます。
- このメソッドが呼び出されると、
onStateUpdate()
ライフサイクルメソッドがトリガーされます。
-
sql<T>(query: TemplateStringsArray, ...values: any[]): T[]
- エージェントに関連付けられたDurable ObjectのSQLiteデータベースに対してSQLクエリを実行します。
- SQLインジェクションを防ぐために、テンプレートリテラル構文を使用します。
-
例:
this.sql<User>
SELECT * FROM users WHERE id = ${userId}``
-
schedule<T>(when: Date | string | number, callback: keyof this, payload?: T): Promise<Schedule<T>>
- 将来実行されるタスクをスケジュールします。
-
when
:-
Date
: 特定の日時に実行。 -
number
: 指定した秒数後に実行。 -
string
: cron式に基づいて定期的に実行。
-
-
callback
: 実行するメソッドの名前(文字列)。 -
payload
: コールバックメソッドに渡すデータ。 -
戻り値: スケジュールされたタスクを表す
Schedule
オブジェクト。
-
cancelSchedule(id: string): Promise<boolean>
-
schedule()
で作成されたタスクをIDでキャンセルします。
-
-
queue<T>(callback: keyof this, payload: T): Promise<string>
- 非同期タスクをキューに追加します。タスクは追加された順に処理されます。
-
callback
: 実行するメソッドの名前(文字列)。 -
payload
: コールバックメソッドに渡すデータ。 - 戻り値: キューに追加されたタスクのID。
-
dequeue(id: string): Promise<void>
- IDで指定されたタスクをキューから削除します。通常、タスクの処理が完了した後に内部的に呼び出されます。
-
addMcpServer(serverName: string, url: string, ...): Promise<{ id: string; authUrl: string | undefined }>
- 新しいMCPサーバーに接続します。OAuth認証が必要な場合、認証用のURL (
authUrl
) を返します。
- 新しいMCPサーバーに接続します。OAuth認証が必要な場合、認証用のURL (
-
removeMcpServer(id: string): Promise<void>
- IDで指定されたMCPサーバーとの接続を解除します。
-
getMcpServers(): MCPServersState
- 現在接続されているすべてのMCPサーバーの状態、利用可能なツール、プロンプト、リソースのリストを取得します。
-
destroy(): Promise<void>
- エージェントを完全に破棄します。すべての状態、スケジュール、キュー、およびその他のデータが削除されます。
-
replyToEmail(email: AgentEmail, options: { ... }): Promise<void>
-
onEmail
で受信したEメールに対して返信を送信します。
-
ライフサイクルメソッド (Lifecycle Methods)
これらはAgent
クラスで定義されており、必要に応じてサブクラスでオーバーライドしてカスタムロジックを実装します。
-
onConnect(connection: Connection, ctx: ConnectionContext): void | Promise<void>
- クライアントがWebSocketで接続したときに呼び出されます。
-
onMessage(connection: Connection, message: WSMessage): void | Promise<void>
- 接続されたクライアントからメッセージを受信したときに呼び出されます。RPCや状態更新メッセージはフレームワークによって自動的に処理されるため、カスタムメッセージを処理する場合にオーバーライドします。
-
onRequest(request: Request): Response | Promise<Response>
- エージェントに対してHTTPリクエストがあった場合に呼び出されます。(例:
https://.../agents/my-agent/my-agent-id
)
- エージェントに対してHTTPリクエストがあった場合に呼び出されます。(例:
-
onStart(): void | Promise<void>
- エージェントが(休止状態から復帰して)起動したときに一度だけ呼び出されます。
-
onStateUpdate(state: State | undefined, source: Connection | "server"): void
-
setState()
が呼び出された後、またはクライアントから状態更新メッセージを受信した後にトリガーされます。 -
source
: 状態変更の発生源(サーバーサイドのsetState
呼び出しなら"server"
、クライアントからの更新ならConnection
オブジェクト)。
-
-
onEmail(email: AgentEmail): Promise<void>
-
routeAgentEmail
によってこのエージェントにEメールがルーティングされたときに呼び出されます。このメソッドを実装してEメールを処理します。
-
-
onError(error: unknown): void | Promise<void>
-
onError(connection: Connection, error: unknown): void | Promise<void>
- エージェント内でエラーが発生したときに呼び出されます。WebSocket接続に関連するエラーと、それ以外のサーバーエラーでオーバーロードされています。
デコレーター (Decorators)
@callable(metadata?: CallableMetadata)
メソッドをクライアントからRPC経由で呼び出し可能としてマークします。セキュリティのため、このデコレータが付与されていないメソッドはクライアントから呼び出せません。
-
metadata
: メソッドに関する追加情報。-
description?: string
: メソッドの説明。 -
streaming?: boolean
:true
に設定すると、メソッドが複数の応答をストリーミングで返すことを示します。この場合、メソッドの第一引数としてStreamingResponse
オブジェクトを受け取ります。
-
例:
class MyAgent extends Agent<Env, State> {
@callable({ description: "Adds two numbers" })
add(a: number, b: number): number {
return a + b;
}
@callable({ streaming: true })
async countTo(stream: StreamingResponse, limit: number) {
for (let i = 1; i <= limit; i++) {
await new Promise(res => setTimeout(res, 500));
stream.send(i); // 中間結果を送信
}
stream.end("Done!"); // ストリームを終了
}
}
@unstable_callable(metadata?: CallableMetadata)
@callable
の古い名前です。非推奨であり、将来のバージョンで削除される予定です。@callable
を使用してください。
型定義 (Type Definitions)
RPCRequest
/ RPCResponse
クライアントとサーバー間のRPC通信で使用されるメッセージの型定義。
StateUpdateMessage
クライアントからエージェントの状態を更新するために送信されるメッセージの型定義。
CallableMetadata
@callable
デコレータに渡すメタデータの型。
QueueItem<T>
queue()
で作成されるタスクの内部表現。
Schedule<T>
schedule()
で作成されるタスクの表現。type
プロパティ('scheduled'
, 'delayed'
, 'cron'
)によってタスクの種類を示します。
MCPServersState
/ MCPServer
MCPサーバーの接続状態や能力に関する情報を格納する型。
AgentNamespace<Agentic>
特定のエージェントクラスに対応するDurable Objectネームスペースの型。
AgentContext
Durable Objectのstate
オブジェクトの型エイリアス。
AgentEmail
onEmail
メソッドに渡される、シリアライズ可能なEメールオブジェクト。元のEメールのヘッダーや本文へのアクセス、返信・転送機能を提供します。
ルーティング関数 (Routing Functions)
routeAgentRequest<Env>(request: Request, env: Env, options?: AgentOptions<Env>): Promise<Response | undefined>
受信したHTTPリクエストを適切なエージェントにルーティングします。ワーカーのエントリーポイント(fetch
ハンドラ)で使用します。
-
request
: 受信したRequest
オブジェクト。 -
env
: ワーカーの環境変数・バインディング。 -
options
:-
prefix?: string
: URLパスのプレフィックス(デフォルトは"agents"
)。 -
cors?: boolean | HeadersInit
: CORSヘッダーを自動的に付与するかどうかを設定します。
-
routeAgentEmail<Env>(email: ForwardableEmailMessage, env: Env, options: EmailRoutingOptions<Env>): Promise<void>
受信したEメールを適切なエージェントにルーティングします。ワーカーのemail
ハンドラで使用します。
-
email
: 受信したForwardableEmailMessage
オブジェクト。 -
env
: ワーカーの環境変数・バインディング。 -
options
:-
resolver: EmailResolver<Env>
: Eメールをどのエージェント(名前とID)にルーティングするかを決定する関数。
-
ヘルパー関数 (Helper Functions)
getCurrentAgent<T>(): { agent: T, ... }
エージェントのメソッド内から、現在のエージェントインスタンス、リクエスト、接続コンテキストを取得するために使用します。フレームワークがメソッドを自動的にラップするため、通常は直接呼び出す必要はありません。
getAgentByName<Env, T>(namespace: AgentNamespace<T>, name: string, ...): Promise<DurableObjectStub<T>>
エージェントのDurable Objectネームスペースとインスタンス名(ID)から、そのエージェントのスタブを取得します。これにより、他の場所(別のエージェントやワーカーなど)から特定のエージェントと対話できます。
Eメールリゾルバ (Email Resolvers)
routeAgentEmail
のresolver
オプションに渡すための、事前定義されたリゾルバ関数。
-
createHeaderBasedEmailResolver<Env>()
:
Eメールヘッダー(Message-ID
,References
,X-Agent-Name
/X-Agent-ID
)を解析して、返信メールなどを正しいエージェントにルーティングします。 -
createAddressBasedEmailResolver<Env>(defaultAgentName: string)
:
Eメールの宛先アドレスに基づいてルーティングします。-
agent-name+agent-id@domain.com
->agentName: "agent-name"
,agentId: "agent-id"
-
agent-id@domain.com
->agentName: defaultAgentName
,agentId: "agent-id"
-
-
createCatchAllEmailResolver<Env>(agentName: string, agentId: string)
:
すべてのEメールを、指定された単一のエージェントにルーティングします。
補助的なクラス (Auxiliary Classes)
StreamingResponse
ストリーミングをサポートする@callable
メソッドに渡されるヘルパークラス。
メソッド (Methods)
-
send(chunk: unknown): void
- クライアントにデータのかたまり(チャンク)を送信します。ストリームの途中で複数回呼び出せます。
-
end(finalChunk?: unknown): void
- ストリームを終了します。任意で最後のデータを送信できます。このメソッドを呼び出した後は
send()
を呼び出すことはできません。
- ストリームを終了します。任意で最後のデータを送信できます。このメソッドを呼び出した後は
agents/client
概要 (Overview)
このコードは、前のリファレンスで解説したAgent
サーバーと対話するための、クライアントサイド(ブラウザやNode.js環境など)のライブラリです。partysocket
をベースにしており、エージェントへのWebSocket接続、状態の同期、RPC(Remote Procedure Call)の実行を簡単に行うための機能を提供します。
主な機能は以下の通りです。
-
WebSocket接続:
AgentClient
クラスを使って、特定のAgent
インスタンスへの永続的な接続を確立します。 -
状態同期: サーバーからプッシュされた状態の更新を
onStateUpdate
コールバックで受信したり、クライアントからsetState
メソッドで状態を更新したりできます。 -
RPC実行:
call
メソッドを使って、サーバー側のAgent
で@callable
として定義されたメソッドを安全に呼び出せます。通常のRPCとストリーミングRPCの両方をサポートします。 -
HTTPリクエスト:
agentFetch
関数を使って、WebSocket接続を確立せずに、Agent
に対して単発のHTTPリクエストを送信できます。
主要なクラス (Main Classes)
AgentClient<State>
Agent
サーバーへのWebSocket接続を管理し、対話するための主要なクライアントクラスです。
-
State
: 接続先のAgent
が持つ状態の型。これにより、onStateUpdate
コールバックなどで型安全性が確保されます。
コンストラクタ (Constructor)
-
constructor(options: AgentClientOptions<State>)
- 新しい
AgentClient
インスタンスを作成し、指定されたAgent
へのWebSocket接続を開始します。 -
options
: 接続設定。詳細はAgentClientOptions
のセクションを参照してください。
- 新しい
メソッド (Methods)
-
setState(state: State): void
- クライアントからサーバー上の
Agent
の状態を更新するために使用します。 - このメソッドを呼び出すと、状態更新メッセージがサーバーに送信されます。また、
AgentClientOptions
で指定されたonStateUpdate
コールバックがsource: "client"
として即座に呼び出されます。
- クライアントからサーバー上の
-
call<T>(method: string, args?: unknown[], streamOptions?: StreamOptions): Promise<T>
- サーバー上の
Agent
で@callable
デコレータが付与されたメソッドをリモートで呼び出します。 -
method
: 呼び出すメソッドの名前(文字列)。 -
args
: メソッドに渡す引数の配列。 -
streamOptions
: 応答がストリーミングされる場合の処理方法を定義するオプション。詳細はStreamOptions
のセクションを参照してください。 -
戻り値: サーバーからの応答を解決する
Promise
。ストリーミングでない場合はメソッドの戻り値が、ストリーミングの場合はストリームが完了したときの最終的な値が返されます。
- サーバー上の
静的メソッド (Static Methods)
-
static fetch(_opts: PartyFetchOptions): Promise<Response>
-
非推奨 (Deprecated): このメソッドは実装されておらず、呼び出すとエラーがスローされます。代わりにスタンドアロンの
agentFetch
関数を使用してください。
-
非推奨 (Deprecated): このメソッドは実装されておらず、呼び出すとエラーがスローされます。代わりにスタンドアロンの
スタンドアロン関数 (Standalone Functions)
agentFetch(opts: AgentClientFetchOptions, init?: RequestInit): Promise<Response>
Agent
に対して(WebSocketではなく)通常のHTTPリクエストを行います。Agent
側でonRequest
ライフサイクルメソッドが処理します。
-
opts
: 接続先のAgent
を指定するためのオプション。詳細はAgentClientFetchOptions
のセクションを参照してください。 -
init
:fetch
APIに渡す標準的なリクエスト初期化オプション(method
,headers
,body
など)。
camelCaseToKebabCase(str: string): string
キャメルケース(myAgentName
)の文字列をケバブケース(my-agent-name
)に変換するユーティリティ関数です。内部的に、AgentClientOptions
で指定されたagent
名を、PartyKitのルーティングが期待する形式に変換するために使用されます。
型定義 (Type Definitions)
AgentClientOptions<State>
AgentClient
を初期化するための設定オプションです。PartySocketOptions
を拡張しています。
-
agent: string
(必須)- 接続したい
Agent
のクラス名(キャメルケース)。
- 接続したい
-
name?: string
- 接続したい
Agent
の特定のインスタンス名(ID)。指定しない場合、"default"
が使用されます。
- 接続したい
-
onStateUpdate?: (state: State, source: "server" | "client") => void
-
Agent
の状態が更新されたときに呼び出されるコールバック関数。 -
state
: 新しい状態オブジェクト。 -
source
: 状態変更の発生源。サーバーからのプッシュ通知の場合は"server"
、クライアント自身のsetState
呼び出しによる場合は"client"
となります。
-
StreamOptions
AgentClient
のcall
メソッドでストリーミング応答を処理するためのコールバック関数をまとめたものです。サーバー側の@callable({ streaming: true })
メソッドに対して使用します。
-
onChunk?: (chunk: unknown) => void
- ストリームのデータの一部(チャンク)を受信するたびに呼び出されます。
-
onDone?: (finalChunk: unknown) => void
- ストリームが完了したときに呼び出されます。
finalChunk
には、サーバーがストリームを終了する際に送信した最後のデータが含まれます。
- ストリームが完了したときに呼び出されます。
-
onError?: (error: string) => void
- ストリーミング中にエラーが発生した場合に呼び出されます。
AgentClientFetchOptions
agentFetch
関数に渡す設定オプションです。PartyFetchOptions
を拡張しています。
-
agent: string
(必須)- リクエストを送信したい
Agent
のクラス名(キャメルケース)。
- リクエストを送信したい
-
name?: string
- リクエストを送信したい
Agent
の特定のインスタンス名(ID)。指定しない場合、"default"
が使用されます。
- リクエストを送信したい
agents/ai-chat-agent
概要 (Overview)
AIChatAgent
は、基本的なAgent
クラスを拡張し、AIチャットボット機能を組み込んだ特化型のエージェントです。Vercel AI SDK (v3/v5) との互換性を持ち、チャット履歴の永続化、ストリーミング応答、ツール呼び出し、リクエストのキャンセルといった、高度なチャットアプリケーションに必要な機能を提供します。
このクラスを継承することで、開発者はonChatMessage
メソッドを実装するだけで、独自のAIロジックを持つチャットエージェントを簡単に構築できます。
主要なクラス (Main Classes)
AIChatAgent<Env, State>
Agent
を継承した、AIチャット機能を持つエージェントの基本クラス。
-
Env
: エージェントがアクセスできる環境変数やバインディングの型。 -
State
:Agent
クラスから継承した、エージェントが保持する状態の型。AIChatAgent
自体は直接このstate
を使用しませんが、継承クラスで利用可能です。
プロパティ (Properties)
-
messages: ChatMessage[]
- 現在の会話のチャットメッセージの配列。
ChatMessage
はVercel AI SDKのUIMessage
型です。 - このプロパティはエージェントの起動時にDurable Objectストレージから自動的に読み込まれ、常に最新の状態が保たれます。
- Vercel AI SDKのv3からv5への移行を支援するため、古い形式のメッセージは自動的に新しい形式に変換されます。
- 現在の会話のチャットメッセージの配列。
ライフサイクル/オーバーライドすべきメソッド (Lifecycle/Methods to Override)
-
async onChatMessage(onFinish: StreamTextOnFinishCallback<ToolSet>, options?: { abortSignal: AbortSignal | undefined }): Promise<Response | undefined>
- [実装必須] このクラスを継承する際に、必ずオーバーライドする必要がある中心的なメソッドです。
- ユーザーから新しいチャットメッセージを受信したときに呼び出されます。
- このメソッド内で、AIモデルへのリクエストを行い、その応答を
Response
オブジェクトとして返すロジックを実装します。 -
戻り値: AIモデルからの応答を含む
Response
オブジェクト。ストリーミング応答(Server-Sent Events)を返すことが期待されます。Vercel AI SDKのstreamText
やstreamObject
などのユーティリティを使うと便利です。応答がない場合はundefined
を返します。 -
onFinish
: ストリーミングが完了したときに呼び出されるコールバック。AI SDKによって内部的に使用されます。 -
options.abortSignal
: クライアントがチャットリクエストをキャンセルした場合に発火するAbortSignal
。AIモデルへのfetch
リクエストなどにこのシグナルを渡すことで、進行中のリクエストを中断できます。
主要なメソッド (Key Methods)
-
async saveMessages(messages: ChatMessage[]): Promise<void>
- チャットメッセージの配列をサーバーサイドで永続化します。
- このメソッドは、チャット履歴を完全に上書きします。通常は、
this.messages
に新しいメッセージを追加し、その結果の配列を渡して使用します。 - 呼び出されると、更新されたメッセージリストが接続されているすべてのクライアントにブロードキャストされます。
内部メソッドとフレームワークの動作 (Internal Methods and Framework Behavior)
AIChatAgent
は、クライアントからの特定のメッセージタイプをリッスンし、チャットのロジックを自動的に処理します。開発者がこれらの内部メソッドを直接呼び出す必要は通常ありません。
-
onMessage(connection, message)
:-
Agent
からオーバーライドされ、チャット関連のWebSocketメッセージを処理します。-
CF_AGENT_USE_CHAT_REQUEST
: 新しいチャットメッセージの開始。onChatMessage
をトリガーします。 -
CF_AGENT_CHAT_CLEAR
: チャット履歴をクリアするリクエスト。 -
CF_AGENT_CHAT_MESSAGES
: クライアントから送信されたメッセージリストでサーバーの状態を置き換えるリクエスト。 -
CF_AGENT_CHAT_REQUEST_CANCEL
: 進行中のチャットリクエストをキャンセルするリクエスト。
-
-
-
onRequest(request)
:-
/get-messages
エンドポイントへのHTTP GETリクエストを処理し、現在のチャット履歴をJSON形式で返します。
-
-
persistMessages(messages, excludeBroadcastIds)
:-
saveMessages
の内部実装。メッセージをSQLiteデータベースに保存し、クライアントにブロードキャストします。
-
-
_reply(id, response)
:-
onChatMessage
から返されたResponse
オブジェクトを処理します。 - レスポンスボディがストリームの場合、それを読み取り、Server-Sent Events形式のチャンクをクライアントにリアルタイムで転送します。
- Vercel AI SDK v5のデータ形式(
text-delta
,tool-input-available
,tool-output-available
など)を解釈します。 - ストリームが完了した後、アシスタントの完全な応答(テキストとツール呼び出しの結果を含む)を
ChatMessage
として構築し、persistMessages
を呼び出してチャット履歴に追加・保存します。
-
-
キャンセル処理関連メソッド (
_getAbortSignal
,_cancelChatRequest
, etc.):- クライアントからのキャンセル要求を処理するための内部メカニズム。
- 各チャットリクエストに
AbortController
を関連付け、キャンセルメッセージを受信したときにabort()
を呼び出すことで、onChatMessage
に渡されるabortSignal
を発火させます。
-
destroy()
:- エージェントが破棄される際に、進行中のすべてのリクエストをキャンセルし、親クラスの
destroy
メソッドを呼び出します。
- エージェントが破棄される際に、進行中のすべてのリクエストをキャンセルし、親クラスの
hono-agents
概要 (Overview)
このコードは、Webフレームワーク Hono でCloudflare Agentsを簡単に利用するためのミドルウェアを提供します。
このミドルウェアをHonoアプリケーションに組み込むことで、特定のパスへのリクエスト(通常のHTTPリクエストとWebSocketアップグレードリクエストの両方)を自動的にCloudflare Agentsのルーティングシステムに渡し、適切なエージェントに処理させることができます。
これにより、Honoアプリケーションのルーティングの一部として、ステートフルなエージェントをシームレスに統合できます。
主要な関数 (Main Functions)
agentsMiddleware<E extends Env>(ctx?: AgentMiddlewareContext<E>)
Cloudflare Agentsのリクエストを処理するためのHonoミドルウェアを作成します。
-
E extends Env
: Honoの環境変数の型。c.env
の型安全性を確保します。 -
ctx?: AgentMiddlewareContext<E>
: ミドルウェアの動作をカスタマイズするための設定オブジェクト。詳細はAgentMiddlewareContext
のセクションを参照してください。 -
戻り値: Honoアプリケーションの
.use()
メソッドで使用できるミドルウェア関数。
使い方 (Usage)
基本的な使い方は、Honoアプリケーションのインスタンスに対して、エージェントへのリクエストが通るパス(例: /agents/*
)を指定して.use()
を呼び出すことです。
import { Hono } from 'hono';
import { agentsMiddleware } from 'agents/hono'; // 仮のインポートパス
// 環境変数の型定義
type Env = {
// wrangler.tomlで定義したAgentのバインディング
MY_AGENT: DurableObjectNamespace;
// ...その他のバインディング
}
const app = new Hono<{ Bindings: Env }>();
// '/agents/*'へのリクエストをすべてCloudflare Agentsにルーティング
app.use('/agents/*', agentsMiddleware());
// ...その他のHonoルート定義
app.get('/', (c) => c.text('Hello from Hono!'));
export default app;
この設定により、https://<your-worker-url>/agents/my-agent/some-agent-id
のようなURLへのリクエストは、MY_AGENT
という名前のエージェントに自動的にルーティングされます。
型定義 (Type Definitions)
AgentMiddlewareContext<E>
agentsMiddleware
関数に渡す設定オブジェクトの型です。
-
options?: AgentOptions<E>
- Cloudflare Agentsのコア機能である
routeAgentRequest
関数に渡されるオプションです。 - これを使って、エージェントのURLプレフィックスの変更や、CORS設定の有効化などが可能です。
-
例:
// URLプレフィックスを'/api/agents'に変更し、CORSを有効にする agentsMiddleware({ options: { prefix: 'api/agents', cors: true } })
- Cloudflare Agentsのコア機能である
-
onError?: (error: Error) => void
- ミドルウェアの処理中にエラーが発生した場合に呼び出される、オプショナルなエラーハンドリング関数です。
- この関数を指定すると、ミドルウェアはエラーをスローせず、代わりにこの関数を呼び出してから次のミドルウェア(またはHonoのエラーハンドラ)に処理を移します。
- ログ記録やカスタムのエラー応答生成に利用できます。
- 指定しない場合、エラーはそのままスローされ、Honoのデフォルトのエラー処理機構に委ねられます。