

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gestion des demandes d’outils d’utilisation d’ordinateur émanant des agents pendant les conversations
<a name="agent-computer-use-handle-tools"></a>

Lorsque votre agent demande un outil, la réponse à votre opération d' InvokeAgent API inclut une `returnControl` charge utile qui inclut l'outil à utiliser et l'action de l'outil dans les InvocationInputs. Pour plus d’informations sur le contrôle des retours au développeur de l’agent, consultez [Redonnez le contrôle au développeur de l'agent en envoyant les informations obtenues dans une réponse InvokeAgent](agents-returncontrol.md).

**Topics**
+ [Renvoyer un exemple de contrôle](#agent-computer-use-tool-request-format)
+ [Exemple de code pour analyser la demande d’outil](#agent-computer-use-implementation-example)

## Renvoyer un exemple de contrôle
<a name="agent-computer-use-tool-request-format"></a>

Voici un exemple de données utiles `returnControl` avec une demande d’utilisation de l’outil `ANTHROPIC.Computer` avec l’action `screenshot`.

```
{
    "returnControl": {
        "invocationId": "invocationIdExample",
        "invocationInputs": [{
            "functionInvocationInput": {
                "actionGroup": "my_computer",
                "actionInvocationType": "RESULT",
                "agentId": "agentIdExample",
                "function": "computer",
                "parameters": [{
                    "name": "action",
                    "type": "string",
                    "value": "screenshot"
                }]
            }
        }]
    }
}
```

## Exemple de code pour analyser la demande d’outil
<a name="agent-computer-use-implementation-example"></a>

Le code suivant montre comment extraire le choix de l'outil d'utilisation de l'ordinateur dans une InvokeAgent réponse, le mapper à des implémentations d'outils simulées pour différents outils, puis envoyer le résultat de l'utilisation de l'outil dans une InvokeAgent demande ultérieure.
+ La `manage_computer_interaction` fonction exécute une boucle dans laquelle elle appelle l'opération InvocationAgent API et analyse la réponse jusqu'à ce qu'il n'y ait plus de tâche à terminer. Lorsqu’elle analyse la réponse, elle extrait tous les outils à utiliser des données utiles `returnControl` et transmet la fonction `handle_computer_action`.
+ La fonction `handle_computer_action` associe le nom de la fonction à des implémentations fictives pour quatre actions. Pour des exemples d'implémentations d'outils, voir [computer-use-demo](https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo/computer_use_demo/) dans le référentiel. Anthropic GitHub 

Pour plus d’informations sur les outils d’utilisation d’ordinateur, notamment des exemples de mise en œuvre et des descriptions d’outils, consultez [Utilisation d’ordinateur (version bêta)](https://docs.anthropic.com/en/docs/agents-and-tools/computer-use) dans la documentation Anthropic.

```
import boto3
from botocore.exceptions import ClientError
import json


def handle_computer_action(action_params):
    """
    Maps computer actions, like taking screenshots and moving the mouse to mock implementations and returns
    the result.

    Args:
        action_params (dict): Dictionary containing the action parameters
            Keys:
                - action (str, required): The type of action to perform (for example 'screenshot' or 'mouse_move')
                - coordinate (str, optional): JSON string containing [x,y] coordinates for mouse_move

    Returns:
        dict: Response containing the action result.
    """

    action = action_params.get('action')
    if action == 'screenshot':
        # Mock screenshot response
        with open("mock_screenshot.png", 'rb') as image_file:
            image_bytes = image_file.read()
        return {
            "IMAGES": {
                "images": [
                    {
                        "format": "png",
                        "source": {
                            "bytes": image_bytes
                        },
                    }
                ]
            }
        }
    elif action == 'mouse_move':
        # Mock mouse movement
        coordinate = json.loads(action_params.get('coordinate', '[0, 0]'))
        return {
            "TEXT": {
                "body": f"Mouse moved to coordinates {coordinate}"
            }
        }
    elif action == 'left_click':
        # Mock mouse left click
        return {
            "TEXT": {
                "body": f"Mouse left clicked"
            }
        }
    elif action == 'right_click':
        # Mock mouse right click
        return {
            "TEXT": {
                "body": f"Mouse right clicked"
            }
        }

    ### handle additional actions here


def manage_computer_interaction(bedrock_agent_runtime_client, agent_id, alias_id):
    """
    Manages interaction between an Amazon Bedrock agent and computer use functions.

    Args:
        bedrock_agent_runtime_client: Boto3 client for Bedrock agent runtime
        agent_id (str): The ID of the agent
        alias_id (str): The Alias ID of the agent

    The function:
    - Initiates a session with initial prompt
    - Makes agent requests with appropriate parameters
    - Processes response chunks and return control events
    - Handles computer actions via handle_computer_action()
    - Continues interaction until task completion
    """
    session_id = "session123"
    initial_prompt = "Open a browser and go to a website"
    computer_use_results = None
    current_prompt = {{initial_prompt}}

    while True:
        # Make agent request with appropriate parameters
        invoke_params = {
            "agentId": agent_id,
            "sessionId": session_id,
            "inputText": current_prompt,
            "agentAliasId": alias_id,
        }

        # Include session state if we have results from previous iteration
        if computer_use_results:
            invoke_params["sessionState"] = computer_use_results["sessionState"]

        try:
            response = bedrock_agent_runtime_client.invoke_agent(**invoke_params)
        except ClientError as e:
            print(f"Error: {e}")

        has_return_control = False

        # Process the response
        for event in response.get('completion'):
            if 'chunk' in event:
                chunk_content = event['chunk'].get('bytes', b'').decode('utf-8')
                if chunk_content:
                    print("\nAgent:", chunk_content)

            if 'returnControl' in event:
                has_return_control = True
                invocationId = event["returnControl"]["invocationId"]
                if "invocationInputs" in event["returnControl"]:
                    for invocationInput in event["returnControl"]["invocationInputs"]:
                        func_input = invocationInput["functionInvocationInput"]

                        # Extract action parameters
                        params = {p['name']: p['value'] for p in func_input['parameters']}

                        # Handle computer action and get result
                        action_result = handle_computer_action(params)

                        # Print action result for testing
                        print("\nExecuting function:", func_input['function'])
                        print("Parameters:", params)

                        # Prepare the session state for the next request
                        computer_use_results = {
                            "sessionState": {
                                "invocationId": invocationId,
                                "returnControlInvocationResults": [{
                                    "functionResult": {
                                        "actionGroup": func_input['actionGroup'],
                                        "responseState": "REPROMPT",
                                        "agentId": func_input['agentId'],
                                        "function": func_input['function'],
                                        "responseBody": action_result
                                    }
                                }]
                            }
                        }

        # If there's no return control event, the task is complete
        if not has_return_control:
            print("\nTask completed!")
            break

        # Use empty string as prompt for subsequent iterations
        current_prompt = ""
def main():
    bedrock_agent_runtime_client = boto3.client(service_name="bedrock-agent-runtime",
                                         region_name="{{REGION}}"
                                         )

    agent_id = "{{AGENT_ID}}"
    alias_id = "{{ALIAS_ID}}"

    manage_computer_interaction(bedrock_agent_runtime_client, agent_id, alias_id)


if __name__ == "__main__":
    main()
```

La sortie doit ressembler à ce qui suit :

```
Executing function: computer
Parameters: {'action': 'screenshot'}

Executing function: computer
Parameters: {'coordinate': '[467, 842]', 'action': 'mouse_move'}

Executing function: computer
Parameters: {'action': 'left_click'}

Agent: I've opened Firefox browser. Which website would you like to visit?

Task completed!
```