このトピックでは、AgentBay SDK を使用する際に理解が必要な基本概念について説明します。
AgentBay クラス
コア機能
AgentBay クラスは、Alibaba Cloud サービスと連携するための主なインターフェイスです。以下のコア機能を提供します:
セッションマネージャー:クラウドセッションの作成、削除、および管理を行います。
API クライアント:AgentBay クラウドサービスとのすべての通信を処理します。
認証ハンドラー:API キーおよびセキュリティを自動的に管理します。
基本的な使い方
# 1. クライアントを初期化
agent_bay = AgentBay()
# 2. セッションを作成(デフォルトで linux_latest を使用)
session = agent_bay.create().session
# 3. セッションをタスクに利用
# ... ご利用の自動化タスク ...
# 4. リソースをクリーンアップ
agent_bay.delete(session)
セッション
セッションとは、ユーザーとクラウド環境との間の接続です。
主な特徴
一時的:必要に応じて作成され、完了後に削除されます。
分離済み:各セッションは他のセッションから完全に独立しています。
課金対象:セッションがアクティブな時間に対して課金されます。
基本的な使い方
# セッションを作成
session = agent_bay.create().session
# セッションをタスクに利用
session.command.execute_command("echo 'Hello World'")
# 完了後は必ずリソースをクリーンアップ
agent_bay.delete(session)
セッションのライフサイクル
セッションの作成 → セッションの利用 → セッションの削除
↓ ↓ ↓
リソース割り当て 操作の実行 リソース解放
セッションの解放
セッション終了後は、クラウドリソースを解放するために必ず解放処理を行う必要があります。解放方法には2 種類あります。
手動解放(推奨)
# 完了時に明示的に削除
agent_bay.delete(session)
自動タイムアウト解放
手動でセッションを削除しない場合、タイムアウト後に自動的に解放されます。
Alibaba Cloud AgentBay コンソール にアクセスします。左側のナビゲーションウィンドウで、ポリシー管理 を選択します。
ポリシーの作成 をクリックし、非アクティブなデスクトップの解放 を有効化します。
MCP とのインタラクション終了後のデスクトップ解放 および ユーザーとのインタラクション終了後のデスクトップ解放 のタイムアウト値を入力します。
ポリシーの作成 をクリックします。
左側のナビゲーションウィンドウで、サービス管理 をクリックします。API キーを検索し、操作 列の ⋮ アイコンをクリックします。
ポリシーの表示/関連付け を選択します。関連付け済みポリシー セクションで、ポリシーの関連付け をクリックし、先ほど作成したポリシーを選択します。その後、関連付けの確認 をクリックします。
説明各 API キーには 1 つのポリシーのみ関連付けることができます。API キーを作成すると、デフォルトポリシーが自動的に関連付けられます。関連付けを変更するには、まず 関連付け解除 をクリックする必要があります。
イメージ
公式 OS イメージ
下記の表は、AgentBay が提供する最新の公式 OS イメージの一覧です。
イメージ ID | 環境 | 主な用途 |
| Cloud PC | 汎用コンピューティングおよびサーバータスク(未指定時はデフォルト) |
| Cloud PC | 汎用 Windows タスク、 |
| Cloud Browser | Web スクレイピング、ブラウザ自動化、ウェブサイトテスト |
| Code Sandbox | コーディング、開発ツール、プログラミングタスク |
| Cloud Phone | モバイルアプリのテストおよび Android 自動化 |
image_idを指定しない場合、AgentBay はデフォルトでlinux_latestを使用します。特定の要件に応じて、AgentBay コンソールでカスタムイメージを作成・利用できます。
適切なイメージの選択
Windows 環境の例
from agentbay.session_params import CreateSessionParams
# Windows 環境を作成し、メモ帳を自動化
params = CreateSessionParams(image_id="windows_latest")
session = agent_bay.create(params).session
# メモ帳アプリケーションを起動
session.computer.start_app("notepad.exe")
# 戻り値:起動済みプロセス情報を持つ ProcessListResult
# メモ帳にテキストを入力
session.computer.input_text("Windows からこんにちは!")
# 戻り値:成功ステータスを持つ BoolResult
agent_bay.delete(session)
ブラウザ環境の例
# ブラウザ環境を作成
params = CreateSessionParams(image_id="browser_latest")
session = agent_bay.create(params).session
# 初期化およびナビゲーション
from agentbay.browser import BrowserOption
session.browser.initialize(BrowserOption())
session.browser.agent.navigate("https://www.baidu.com")
print("Web ナビゲーションが成功しました")
agent_bay.delete(session)Code Sandbox 環境の例
# 開発環境を作成してコードを実行
params = CreateSessionParams(image_id="code_latest")
session = agent_bay.create(params).session
# コードを実行
result = session.code.run_code("print('CodeSpace からこんにちは!')", "python")
# 戻り値:出力を持つ CodeExecutionResult
# 例:result.result = "CodeSpace からこんにちは!"
agent_bay.delete(session)Cloud Phone 環境の例
# Android 環境を作成し、HOME キーを送信
params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(params).session
# HOME キーを押してホーム画面に戻る
from agentbay.mobile import KeyCode
session.mobile.send_key(KeyCode.HOME)
# 戻り値:成功ステータスを持つ BoolResult
# 例:result.success = True(Android のホーム画面に戻ります)
agent_bay.delete(session)
データの永続性
一時データ
デフォルトでは、セッション内のすべてのデータは一時的です。
セッション終了時にすべてのデータが失われます。
タスク処理、一時ファイル、キャッシュなどに利用します。
# このデータはセッション終了時に失われます
session.file_system.write_file("/tmp/temp_data.txt", "これは消えます")
永続データ
セッション間でデータを保持できます。
明示的に構成する必要があります。
プロジェクトファイル、構成、重要な結果などに利用します。
from agentbay import ContextSync
# 永続ストレージを作成
context = agent_bay.context.get("my-project", create=True).context
context_sync = ContextSync.new(context.id, "/tmp/persistent")
# 永続データ付きでセッションを作成
params = CreateSessionParams(context_syncs=[context_sync])
session = agent_bay.create(params).session
# このデータはセッション間で保存されます
session.file_system.write_file("/tmp/persistent/important.txt", "これは永続化されます")データを保存するには Context を使用する必要があります。それ以外の場合、セッション終了時にデータは完全に失われます。
API 結果およびリクエスト ID
API 結果
AgentBay の API を呼び出すと、結果は結果オブジェクトにラップされて返されます。
# 例:API 呼び出し
screenshot = session.computer.screenshot()
# 結果オブジェクトには以下のフィールドが含まれます:
print(screenshot.success) # True/False — 操作が成功したかどうか
print(screenshot.data) # 実際のデータ(スクリーンショットの URL など)
print(screenshot.request_id) # トラブルシューティング用のリクエスト ID
リクエスト ID
AgentBay へのすべての API 呼び出しは、一意のリクエスト ID を返します。形式は "ABC12345-XXXX-YYYY-ZZZZ-123456789ABC" のようになります。
リクエスト ID の用途
トラブルシューティング:問題が発生した場合、この ID を提供することで迅速なサポートを受けられます。
トレーシング:トレースログ内で個別の操作を追跡できます。
デバッグ:どの API 呼び出しが失敗したかを特定しやすくなります。
リクエスト ID を使用するタイミング
API 呼び出しが予期せず失敗した場合。
特定の操作でパフォーマンスの問題に気づきます。
ヘルプデスクに問題について問い合わせる場合。
トラブルシューティングの例
result = session.code.run_code("print('hello')", "python")
if not result.success:
print(f"コード実行に失敗しました!リクエスト ID: {result.request_id}")
# より迅速なサポートを得るために、このリクエスト ID をサポートチームにご提供ください