使用 API 通过单个提示调用模型 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 API 通过单个提示调用模型

通过发送InvokeModelInvokeModelWithResponseStream请求,通过 API 对模型进行推理。您可以在 contentTypeaccept 字段中为请求和响应正文指定媒体类型。如果您不指定值,这两个字段的默认值为 application/json

除模型外 AI21 LabsJurassic-2,所有文本输出模型都支持流式传输。要检查模型是否支持流式传输,请发送GetFoundationModelListFoundationModels请求并检查responseStreamingSupported字段中的值。

指定以下字段,具体取决于您使用的模型。

  1. modelId – 使用模型 ID 或模型 ARN。查找modelId或的方法modelArn取决于您使用的模型类型:

    • 基础模型 – 执行以下任一操作。

    • 自定义模型 – 为自定义模型购买预调配吞吐量(有关更多信息,请参阅Amazon Bedrock 的预配置吞吐量),并查找预调配模型的模型 ID 或模型 ARN。

    • 预调配模型 – 如果您已为基础模型或自定义模型创建了预调配吞吐量,请执行以下任一操作。

      • 发送ListProvisionedModelThroughputs请求并找到要在provisionedModelArn响应中使用的模型。

      • 在控制台中,在预配置吞吐量中选择一个模型,然后在模型详细信息部分找到该模型 ARN。

  2. body – 每个基础模型都有自己的推理参数,这些参数在 body 字段中设置。自定义模型或预调配模型的推理参数取决于创建模型时所依据的基础模型。有关更多信息,请参阅 根基模型的推理参数

调用模型代码示例

以下示例说明如何使用 InvokeModelAPI 运行推理。有关不同模型的示例,请参阅所需模型的推理参数参考(根基模型的推理参数)。

CLI

以下示例将生成的对两只狗的提示故事的响应保存到一个名为 invoke-model-output.txt 的文件中。

aws bedrock-runtime invoke-model \ --model-id anthropic.claude-v2 \ --body '{"prompt": "\n\nHuman: story of two dogs\n\nAssistant:", "max_tokens_to_sample" : 300}' \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt
Python

以下示例返回根据 explain black holes to 8th graders 这一提示生成的响应。

import boto3 import json brt = boto3.client(service_name='bedrock-runtime') body = json.dumps({ "prompt": "\n\nHuman: explain black holes to 8th graders\n\nAssistant:", "max_tokens_to_sample": 300, "temperature": 0.1, "top_p": 0.9, }) modelId = 'anthropic.claude-v2' accept = 'application/json' contentType = 'application/json' response = brt.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType) response_body = json.loads(response.get('body').read()) # text print(response_body.get('completion'))

通过流式传输调用模型代码示例

注意

AWS CLI 不支持流式传输。

以下示例展示了如何使用 InvokeModelWithResponseStreamAPI 通过 Python 生成直播文本,使用提示用 1000 字写一篇关于在火星上生活的文章。

import boto3 import json brt = boto3.client(service_name='bedrock-runtime') body = json.dumps({ 'prompt': '\n\nHuman: write an essay for living on mars in 1000 words\n\nAssistant:', 'max_tokens_to_sample': 4000 }) response = brt.invoke_model_with_response_stream( modelId='anthropic.claude-v2', body=body ) stream = response.get('body') if stream: for event in stream: chunk = event.get('chunk') if chunk: print(json.loads(chunk.get('bytes').decode()))