Modelos Amazon Titan Text - Amazon Bedrock

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Modelos Amazon Titan Text

Os modelos Amazon Titan Text suportam os seguintes parâmetros de inferência.

Para obter mais informações sobre as diretrizes de engenharia do Titan Text Prompt, consulte Diretrizes de engenharia do Titan Text Prompt.

Para obter mais informações sobre Titan modelos, consulteTitanModelos da Amazon.

Solicitação e resposta

O corpo da solicitação é passado no body campo de uma InvokeModelWithResponseStreamsolicitação InvokeModelor.

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

Os seguintes parâmetros são obrigatórios:

  • inputText — O prompt para fornecer o modelo para gerar uma resposta. Para gerar respostas em um estilo conversacional, encapsule a solicitação usando o seguinte formato:

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

textGenerationConfig é opcional. Você pode usá-lo para configurar os seguintes parâmetros de inferência:

  • temperatura — Use um valor menor para diminuir a aleatoriedade nas respostas.

    Padrão Mínimo Máximo
    0.7 0.0 1,0
  • TopP — Use um valor menor para ignorar opções menos prováveis e diminuir a diversidade de respostas.

    Padrão Mínimo Máximo
    0.9 0.0 1,0
  • maxTokenCount— Especifique o número máximo de tokens a serem gerados na resposta. Os limites máximos de tokens são rigorosamente aplicados.

    Modelo Padrão Mínimo Máximo
    Titan Text Lite 512 0 4.096
    Titan Text Express 512 0 8,192
    Titan Text Premier 512 0 3.072
  • StopSequences — Especifique uma sequência de caracteres para indicar onde o modelo deve parar.

InvokeModel Response

O corpo da resposta contém os seguintes campos possíveis:

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

Mais informações sobre cada campo são fornecidas abaixo.

  • inputTextTokenCount: o número de tokens no prompt.

  • tokenCount: o número de tokens na resposta.

  • outputText: o texto na resposta.

  • completionReason: o motivo pelo qual a resposta terminou de ser gerada. Os seguintes motivos são possíveis.

    • FINISHED: a resposta foi totalmente gerada.

    • LENGTH: a resposta foi truncada devido ao tamanho da resposta que você definiu.

InvokeModelWithResponseStream Response

Cada pedaço de texto no corpo do fluxo de resposta está no formato a seguir. Você deve decodificar o campo bytes (consulte um exemplo em Usar a API para invocar um modelo com um único prompt).

{ 'chunk': { 'bytes': b'{ "index": int, "inputTextTokenCount": int, "totalOutputTextTokenCount": int, "outputText": "<response-chunk>", "completionReason": string }' } }
  • index: o índice da parte na resposta do streaming.

  • inputTextTokenCount: o número de tokens no prompt.

  • totalOutputTextTokenCount: o número de tokens na resposta.

  • outputText: o texto na resposta.

  • completionReason: o motivo pelo qual a resposta terminou de ser gerada. Os seguintes motivos são possíveis.

    • FINISHED: a resposta foi totalmente gerada.

    • LENGTH: a resposta foi truncada devido ao comprimento que você definiu.

Exemplos de código

O exemplo a seguir mostra como executar inferência com o modelo Amazon Titan Text Premier com o Python SDK.

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

O exemplo a seguir mostra como executar inferência com o Titan Text G1 - Express modelo da Amazon com o Python SDK.

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