ネイティブ コンピューターの使用

ネイティブ コンピューターを使用すると、応答モデル要求の順序付けされたデスクトップまたはブラウザーのアクションが可能になります。 アプリケーションは実行環境を所有し、承認の安全性チェックを提示し、アクションを実行し、スクリーンショットをキャプチャして、結果をモデルに返します。

次のPythonクライアントは、ネイティブ ツールを公開します。

Client 工場 メモ
OpenAIChatClient get_computer_tool() OpenAI Responses API を使用します。
FoundryChatClient get_computer_tool() azure-ai-projects 2.3.0 以降が必要です。

FoundryChatClient.get_computer_use_tool(...) は個別のプレビュー API です。 その構成オプションについては、Microsoft Foundry モデル プロバイダーを参照してください。

エージェントにツールを追加する

プロバイダー ツールを作成し、エージェントに渡します。

from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient()
agent = Agent(
    client=client,
    tools=[client.get_computer_tool()],
)

モデルは、type="computer_tool_call"を持つContent項目を返します。 項目には次のものが含まれます。

  • 項目 id と別個の call_id。
  • 順序付けられた actions リスト。
  • 省略可能な pending_safety_checks。

応答していない呼び出しは、 AgentResponse.user_input_requestsに表示されます。 アプリケーションが何かを実行する前に、ユーザーにアクションと警告を表示します。 フレームワークでは、安全性チェックが自動的に認識されることはありません。

結果を返す

アプリケーションが承認されたアクションを実行した後、ツール メッセージにスクリーンショットを返します。 次のフラグメントは、 request がコンピューター要求であり、 screenshot_bytes は実行環境によってキャプチャされた PNG であり、 confirmed_checks にはユーザーが明示的に承認したチェックのみが含まれていることを前提としています。

from agent_framework import Content, Message

result = Content.from_computer_tool_result(
    call_id=request.call_id,
    screenshot=Content.from_data(screenshot_bytes, "image/png"),
    acknowledged_safety_checks=confirmed_checks,
)

tool_message = Message(role="tool", contents=[result])
response = await agent.run(tool_message, session=session)

結果を送信するときに同じ AgentSession を再利用します。 Content.from_uri(...)またはContent.from_hosted_file(...)を含むスクリーンショットを提供することもできます。 OpenAI と Foundry Responses では、共通結果タイプではプロバイダーによるスクリーンショットの省略が許可されている場合でも、スクリーンショットが必要です。

ComputerSafetyCheck型とContent.from_computer_tool_call(...)コンストラクターとContent.from_computer_tool_result(...)コンストラクターは、試験段階の Agent Framework API です。 呼び出しと結果は、 Content.to_dict() で永続化し、 Content.from_dict()で復元できます。

ワークフローの動作

ネイティブ コンピューター入力のワークフローが一時停止すると、Agent Framework はチェックポイント間で呼び出し ID、アクションの順序、および保留中の安全性チェックを保持します。 ローカル関数の呼び出しが同じバッチで完了した場合、その結果は元の呼び出し順序でコンピューターの結果と共に返されます。

エージェントの保留中のバッチ内の 1 つのコンピューター要求が取り消されると、そのバッチ内の残りの要求も取り消されます。 既に完了した結果はターミナル出力に残り、次のターンは新しいエージェント セッションから始まります。