从前,构建AI应用程序以前需要深厚的传统技术经验和一定程度的机器学习知识。然而,这种情况很普遍,开发者们不得不根据需求调整模型、提供GPU并手动优化性能,这需要大量的时间和金钱投入。
虽然这种方法看起来很难,但 AWS 团队打造了 Amazon Bedrock,这是一个工具,允许开发者通过 API 或 AWS 管理控制台中的内置基础模型轻松创建自己的 AI 应用程序。Amazon Bedrock 让开发者可以构建生成式 AI 应用程序,而无需担心直接管理底层堆栈。
放松一下吧!
在这篇文章中,你将了解有关 Amazon Bedrock 的所有内容,包括使用 Amazon Bedrock 的先决条件,包括准备工作和配置,如何开始使用 Amazon Bedrock,使用 Amazon Bedrock 的最佳实践,甚至包括 Amazon Bedrock 的核心概念。除此之外,你还将看到一些如何使用 AWS 的 Bedrock API 的代码示例。因此,这篇文章将作为一个 全方位指南 ,供那些有兴趣使用 Bedrock 构建生成式 AI 应用程序的人参考和使用。
省略
求大家支持Microtica 😅🙏在继续之前,希望你能够加入我们的社区,支持我们在 Microtica 的工作!这样我会不胜感激。⭐️
⭐️ 加入 Microtica 的 Discord 服务器 ⭐️
亚马逊Bedrock是什么?
Amazon Bedrock 是一项服务,它让 DevOps 工程师和团队可以轻松构建生成式 AI 应用程序。通过使用来自 AI 基础设施提供商的基础模型,Amazon Bedrock 为开发者提供了一个现成的 API,从而无需手动构建或调整模型。这种方法简化了构建生成式应用程序的过程,并减少了与底层架构交互的复杂性。
Amazon Bedrock 的好处在正式使用Amazon Bedrock之前,我想先分享一下Amazon Bedrock的一些优点,并举例说明这些优点如何对你的开发工作流程产生积极的影响。
-
更快的开发流程:与手动处理模型相比,你需要不断调整和优化模型,而使用 AWS 只需工作在一个单一的 API 上。采用这种方法,几乎不需要花太多心思在细节上。这种方法节省了大量时间,因为它比直接操作模型所需的努力少得多。
-
例子:我的同事使用 Amazon Bedrock 的文本生成模型创建了一个 AI 助手,无需直接处理任何 ML 模型,这为他节省了时间。他发现这种方法更快捷,因为他只需通过 API 调用就能在几天之内迅速添加 AI 功能,而不是花费数月甚至数周的时间。
- 可扩展性:Amazon Bedrock 建立在 AWS 的云基础设施之上,并使用来自多个公司的模型,包括 AI21 Labs、Anthropic、Cohere、DeepSeek、Luma、Meta、Mistral AI 和 Stability AI。这使得团队可以轻松扩展其应用程序,在高负载工作量下也能保证应用性能,无需手动干预。
- 示例:一家使用 Amazon Bedrock 进行产品推荐的电子商务服务可以在购物季轻松扩展资源,同时保证性能不受影响,也不会出现停机。
- 与 AWS 生态系统集成:由于 Amazon Bedrock 是一个 AWS 产品,它能够无缝地与 Amazon SageMaker、Lambda 和 S3 集成,用于构建、部署和管理应用程序的全过程。
- 示例:一家使用 Amazon Bedrock 进行欺诈检测的银行可以创建自动化工作流。例如,AWS Lambda 可以识别可疑交易,将这些报告存储在 S3 中,并使用 SageMaker 检查模式。
- 成本效益:Amazon Bedrock 采用灵活的计费模式,因此你只需为所使用的资源付费。你无需在昂贵的服务器和模型上花费大量资金,而可以使用 Bedrock 中任何有助于节省成本的模型,同时仍能获得强大的 AI 功能。你可以查看 Amazon Bedrock 的定价模式页面。
- 示例:我的一位同事使用 Amazon Bedrock 自动化博客文章,仅支付了她使用的 API 请求费用,节省了监控和调整 AI 模型的费用。
现在是时候开始动手干实事了。在这部分,我们将看看真正需要做的事情以及开始之前你应该准备些什么。虽然Amazon Bedrock可以处理多种任务,本文只讲如何用AWS管理控制台轻松搭建生成式AI应用。
使用 Amazon Bedrock 前的必备条件
在开始使用Amazon Bedrock之前,你需要做好准备:
- 基本的 Python 技能。
- 一个 AWS 账户:这是首要的:要开始,请创建一个 AWS 账户。
-
AWS 管理控制台:如果你不想写代码,你需要使用控制台来与模型进行交互。或者,你可以使用:
- AWS CLI:你可以使用 CLI 通过 API 创建 AWS CLI 配置文件。有关如何使用此选项的说明,请参阅此文档。此选项需要一些基本的 Python 技能。
- IAM 权限:你还需要为 Bedrock 分配所需的 IAM 角色。
在这篇文章中,我们将使用 AWS 管理控制台来进行操作。您也可以通过 CLI 亲自动手。
基本的AI/ML概念
即使亚马逊Bedrock有助于简化构建AI应用程序的过程,但对AI和机器学习的基本理解很有帮助,因为在使用亚马逊Bedrock时,你可能还会遇到一些情况,比如:
- 基础模型(FMs):这些是亚马逊Bedrock提供的预构建的AI模型,用于生成应用程序。你可能会疑惑亚马逊是否完全拥有这些模型,但实际上有些模型来自不同的公司。
- 提示设计:这是一个创建和改进输入提示的过程,以帮助AI模型生成准确且出色的响应。良好的提示设计可以提高模型的理解,并确保其输出符合预期。
- 模型微调:使用亚马逊Bedrock,可以针对你的需求对模型进行微调。这种方式不同于手动调整。你可以根据需要随时调整模型,以满足你的需求。
亚马逊Bedrock的核心理念
现在,我们来看看亚马逊Bedrock的几个关键概念——通过快速了解它们,你就能更好地理解Bedrock是怎么运作的,并知道怎么才能充分利用它。
理解基础AI模型
我们来看看亚马逊Bedrock使用的某些基础模型以及在使用前需要注意的一些问题。
要找到你可以使用的模型列表、它们的能力以及它们在你所在区域的可用性,请参阅此指南。在该指南中,你会看到有关模型及其生成的内容的详细信息,比如图像、文本或代码。
在使用任何模型之前,你需要注意一些事项:
- 用例:你应该了解模型是否符合你的应用程序需求。例如,如果你正在构建一个生成回复文本的聊天机器人,你需要使用支持文本输出的模型之一。
- 性能与成本:现在,这句话“质量比数量更重要”确实有道理。首先,一些模型工作速度快,但通常较昂贵;其次,如果你想在预算范围内使用模型,你可能需要在性能和成本之间找到一个平衡点。
- 定制化:Amazon Bedrock可以根据需求对模型进行调整。根据你的需求,你可能需要一个可以定制以适应你的项目的模型。
注:Bedrock API 是一项由亚马逊提供的技术接口。
现在,让我们一起来探索Amazon Bedrock的API和SDK的功能,并学习如何使用它们吧。首先,我们将先了解API,然后学习如何使用基础模型。
概述
除了与服务互动外,Amazon Bedrock API 还能做以下事情:
- 使用基础模型来生成文本、创建图像和编写代码
- 通过可调整的设置来改变模型的行为。
- 获取模型的相关信息,比如ARN和ID。
亚马逊 Bedrock 的 APIs 使用 AWS 的标准身份验证和授权方法,这需要 IAM 角色及其权限以确保安全。
认证与权限访问
要先安装最新版本的AWS CLI,并使用你的AWS IAM凭证登录。确保你的IAM用户或角色也有相应的权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MarketplaceBedrock",
"Effect": "允许",
"Action": [
"aws-marketplace:ViewSubscriptions",
"aws-marketplace:Unsubscribe",
"aws-marketplace:Subscribe"
],
"Resource": "*"
}
]
}
切换到全屏 退出全屏
这项政策允许您使用 API 来运行模型。要继续与 Amazon Bedrock API 互动,您可以参考和阅读这些文档。
- Amazon Bedrock API 参考文档:在此文档中,您将找到可能需要使用的服务端点。
- 使用 Amazon Bedrock API 入门指南:本指南将带您了解有关 Amazon Bedrock API 的所有必要信息,从安装要求到操作指南,它是一个更为详细的设置指南,帮助您完成整个设置过程。
AWS SDK 集成
AWS 提供了 SDK,可以与您喜爱的编程语言(比如 Python、Java、Go、JavaScript 和 Rust 等)集成的方式。现在,我们来看一些不同语言中如何使用的示例。
- Python ( Boto3 ) :
import logging
import json
import boto3
from botocore.exceptions import ClientError
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def list_foundation_models(bedrock_client):
try:
response = bedrock_client.list_foundation_models()
models = response["modelSummaries"]
logger.info("找到了 %s 个基础模型。", len(models))
return models
except ClientError:
logger.error("无法获取基础模型列表。")
raise
def main():
bedrock_client = boto3.client(service_name="bedrock")
fm_models = list_foundation_models(bedrock_client)
for model in fm_models:
print(f"模型: {model['modelName']}")
print(json.dumps(model, indent=2))
print("---------------------------\n")
logger.info("完成了。")
if __name__ == "__main__":
main()
全屏 全屏退出
这是一个清晰的例子来展示如何用Python(Boto3)展示可用的Amazon Bedrock模型有哪些。如果你想了解更多关于Python SDK的工作原理,阅读这个指南(https://docs.aws.amazon.com/code-library/latest/ug/python_3_bedrock_code_examples.html)。
- JavaScript 示例(AWS SDK for JavaScript 版本 3)
import { fileURLToPath } from "node:url";
import {
BedrockClient,
列出基础模型命令,
} from "@aws-sdk/client-bedrock";
const REGION = 'us-east-1'; // 区域为 'us-east-1'
const client = new BedrockClient({ region: REGION });
export const main = async function () {
const command = new 列出基础模型命令({});
const response = await client.send(command);
const models = response.modelSummaries;
console.log("=".repeat(42) + '');
for (const model of models) {
console.log("=".repeat(42));
console.log(` 模型: ${model.modelId}`);
console.log("-".repeat(42));
console.log(` 名称: ${model.modelName}`);
console.log(` 提供商: ${model.providerName}`);
console.log(` 模型ARN: ${model.modelArn}`);
console.log(` 输入模态: ${model.inputModalities}`);
console.log(` 输出模态: ${model.outputModalities}`);
console.log(` 支持的自定义项: ${model.customizationsSupported}`);
console.log(` 支持的推理类型: ${model.inferenceTypesSupported}`);
console.log(` 生命周期状态: ${model.modelLifecycle.status}`);
console.log(`${"=".repeat(42)}\n`);
}
const active = models.filter(
(m) => m.modelLifecycle.status === 'ACTIVE',
).length;
const legacy = models.filter(
(m) => m.modelLifecycle.status === 'LEGACY',
).length;
console.log(
`在${REGION}中有${active}个活动和${legacy}个过时的基础模型。`,
);
return response;
};
if (process.argv[1] === fileURLToPath(import.meta.url)) {
await main();
}
切换到全屏 退出全屏
上面的代码示例还列出了可用的Bedrock模型列表。要了解更多关于如何使用JavaScript SDK的信息,请参阅此指南:在下方链接中,您可以看到关于如何使用JavaScript SDK的示例代码:查看示例代码
这里有一些代码示例展示了如何将Bedrock SDK集成到您喜爱的编程语言中,您可以在[这个指南]中找到它们。
了解 Amazon Bedrock API 的响应
现在,让我们来看看Amazon Bedrock提供的主要模型预测API功能:
- InvokeModel – 发送一个请求并得到回应。
- Converse – 支持连续对话,通过加入之前的聊天内容。
此外,Amazon Bedrock 支持 InvokeModelWithResponseStream
和 ConverseStream
流式响应。
要看看当你用 InvokeModel
和 Converse
提交一个单独的提示时会收到什么样的回复,可以参考下面的指南。请注意,InvokeModel
和 Converse
是专门术语。
- Converse API:本指南展示了如何使用Amazon Bedrock的Converse API。它还介绍了如何使用Amazon Bedrock运行时端点来发送请求,以及您使用
Converse
或ConverseStream
时收到的响应示例。 - InvokeModel:本指南解释了如何使用Amazon Bedrock中的
InvokeModel
操作。它还涵盖了如何向基础模型发送请求并设置参数以获得最佳结果,以及如何管理和处理响应。
现在,让我们使用AWS管理控制台开始在Amazon Bedrock构建我们的第一个应用程序。对于这个项目,我们将创建一个仅处理文本的聊天机器人。
第一步:在 AWS 管理控制台中开始使用 Amazon Bedrock 服务
首先,从主 AWS 登录 URL 登录 AWS 管理控制台。登录后,您会进入仪表板。在仪表板中,找到并选择 AmazonBedrock 选项。也可以在 AWS 搜索栏中搜索 'Bedrock'。
在选择了亚马逊Bedrock之后,前往模型访问标签页,并确保通过请求权限来访问这些亚马逊Titan文本生成模型。
选择你想要使用的模型之后,点击下一步。之后,你会被引导到一个标签页,在那里你需要提交一个访问请求。
使用亚马逊泰坦构建聊天机器人,第二步是构建聊天机器人
转到侧边导航中的Playgrounds部分,然后选择Chat / Text区域。在实验区输入一个提示。点击运行按钮以从Titan的文本模型中生成一个回答。
第 3 步:部署聊天机器人到 AWS Lambda
好了,让我们使用AWS Lambda作为无服务器应用来上线聊天机器人!首先,我们得创建一个AWS Lambda函数。以下是创建AWS Lambda函数的一些步骤:
去 AWS Lambda,然后创建函数。
- 选择 零初始化作者 选项卡并在该选项卡中进行部署配置。请注意应将运行时设置为 Python 3.10。
点击图片查看大图
- 创建一个具有完全访问权限的角色,该角色具有Bedrock和CloudWatch的相关权限。
- 创建函数啦!🚀
在Lambda函数里加点代码,然后点击部署按钮。
import json
import boto3
# 使用Bedrock运行时调用模型
bedrock = boto3.client('bedrock-runtime')
# Lambda函数处理程序
def lambda_handler(event, context):
user_input = event['queryStringParameters']['message']
# 调用模型并传入用户输入
response = bedrock.invoke_model(
body=json.dumps({
"prompt": user_input,
"maxTokens": 200
}),
modelId="amazon.titan-text-lite-v1"
)
# 解析模型返回的数据
model_output = json.loads(response['body'].read().decode('utf-8'))
# 返回HTTP 200状态码和JSON格式的响应
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps({"response": model_output["completions"][0]["data"]["text"]})
}
点击全屏查看,然后退出全屏
步骤 4:通过 API Gateway 部署 API
- 在 功能概览 下,点击 添加触发器 按钮并选择 API网关 选项。
- 创建一个HTTP API并为您的API端点配置安全方法。
- 部署API,搞定啦! 🤘
看看这是关于部署HTTP API的图片
- 记录下你的 Invoke URL(调用URL) 以便与聊天机器人互动!🚀
最终,你可以与你的API端点互动,并用它来开发。
使用亚马逊Bedrock和Anthropic Bedrock来构建代码生成工具现在,让我们构建一个更有趣和技术性的工具。在本节中,我们将使用 Amazon Bedrock 和 Anthropic 的 Claude 2.0 模型来构建一个代码生成工具,该模型以生成代码作为其响应。别担心,我们还是会用到 AWS 管理控制台,不过,这个用例需要用到一些基本的 Python 知识。
步骤 1:进入 Bedrock 并选择使用 Anthropic Claude 2.0 模型。
就像我们在聊天机器人示例中所做的一样,通过AWS管理控制台访问Amazon Bedrock。转到 Playground 部分下的对话/文本部分。
在 选择模型 下拉框中,选择 Anthropic Claude 2.0 模型。选择后,你可以在聊天中输入关于代码的提示。
这个模型超级棒,它不仅能生成代码,还能解释代码的作用和如何运作。它超级快且有效,使用起来非常棒。
如何在 AWS Lambda 上部署代码生成示例
同样,正如我们在第一个用例中所做的一样,我们将使用AWS Lambda来生成代码。
- 创建一个新的Lambda实例
在 Lambda 函数中加入一些 Python 代码(运行时环境:3.9):
import json
import boto3
bedrock = boto3.client('bedrock-runtime')
def lambda_handler(event, context):
prompt = event['queryStringParameters']['prompt']
response = bedrock.invoke_model(
body=json.dumps({
"prompt": f"{prompt}",
"max_length": 300,
"temperature": 0.7,
"k": 0,
"p": 0.75,
"frequency_penalty": 0,
"presence_penalty": 0
}),
modelId="arn:aws:bedrock::account:model/claude-v2-20221215"
)
output = json.loads(response['body'].read().decode('utf-8'))
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps({"code": output[0]["generated_text"]})
}
# 这是一个使用Bedrock Runtime服务的Lambda函数,用于生成文本
进入或退出全屏
第 3 步:部署一个用于代码生成的 API
- 去API 网关,然后选择HTTP API 选项。
- 将其与代码生成器连起来。
- 部署 API 并获取互动的调用 URL。
在使用Amazon Bedrock的过程中,需要特别注意安全、成本控制和性能。通过遵循这些最佳实践,您可以确保您的AI应用程序既安全又高效且成本可控。
1. 数据安全与隐私.
最好是让您的数据保持私密,因为AI模型通常涉及处理敏感的用户数据,因此安全性非常重要。在使用AWS Bedrock时,这里有一些实践可供参考:
- 使用IAM角色和策略: 按照最小权限原则限制访问Bedrock API和数据存储。这意味着只赋予用户必要的权限,不多给一点。
- 加密数据: 使用AWS密钥管理服务(KMS) 来保护存储中的敏感数据以及数据在传输中的安全。
- 监控和审计访问: 启用CloudWatch 和 AWS Config 来跟踪访问AI模型、数据和日志的人以及他们是如何访问的。
- 屏蔽数据: 在将数据发送到Bedrock之前,移除任何个人身份信息(如姓名、地址等)以降低风险。
2. 成本优化:控制 Bedrock 使用量和费用 💰
AWS Bedrock 使用的是 按用量收费 的计费模式,因此,合理控制成本非常重要。您将根据使用量来计费。以下是如何用 AWS Bedrock 来节省成本的方法:
- 选择正确的基础模型: 不同的模型费用不同;选择最适合您需求和预算的那个。
- 优化 API 调用: 通过缓存和批处理减少不必要的 API 请求。
- 监控使用情况: 使用 AWS 成本管理器 和 AWS 预算 跟踪您的支出,并设置任何意外成本增加的警报。
- 使用自动扩展: 在使用 Bedrock 和 AWS Lambda 时,调整请求的数量来减少不必要的 API 调用。
3. 偏见与公平
AI模型可能会根据训练数据中的偏见而产生偏见,这可能会引起问题,我们需要采取措施来解决这个问题。为了确保公平性:
- 确保训练数据的多样性和代表性,
- 定期检查模型输出,识别并纠正任何偏见,
-
使用公平性指标评估和改进模型。
- 检查模型的回应: 用各种提示来测试模型的输出,找出任何偏见或错误。
- 使用多样化的数据微调模型: 在调整模型时,确保数据涵盖各种群体和视角。
4. 性能优化
为了加快响应速度和提升整体性能,请参考以下实践:
- 调整 API 参数设置: 调整设置如
temperature
和maxTokens
以获得最佳效果。 - 使用 GPU 优化的基础设施: 如果流量很大,请使用 AWS 应用程序负载均衡器 更高效地分配请求。
- 降低延迟: 使用 AWS Global Accelerator 或 AWS 边缘服务将应用程序更靠近用户。
AWS Bedrock使集成AI变得更加容易,通过提供来自Amazon及其他供应商基础设施的可扩展基础模型,而无需自己训练模型和维护基础设施。要获得最佳效果,开发人员可以更加专注于安全性、成本效益和性能优化,而无需自己动手。
继续探索 AWS Bedrock 的话,开发人员应该尝试各种不同的模型,根据需要调整输出,并与其他 AWS 服务进行整合。参考或查阅 Amazon Bedrock 的指南、博客和其他资源可以帮助您充分利用 Bedrock 的功能,并激发更多 AI 驱动应用的新想法。
在你走之前… 😄
感谢您花时间了解如何使用AWS Bedrock构建AI应用程序。如果您觉得这篇文章有用,请考虑通过注册一个账号并加入我们的社区 一起加入 来支持Microtica。您的支持对我们非常重要,可以帮助我们不断改进并为开发者社区提供更多有价值的资源!
共同學習,寫下你的評論
評論加載中...
作者其他優質文章