

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.

# Modèles Amazon Titan Text
<a name="model-parameters-titan-text"></a>

Les modèles Amazon Titan Text prennent en charge les paramètres d’inférence suivants.

Pour plus d’informations sur les directives d’ingénierie de requête Titan Text, consultez [Directives d’ingénierie de requête Titan Text](https://d2eo22ngex1n9g.cloudfront.net/Documentation/User+Guides/Titan/Amazon+Titan+Text+Prompt+Engineering+Guidelines.pdf). 

Pour plus d’informations sur les modèles Titan, consultez [Présentation des modèles Amazon Titan](titan-models.md).

**Topics**
+ [Demande et réponse](#model-parameters-titan-request-response)
+ [Exemples de code](#inference-titan-code)

## Demande et réponse
<a name="model-parameters-titan-request-response"></a>

Le corps de la demande est transmis dans le champ `body` d’une demande adressée à [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) ou [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html).

------
#### [ Request ]

```
{
    "inputText": string,
    "textGenerationConfig": {
        "temperature": float,  
        "topP": float,
        "maxTokenCount": int,
        "stopSequences": [string]
    }
}
```

Les paramètres suivants sont obligatoires :
+ **inputText** : invite fournie au modèle pour générer une réponse. Pour générer des réponses dans un style conversationnel, envoyez l’invite en utilisant le format suivant :

  ```
  "inputText": "User: <theUserPrompt>\nBot:"
  ```

  Ce format indique au modèle qu’il doit répondre sur une nouvelle ligne une fois que l’utilisateur a fourni une invite.

L’option `textGenerationConfig` est facultative. Vous pouvez l’utiliser pour configurer les [paramètres d’inférence](inference-parameters.md) suivants :
+ **temperature** : utilisez une valeur inférieure pour réduire le caractère aléatoire de la réponse.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-titan-text.html)
+ **topP** : utilisez une valeur inférieure pour ignorer les options les moins probables et réduire la diversité des réponses.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-titan-text.html)
+ **maxTokenCount** : spécifiez le nombre maximum de jetons à générer dans la réponse. Les limites maximales de jetons sont strictement appliquées.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-titan-text.html)
+ **stopSequences** : spécifiez une séquence de caractères pour indiquer où le modèle doit s’arrêter.

------
#### [ InvokeModel Response ]

```
{
    "inputTextTokenCount": int,
    "results": [{
        "tokenCount": int,
        "outputText": "\n<response>\n",
        "completionReason": "string"
    }]
}
```

Le corps de la réponse contient les champs suivants :
+ **inputTextTokenCount** : nombre de jetons figurant dans l’invite.
+ **results** : tableau d’un élément, un objet contenant les champs suivants :
  + **tokenCount** : nombre de jetons figurant dans la réponse.
  + **outputText** : texte de la réponse.
  + **completionReason** : raison pour laquelle la réponse a fini d’être générée. Les raisons suivantes sont possibles :
    + FINISHED : la réponse a été entièrement générée.
    + LENGTH : la réponse a été tronquée en raison de la longueur de réponse que vous avez définie.
    + STOP\$1CRITERIA\$1MET : la réponse a été tronquée, car les critères d’arrêt ont été atteints.
    + RAG\$1QUERY\$1WHEN\$1RAG\$1DISABLED : la fonctionnalité est désactivée et ne peut pas terminer la requête.
    + CONTENT\$1FILTERED : le contenu a été filtré ou supprimé par le filtre de contenu appliqué.

------
#### [ InvokeModelWithResponseStream Response ]

Chaque partie de texte dans le corps du flux de réponses a le format suivant. Vous devez décoder le champ `bytes` (voir [Soumettez une seule invite avec InvokeModel](inference-invoke.md) pour un exemple).

```
{
    "chunk": {
        "bytes": b'{
            "index": int,
            "inputTextTokenCount": int,
            "totalOutputTextTokenCount": int,
            "outputText": "<response-chunk>",
            "completionReason": "string"
        }'
    }
}
```
+ **index** : index du segment dans la réponse de streaming.
+ **inputTextTokenCount** : nombre de jetons figurant dans l’invite.
+ **totalOutputTextTokenCount** : nombre de jetons figurant dans la réponse.
+ **outputText** : texte de la réponse.
+ **completionReason** : raison pour laquelle la réponse a fini d’être générée. Les raisons suivantes sont possibles.
  + FINISHED : la réponse a été entièrement générée.
  + LENGTH : la réponse a été tronquée en raison de la longueur de réponse que vous avez définie.
  + STOP\$1CRITERIA\$1MET : la réponse a été tronquée, car les critères d’arrêt ont été atteints.
  + RAG\$1QUERY\$1WHEN\$1RAG\$1DISABLED : la fonctionnalité est désactivée et ne peut pas terminer la requête.
  + CONTENT\$1FILTERED : le contenu a été filtré ou supprimé par le filtre appliqué.

------

## Exemples de code
<a name="inference-titan-code"></a>

