Modèles Amazon Titan Text - Amazon Bedrock

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

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 Titan Text Prompt, consultez les directives d'ingénierie de Titan Text Prompt.

Pour plus d'informations sur Titan les modèles, consultezTitanModèles Amazon.

Demande et réponse

Le corps de la demande est transmis dans le body champ d'une InvokeModelWithResponseStreamdemande InvokeModelou.

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

Les paramètres suivants sont obligatoires :

  • inputText— L'invite à fournir le modèle permettant de générer une réponse. Pour générer des réponses dans un style conversationnel, encapsulez l'invite en utilisant le format suivant :

    "inputText": "User: <prompt>\nBot:

textGenerationConfigC'est facultatif. Vous pouvez l'utiliser pour configurer les paramètres d'inférence suivants :

  • température — Utilisez une valeur inférieure pour réduire le caractère aléatoire des réponses.

    Par défaut Minimum Maximum
    0.7 0.0 1.0
  • TopP — Utilisez une valeur inférieure pour ignorer les options les moins probables et réduire la diversité des réponses.

    Par défaut Minimum Maximum
    0.9 0.0 1.0
  • maxTokenCount— Spécifiez le nombre maximum de jetons à générer dans la réponse. Les limites maximales de jetons sont strictement appliquées.

    Modèle Par défaut Minimum Maximum
    Titan Text Lite 512 0 4 096
    Titan Text Express 512 0 8 192
    Titan Text Premier 512 0 3 072
  • 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 :

  • inputTextTokenNombre : nombre de jetons figurant dans l'invite.

  • résultats — Tableau d'un élément, un objet contenant les champs suivants :

    • tokenCount— Le nombre de jetons contenus dans la réponse.

    • outputText : texte de la réponse.

    • completionReason— La 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_ CRITERIA _ MET — La réponse a été tronquée car les critères d'arrêt ont été atteints.

      • RAG_ QUERY _ _ WHEN RAG _ DISABLED — La fonctionnalité est désactivée et ne peut pas terminer la requête.

      • CONTENT_ FILTERED — Le contenu a été filtré ou supprimé par le filtre de contenu appliqué.

InvokeModelWithResponseStream Response

Chaque partie de texte du corps du flux de réponses est au format suivant. Vous devez décoder le champ bytes (voir Utilisation de l’API pour invoquer un modèle à l’aide d’une seule invite pour un exemple).

{ "chunk": { "bytes": b'{ "index": int, "inputTextTokenCount": int, "totalOutputTextTokenCount": int, "outputText": "<response-chunk>", "completionReason": "string" }' } }
  • index — L'index du segment dans la réponse au streaming.

  • inputTextTokenNombre : nombre de jetons figurant dans l'invite.

  • totalOutputTextTokenCount— Le nombre de jetons contenus dans la réponse.

  • outputText : texte de la réponse.

  • completionReason— La 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_ CRITERIA _ MET — La réponse a été tronquée car les critères d'arrêt ont été atteints.

    • RAG_ QUERY _ _ WHEN RAG _ DISABLED — La fonctionnalité est désactivée et ne peut pas terminer la requête.

    • CONTENT_ FILTERED — Le contenu a été filtré ou supprimé par le filtre appliqué.

Exemples de code

L'exemple suivant montre comment exécuter l'inférence avec le modèle Amazon Titan Text Premier avec PythonSDK.

# 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 Titan Text G1 - Express modèle Amazon avec PythonSDK.

# 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()