Computer Use APIの接続前に、動作制御をオフラインでテストする
Pythonの19件のテストで操作の検証、スクリーンショットの呼び出しID、フォームの完了条件を確認。未実行の接続用コードと検証済み範囲を分けて説明します。
Computer Useの実装では、モデルが対応する操作を返せるかと、アプリが操作を実行して完了を正しく判断できるかを分けて考えます。本記事は後者から始めます。Pythonのコントローラーと19件のオフラインテストを、APIキーやブラウザー、モデル料金なしで実行できます。
コントローラーキットをダウンロード。Python 3.9.6で通過し、新しく解凍したコピーでも再実行済みです。ただし同梱の run_live.py は実行も実プロバイダーとの検証もしていません。実際のAPI連携で取得した画像、使用量、互換性の結果はありません。
テストを先に実行する
Python 3.9以降の標準ライブラリだけで動きます。api-kit 内で実行してください。
python3 -B -m unittest discover -s . -p 'test_*.py' -v
15件がコントローラー、4件が受信記録の検証です。応答とランタイムは模擬で、通信やブラウザー起動はありません。画像の代用バイト列は実画像ではなく、APIへ送信できません。
| ファイル | 役割 |
|---|---|
controller.py | 操作を検証し、観察を返し、完了時に停止 |
test_controller.py | 模擬応答とランタイムによるテスト |
test_receiver.py | メモリー上の受信記録の差分を検証 |
run_live.py | 今後のPlaywright・HTTPS Responses接続用。実接続は未検証 |
README.md | 実行方法と実接続に必要な条件 |
モデル・実行・検証を分離する
モデルが次の操作を選び、ランタイムがブラウザーを操作し、別の検証処理が保存結果を調べます。QA練習用フォームでは、毎回異なる @example.test のアドレスを使います。
開始前と実行中の /submissions を比べ、古い記録がそのまま残り、期待するアドレスがちょうど1件だけ追加された場合に限って完了とします。以前から存在する一致記録、重複保存、別のアドレス、成功メッセージだけでは完了と認めません。これは教材固有の条件です。実際のアプリでは保存された下書きIDなど、その仕事に合った結果を検証します。
ひとつのツール仕様に合わせる
コードはOpenAI Computer Useガイドの構造化操作の流れを参考にしています。最初のスクリーンショットを送り、computer_call の操作を順に実行し、対応する call_id とともに computer_call_output の画像を返します。次の要求には previous_response_id も渡します。
画像と呼び出しの対応が重要です。単に画像を返しても、IDが違えば正しいツール結果にはなりません。仕様の参照は、特定のモデルとの接続成功を意味しません。
実接続前にモデル、エンドポイント、ツールのスキーマを組み合わせて確認します。テキスト要求が通るだけではComputer Use対応の証明になりません。既定のモデルやプロバイダーは選んでおらず、Ofox経由の互換性も主張していません。
操作を実行前に制限する
対応するのは左クリック、200文字以内の入力、指定の単独キー、範囲を制限したスクロール、画像取得です。座標は画像寸法内に制限し、真偽値、不正な数値、構造が違う入力を拒否します。1応答あたり12操作、モデル呼び出しは既定で4回が上限です。未対応操作では停止します。
1応答につきcomputer callは1つです。呼び出しIDの重複、不完全な応答、未処理の安全確認は自動承認せず停止します。全操作や一般的な承認システムを実装したものではありません。
操作の前後で完了を確認するため、非同期の保存が終わった後に同じバッチの次のクリックを実行し続けることを防ぎます。接続用コードはクリック・キー入力後に受信記録を短時間確認しますが、実ブラウザーでの動作証明には別の試験が必要です。
19件で確認したこと
不正構造、座標範囲、未対応入力、呼び出しと画像の対応、ターン上限、重複呼び出し、途中停止、受信記録の一致を検査します。完了後の残りの操作を止め、重複や違うアドレスでは失敗する回帰テストも含みます。
完了済みで有効なIDを持つ応答について、操作のない最終応答も含め使用量を監査に残します。実行失敗時には試みた操作も記録します。模擬使用量は請求実績ではなく、すべての起動失敗で記録を作れるという保証もありません。モデル精度や実環境の成功率はこのテストからは分かりません。
実接続の条件は別に確認する
run_live.py は新しいPlaywright Chromiumコンテキスト、ローカル教材のオリジン、明示したHTTPS Responses URLを使用し、個人のブラウザープロファイルには接続しません。通常のページリクエストを教材のオリジンに制限し、予期しないオリジンや新しいタブを検出すると停止します。ただし、汎用的なセキュリティサンドボックスではありません。
Playwrightの手順に従って独立環境へ導入し、実際のバージョンとブラウザービルドを記録します。本キットの実接続依存関係はまだ検証・固定していません。COMPUTER_RESPONSES_URL、COMPUTER_MODEL、COMPUTER_API_KEY は環境変数で渡し、秘密値を保存・共有しないでください。
ブラウザー利用とAPI費用の許可が必要です。既存のアクセス拒否を迂回してはいけません。毎回新しいアドレスと出力先を使います。4回の呼び出しや出力トークン上限は金額上限ではないため、プロバイダーの料金とアカウント側の制限を別途確認します。タイムアウトでも課金される可能性があるので、再試行前に使用量と保存結果を確認してください。
実接続を評価するなら、モデルID、URLのホスト、バージョン、タスク、秘密情報を除いた応答、画像、受信結果を保存し、別の入力でクリーン環境から再試行します。現時点で確認できるのは19件のオフラインテストです。実接続の結果に置き換えてはいけません。
よくある質問
- そのまま実接続済みのAPIサンプルとして使えますか?
- いいえ。19件のオフラインテストは通過していますが、接続用コード、プロバイダー互換性、実ブラウザーと使用料金は未検証です。