L’exemple suivant montre comment exécuter l’inférence avec le modèle Amazon Titan Text Premier et le kit SDK Python.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to create a list of action items from a meeting transcript
with the Amazon Titan Text model (on demand).
"""
import json
import logging
import boto3

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon Titan Text models"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_text(model_id, body):
    """
    Generate text using Amazon Titan Text models on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        response (json): The response from the model.
    """

    logger.info(
        "Generating text with Amazon Titan Text model %s", model_id)

    bedrock = boto3.client(service_name='bedrock-runtime')

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Text generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated text with Amazon Titan Text model %s", model_id)

    return response_body


def main():
    """
    Entrypoint for Amazon Titan Text model example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        # You can replace the model_id with any other Titan Text Models
        # Titan Text Model family model_id is as mentioned below:
        # amazon.titan-text-premier-v1:0, amazon.titan-text-express-v1, amazon.titan-text-lite-v1
        model_id = 'amazon.titan-text-premier-v1:0'

        prompt = """Meeting transcript: Miguel: Hi Brant, I want to discuss the workstream  
            for our new product launch Brant: Sure Miguel, is there anything in particular you want
            to discuss? Miguel: Yes, I want to talk about how users enter into the product.
            Brant: Ok, in that case let me add in Namita. Namita: Hey everyone 
            Brant: Hi Namita, Miguel wants to discuss how users enter into the product.
            Miguel: its too complicated and we should remove friction.  
            for example, why do I need to fill out additional forms?  
            I also find it difficult to find where to access the product
            when I first land on the landing page. Brant: I would also add that
            I think there are too many steps. Namita: Ok, I can work on the
            landing page to make the product more discoverable but brant
            can you work on the additonal forms? Brant: Yes but I would need 
            to work with James from another team as he needs to unblock the sign up workflow.
            Miguel can you document any other concerns so that I can discuss with James only once?
            Miguel: Sure.
            From the meeting transcript above, Create a list of action items for each person. """

        body = json.dumps({
            "inputText": prompt,
            "textGenerationConfig": {
                "maxTokenCount": 3072,
                "stopSequences": [],
                "temperature": 0.7,
                "topP": 0.9
            }
        })

        response_body = generate_text(model_id, body)
        print(f"Input token count: {response_body['inputTextTokenCount']}")

        for result in response_body['results']:
            print(f"Token count: {result['tokenCount']}")
            print(f"Output text: {result['outputText']}")
            print(f"Completion reason: {result['completionReason']}")

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating text with the Amazon Titan Text Premier model {model_id}.")


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

L’exemple suivant montre comment exécuter l’inférence avec le modèle Amazon Titan Text G1 - Express et le kit SDK Python.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to create a list of action items from a meeting transcript
with the Amazon &titan-text-express; model (on demand).
"""
import json
import logging
import boto3

from botocore.exceptions import ClientError


class ImageError(Exception):
    "Custom exception for errors returned by Amazon &titan-text-express; model"

    def __init__(self, message):
        self.message = message


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_text(model_id, body):
    """
    Generate text using Amazon &titan-text-express; model on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        response (json): The response from the model.
    """

    logger.info(
        "Generating text with Amazon &titan-text-express; model %s", model_id)

    bedrock = boto3.client(service_name='bedrock-runtime')

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )
    response_body = json.loads(response.get("body").read())

    finish_reason = response_body.get("error")

    if finish_reason is not None:
        raise ImageError(f"Text generation error. Error is {finish_reason}")

    logger.info(
        "Successfully generated text with Amazon &titan-text-express; model %s", model_id)

    return response_body


def main():
    """
    Entrypoint for Amazon &titan-text-express; example.
    """
    try:
        logging.basicConfig(level=logging.INFO,
                            format="%(levelname)s: %(message)s")

        model_id = 'amazon.titan-text-express-v1'

        prompt = """Meeting transcript: Miguel: Hi Brant, I want to discuss the workstream  
            for our new product launch Brant: Sure Miguel, is there anything in particular you want
            to discuss? Miguel: Yes, I want to talk about how users enter into the product.
            Brant: Ok, in that case let me add in Namita. Namita: Hey everyone 
            Brant: Hi Namita, Miguel wants to discuss how users enter into the product.
            Miguel: its too complicated and we should remove friction.  
            for example, why do I need to fill out additional forms?  
            I also find it difficult to find where to access the product
            when I first land on the landing page. Brant: I would also add that
            I think there are too many steps. Namita: Ok, I can work on the
            landing page to make the product more discoverable but brant
            can you work on the additonal forms? Brant: Yes but I would need 
            to work with James from another team as he needs to unblock the sign up workflow.
            Miguel can you document any other concerns so that I can discuss with James only once?
            Miguel: Sure.
            From the meeting transcript above, Create a list of action items for each person. """

        body = json.dumps({
            "inputText": prompt,
            "textGenerationConfig": {
                "maxTokenCount": 4096,
                "stopSequences": [],
                "temperature": 0,
                "topP": 1
            }
        })

        response_body = generate_text(model_id, body)
        print(f"Input token count: {response_body['inputTextTokenCount']}")

        for result in response_body['results']:
            print(f"Token count: {result['tokenCount']}")
            print(f"Output text: {result['outputText']}")
            print(f"Completion reason: {result['completionReason']}")

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    except ImageError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(
            f"Finished generating text with the Amazon &titan-text-express; model {model_id}.")


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