agents は何をしますか?
Cloudflare Durable Objectsを使用して、ステートフルで永続的なエージェントワークロードを管理し、効率的でスケーラブルなリアルタイム通信とスケジューリングを実現します。
概要
このプロジェクトは、CloudflareのDurable Objects上に構築されたエージェントシステムです。各エージェントは独自の永続的な状態を持ち、リアルタイムで通信し、タスクをスケジュールできます。
はじめ方
前提条件
- Node.js 18以上
- Cloudflareアカウント
- Wrangler CLI(
npm install -g wrangler)
インストール
npx wrangler generate my-agent-app https://github.com/pertamaxxx/agents
cd my-agent-app
npm install
設定
wrangler.tomlを編集して、Durable Objectsバインディングを追加します:
name = "my-agent-app"
main = "src/index.ts"
compatibility_date = "2024-01-01"
[[durable_objects.bindings]]
name = "AGENTS"
class_name = "Agent"
[[migrations]]
tag = "v1"
new_classes = ["Agent"]
使用方法
エージェントの作成
import { Agent } from "pertamaxxx/agents";
// Durable Objectクラスとしてエージェントを定義
export class MyAgent extends Agent {
async handleMessage(message: string): Promise<string> {
// エージェントのロジックをここに実装
return `受信: ${message}`;
}
}
エージェントとの通信
// エージェントIDを指定して通信
const agentId = "user-123";
const stub = env.AGENTS.get(env.AGENTS.idFromName(agentId));
const response = await stub.fetch(new Request("https://agent/message", {
method: "POST",
body: JSON.stringify({ text: "こんにちは" })
}));
スケジューリング
// 特定の時間にタスクをスケジュール
await agent.scheduleTask("daily-report", {
cron: "0 9 * * *",
handler: async () => {
// 日次レポートを生成
}
});
高度な使用法
状態管理
各エージェントは自動的に状態を永続化します。this.stateを使用してアクセスします:
export class CounterAgent extends Agent {
async increment(): Promise<number> {
const count = (await this.state.get("count")) || 0;
await this.state.put("count", count + 1);
return count + 1;
}
}
ブロードキャスト
// すべてのアクティブなエージェントにメッセージをブロードキャスト
await agent.broadcast("system-update", { version: "2.0.0" });
APIリファレンス
Agent クラス
| メソッド | 説明 |
|---|---|
handleMessage(msg) | 受信メッセージを処理します |
scheduleTask(name, config) | タスクをスケジュールします |
broadcast(event, data) | メッセージを全エージェントにブロードキャストします |
getState() | 現在の状態を取得します |
ライセンス
MIT