2023 年 10 月 10 日更新 - 亚马逊 Bedrock 现已在全球 3 个地区上市:美国东部(弗吉尼亚州北部)、美国西部(俄勒冈州)和亚太地区(东京)。

今年四月,我们发布了 Amazon Bedrock,作为在 AWS 上使用生成式人工智能构建的一系列新工具的一部分。Amazon Bedrock 是一项完全托管的服务,提供来自 AI21 Labs、Anthropic、Cohere、Stability AI 和亚马逊等领先人工智能公司的高性能基础模型(FM),以及一系列广泛的功能,用于构建生成式人工智能应用程序,在简化开发的同时维护隐私和安全。

Amazon Bedrock 的全面功能可帮助您尝试使用各种顶级 FM,使用微调和检索增强生成 (RAG) 等技术根据您的数据对其进行私人定制,并创建可执行复杂业务任务的托管代理,而这一切都无需编写任何代码。查看我之前的文章,了解有关 Amazon Bedrock 代理的更多信息,以及如何将 FM 连接到贵公司的数据源。

请注意,某些功能(如 Amazon Bedrock 的代理,包括知识库)在预览版中仍然可用。我将在本博文末尾分享更多有关预览版继续提供哪些功能的详细信息。

由于 Amazon Bedrock 是无服务器的,因此您无需管理任何基础架构,而且可以使用您已经熟悉的 AWS 服务将生成式人工智能功能安全地集成和部署到您的应用程序中。

Amazon Bedrock 与 Amazon CloudWatch 和 AWS CloudTrail 集成,可支持您的监控和管理需求。您可以使用 CloudWatch 跟踪使用指标,并为审计目的构建自定义仪表板。借助 CloudTrail,您可以在将其他系统集成到生成式人工智能应用程序时监控 API 活动并排除故障。Amazon Bedrock 还允许您构建符合 GDPR 的应用程序,您还可以使用 Amazon Bedrock 运行受《美国健康保险便携性和责任法案》(HIPAA)监管的敏感工作负载。

开始使用 Amazon Bedrock

您可以通过 AWS 管理控制台、AWS SDK 和 LangChain 等开源框架访问 Amazon Bedrock 中的可用 FM。

在 Amazon Bedrock 控制台中,您可以浏览 FM 并探索和加载每个模型的示例用例和提示。首先,您需要启用对模型的访问。在控制台中,选择左侧导航窗格中的模型访问,然后启用您想访问的模型。启用模型访问后,您可以尝试不同的模型和推理配置设置,以找到适合您的用例的模型。

示例显示了带有示例响应的提示、示例的推理配置参数设置以及运行示例的 API 请求。如果选择在 Playground 中打开,就可以在交互式控制台体验中进一步探索模型和用例。

亚马逊 Bedrock 提供聊天、文本和图像模型游戏场。在聊天游乐场中,您可以使用对话聊天界面尝试使用各种调频。下面的示例使用了 Anthropic 的克劳德模型:

在评估不同模型时,您应该尝试各种提示工程技术和推理配置参数。提示工程是一项令人兴奋的新技能,其重点是如何更好地理解调频并将其应用于您的任务和用例。有效的提示工程是指精心设计完美的查询,以最大限度地利用人工智能并获得适当而精确的响应。一般来说,提示应该简单明了,避免模棱两可。您还可以在提示中提供示例,或鼓励模型对更复杂的任务进行推理。

推理配置参数会影响模型生成的响应。 TemperatureTop PTop K 等参数可以控制随机性和多样性,而 Maximum LengthMax Tokens 可以控制模型响应的长度。请注意,每个模型都有一组不同但往往重叠的推理参数。这些参数要么在不同模型之间命名相同,要么足够相似,以便在尝试不同模型时进行推理。

在 AWS 与 DeepLearning.AI 合作开发的 "使用大型语言模型的生成式人工智能 "点播课程第 1 周中,我们将更详细地讨论有效的提示工程技术和推理配置参数。您还可以查看 Amazon Bedrock 文档和模型提供商的相关文档,了解更多提示。

使用亚马逊 Bedrock API

使用 Amazon Bedrock 非常简单,只需为您的用例选择一个 FM,然后调用几个 API 即可。在以下代码示例中,我将使用 AWS SDK for Python (Boto3) 与 Amazon Bedrock 进行交互。

列出可用的地基型号

首先,让我们设置 boto3 客户端,然后使用 list_foundation_models() 查看可用调频设备的最新列表:

import boto3 import json bedrock = boto3.client( service_name='bedrock', region_name='us-east-1' ) bedrock.list_foundation_models()

使用亚马逊 Bedrock 的 InvokeModel API 运行推理

接下来,让我们使用亚马逊 Bedrock 的 InvokeModel API 和 boto3 运行时客户端执行推理请求。运行时客户端管理数据平面 API,包括 InvokeModel API。

{ "modelId": <MODEL_ID>, "contentType": "application/json", "accept": "application/json", "body": <BODY> }

范例:使用 AI21 实验室的侏罗纪-2 模型生成文本

下面是一个使用 AI21 实验室的侏罗纪-2 Ultra 模型生成文本的示例。我会让模型给我讲一个 "敲敲打打 "的笑话--我版本的 "你好世界"。

bedrock_runtime = boto3.client( service_name='bedrock-runtime', region_name='us-east-1' ) modelId = 'ai21.j2-ultra-v1' accept = 'application/json' contentType = 'application/json' body = json.dumps( {"prompt": "Knock, knock!", "maxTokens": 200, "temperature": 0.7, "topP": 1, } ) response = bedrock_runtime.invoke_model( body=body, modelId=modelId, accept=accept, contentType=contentType ) response_body = json.loads(response.get('body').read())
outputText = response_body.get('completions')[0].get('data').get('text') print(outputText) 
Who's there? Boo! Boo who? Don't cry, it's just a joke!

示例:使用亚马逊的泰坦嵌入模型创建文本嵌入

文本嵌入模型将文本输入(如单词、短语或可能的大文本单元)转化为数字表示,即嵌入向量。嵌入向量在高维向量空间中捕捉文本的语义,对于个性化或搜索等应用非常有用。在下面的示例中,我使用 Amazon Titan Embeddings 模型来创建嵌入向量。

prompt = "Knock-knock jokes are hilarious." body = json.dumps({ "inputText": prompt, }) model_id = 'amazon.titan-embed-text-v1' accept = 'application/json' content_type = 'application/json' response = bedrock_runtime.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) response_body = json.loads(response['body'].read()) embedding = response_body.get('embedding')

[0.82421875, -0.6953125, -0.115722656, 0.87890625, 0.05883789, -0.020385742, 0.32421875, -0.00078201294, -0.40234375, 0.44140625, ...]

请注意,Amazon Titan Embeddings 现已可用。用于文本生成的 Amazon Titan Text 系列模型仍在有限预览中。

使用亚马逊 Bedrock 的 InvokeModelWithResponseStream API 运行推理

InvokeModel API 请求是同步的,并等待模型生成整个输出。对于支持流式响应的模型,Bedrock 还提供了 InvokeModelWithResponseStream API,可让您调用指定的模型,使用所提供的输入运行推理,但在模型生成输出的同时对响应进行流式处理。

流式响应对于响应式聊天界面特别有用,可以让用户继续参与到交互式应用程序中。下面是一个使用 Amazon Bedrock 的 InvokeModelWithResponseStream API 的 Python 代码示例:

response = bedrock_runtime.invoke_model_with_response_stream( modelId=modelId, 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))

数据隐私和网络安全

有了 Amazon Bedrock,您就可以控制自己的数据,您的所有输入和自定义操作在您的 AWS 账户中都是保密的。您的数据(如提示、完成情况和微调模型)不会用于服务改进。此外,这些数据绝不会与第三方模型提供商共享。

您的数据将保留在处理 API 调用的区域。所有数据在传输过程中均使用最低 TLS 1.2 加密。静态数据使用 AWS KMS 管理的数据加密密钥以 AES-256 进行加密。您也可以使用自己的密钥(客户管理的密钥)对数据进行加密。

您可以将 AWS 账户和虚拟私有云 (VPC) 配置为使用 Amazon VPC 端点(基于 AWS PrivateLink 构建),以便通过 AWS 网络安全地连接到 Amazon Bedrock。这样,在 VPC 和 Amazon Bedrock 中运行的应用程序之间就可以实现安全的专用连接。

管理与监督

Amazon Bedrock 与 IAM 集成,可帮助您管理 Amazon Bedrock 的权限。此类权限包括访问 Amazon Bedrock 中特定模型、游乐场或功能的权限。所有 AWS 管理的服务 API 活动(包括 Amazon Bedrock 活动)都会记录到您帐户内的 CloudTrail 中。

Amazon Bedrock 使用 AWS/Bedrock 命名空间向 CloudWatch 发射数据点,以跟踪常用指标,如 InputTokenCount , OutputTokenCount , InvocationLatency 和(数量) Invocations 。通过在搜索指标时指定模型 ID 维度,您可以过滤结果并获得特定模型的统计数据。当您开始使用 Amazon Bedrock 构建生成式人工智能应用时,这种近乎实时的洞察力可帮助您跟踪使用情况和成本(输入和输出令牌计数)并排除性能问题(调用延迟和调用次数)。

计费和定价模式

以下是使用 Amazon Bedrock 时需要注意的有关计费和定价模式的一些事项:

计费 - 文本生成模型按处理的输入标记和生成的输出标记计费。文本嵌入模型按处理的输入标记收费。图像生成模型按生成的图像计费。

定价模式 - Amazon Bedrock 提供两种定价模式,即按需定价和提供吞吐量定价。按需定价允许您以 "即用即付 "的方式使用 FM,而无需做出任何基于时间的期限承诺。调配吞吐量主要适用于需要保证吞吐量以换取期限承诺的大型一致推理工作负载。在这里,您可以指定特定 FM 的模型单元数量,以满足应用程序的性能要求,具体要求由每分钟处理的最大输入和输出令牌数量确定。有关详细定价信息,请参阅 Amazon Bedrock 定价。

现已上市

Amazon Bedrock 今天在 AWS 美国东部地区(弗吉尼亚州北部)和美国西部地区(俄勒冈州)可用。要了解更多信息,请访问 Amazon Bedrock,查看 Amazon Bedrock 文档,在 community.aws 探索生成式人工智能空间,并亲身体验 Amazon Bedrock 研讨会。您可以将反馈发送到 AWS re:Post for Amazon Bedrock 或通过您常用的 AWS 联系人发送。

(预览版)亚马逊 Titan Text 系列文本生成模型、Stability AI 的 Stable Diffusion XL 图像生成模型以及亚马逊 Bedrock 的代理(包括知识库)继续提供预览版。如果您想访问,请通过您常用的 AWS 联系人联系我们。

Antje Barth 是 AWS 的生成式人工智能首席开发者倡导者。她是 O'Reilly 出版物《AWS 上的数据科学》的合著者。Antje 经常在世界各地的 AI/ML 会议、活动和聚会上发表演讲。她还是大数据女性组织杜塞尔多夫分会的共同创始人。