Amazon Bedrock 多模型接入 – Bedrock Connector 部署与使用指南

293eb1221a4ea939c2c34e874ba5ac36.gif

在 Claude 3 发布之后,其强大的多模态推理、视觉能力、翻译、总结、写作、编码等能力,再次激发生成式 AI 的热潮。 Amazon Bedrock 是首个 Claude 3 全托管且正式可用的服务。

伴随越来越多的业务场景落地,我们也收集了很多针对 Amazon Bedrock 中的 Claude 3 的需求和反馈。


我们开发了 Bedrock Connector 并开源,供大家测试使用,和代码参考。

Bedrock Connector 主要解决以下几个需求:

1、多租户管理,通过 API_KEY & Host 方式使用 Claude

2、针对多租户的计费、费用限额、预充值管理

3、兼容更多的客户端工具的访问方式,如以下常见客户端

  • ChatHub

  • AIChatOne

  • OpenAI Translator

  • siders

Bedrock Connector 

部署架构介绍

Bedrock Connector 通过 Docker Image 的方式提供。

生产环境中,根据业务和架构情况,有三种建议到部署方式:

  1. 部署在 Amazon Elastic Kubernetes Service(Amazon EKS) ;

  2. 部署在 Amazon Elastic Container Service(Amazon ECS) ;

  3. 通过 Amazon Lambda + Lambda Function URL 部署。

以上三种方式,都是从 Amazon Elastic Container Registry(Amazon ECR)拉取 Image 。客户端可以通过 API_KEY & Host 访问, Aurora 用来存储 API_KEY 信息,费用信息等。

0fd4be7bbf54402d7541b74f666c2d28.jpeg

在介绍完 Bedrock Connector 架构之后,我们开始逐步介绍部署步骤。本文使用 Amazon ECS 进行部署演示。

环境准备

部署资源列表:

  • Aurora Postgresql Serverless V2 :存储 Bedrock Connector 数据

  • ECR :存储 Docker Image

  • ECS+Fargate :运行 Bedrock Connector

  • Cloudfront : Bedrock Connector 的 HTTP/HTTPS 接入点

1

创建数据库环境

Bedrock Connector 使用 Amazon Aurora PostgreSQL Serverless 作为数据存储。它会根据应用程序的需求自动启动、关闭以及扩展或缩减容量。可在云中运行数据库,而无需管理任何数据库实例。 Amazon Aurora Serverless v2 可在不到一秒钟的时间内立即扩展到能够处理数十万个事务的能力。在扩展过程中,系统会以极为精细的增量调整容量,从而确保恰好提供应用程序所需的数据库资源量。

创建 Aurora Progresql Serverless v2 集群

1、登录 Amazon Management Console 并通过打开 Amazon RDS 控制台;

2、在导航窗格中,选择 Databases(数据库)。

3、选择创建数据库。在显示的页面上,选择以下选项:

  • 对于引擎类型,选择 Aurora( PostgreSQL 兼容)

  • 对于版本,请选择 Aurora Serverless v2 支持的版本之一。

4、对于数据库实例类,请选择 Serverless v2 。

5、对于容量范围,您可以接受默认范围。或者,您可以为最小和最大容量单位选择其他值。您可以从最少 5 个 ACU 到最多 128 个 ACU 中进行选择,增量为 0.5 个 ACU 。

有关 Aurora Serverless v2 容量单位的更多信息,请参阅 Aurora Serverless v2 容量和 Aurora Serverless v2 的性能和扩缩。

170832a9f4a458633df9b1d84e0fda0e.png

Aurora Serverless v2

扫码了解更多

c1e6b195e14c7e2f85dad10e24c245a2.png

Aurora Serverless v2容量

扫码了解更多

fc60791031b8517f088fc83cbf293aeb.png

Aurora Serverless v2 

的性能和扩缩

扫码了解更多

左右滑动查看更多

使用 RDS Query Editor 执行 SQL

1、在导航窗格中,选择 Query Editor (查询编辑器)。

2、选择要对其运行 SQL 查询的 Aurora 数据库集群。

3、对于 Actions (操作),选择 Query (查询)。如果您之前未连接到数据库,则 Connect to database(连接到数据库)页面将打开。

efc1bac19789f7fa50a7f15f2ef42ba3.png

4、在 Query Editor 中,创建 Bedrock Connector 使用的数据库

CREATE DATABASE brconnectordb;

在 Bedrock Connector 启动过程中,系统会自动检查相关表信息,如果表不存在,会自动创建表。

注意:

1、如果是使用 RDS PostgreSQL,修参数改 rds.force_ssl = 0 ,重启 RDS 生效。

2、RDS PostgreSQL 参数默认值是 rds.force_ssl = 1 ,Bedrock Connector 未使用 SSL 连接数据库。

3、而 Aurora PostgreSQL 参数默认值是 rds.force_ssl = 0 ,无需修改。

Bedrock Connector 环境部署

本文使用 Amazon ECS 进行部署演示。下面就会详细介绍镜像拉取、 Amazon ECR 创建、镜像托管、 Amazon ECS 环境部署等步骤。

1

构建镜像

1、下载代码

git clone https://github.com/aws-samples/sample-connector-for-bedrock.git

左右滑动查看完整示意

2、进入目录

cd sample-connector-for-bedrock/

左右滑动查看完整示意

3、构建 connector 和 WebUI 服务。在构建完成之后, connector & WebUI 会分别存在目录 dist/public 和 dist/server 中

npm run build
# or
yarn build

4、创建 Dockerfile , ./Dockerfile 需要创建在代码根目录

FROM node:20


COPY ./dist /app
WORKDIR /app
COPY ./src/scripts/create.sql ./src/scripts/create.sql
COPY ./package.json .


RUN npm install --omit=dev


HEALTHCHECK --interval=5s --timeout=3s \
  CMD curl -fs http://localhost:8866/ || exit 1


EXPOSE 8866


CMD ["node", "server/index.js"]

左右滑动查看完整示意

5、执行构建命令

docker build -t <bedrock-connector-tag> .

左右滑动查看完整示意

6、查看镜像

# docker images
REPOSITORY          TAG       IMAGE ID       CREATED              SIZE
bedrock_connector   0.0.1     a6fb8fa533be   About a minute ago   1.31GB

左右滑动查看完整示意

至此,Docker Image 已经构建完成。

2

使用 Amazon ECR 进行镜像管理

Amazon Elastic Container Registry( Amazon ECR )是一个完全托管式容器注册表,可提供高性能托管,因此您可以在任何地方可靠地部署应用程序映像和构件。

开始创建 ECR

1、选择 Private ,输入 ECR 名称,点击保存;

2、点击 View push commands ;

bc20cd023351a29abee101f163ff427c.png

3、点击 View push commands ,即可获得相关命令;

79e5fca14042d5a3ef3528d56c53e576.png

4、根据提示即可完成 Image 上传;

268fd878294af63e2b2815a55142e023.png

5、命令详情如下:

获取 ECR 登录 token ;

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789987.dkr.ecr.us-east-1.amazonaws.com

左右滑动查看完整示意

给 image 打标签;

docker tag bedrock_connector:0.0.1 123456789987.dkr.ecr.us-east-1.amazonaws.com/bedrock_connector:latest

左右滑动查看完整示意

上传 image ;

docker push 123456789987.dkr.ecr.us-east-1.amazonaws.com/bedrock_connector:latest

左右滑动查看完整示意

6、上传完成后,可以在 ECR 中查看到 image ;

6b45d60bf4ec9eb9e226387c2d927daf.png

3

创建 Amazon ECS + Fargate

Amazon Elastic Container Service( Amazon ECS )是一项完全托管式容器编排服务,可帮助您更有效地部署、管理和扩展容器化应用程序。它与亚马逊云科技环境深度集成,为使用 Amazon ECS Anywhere 在云端和本地运行容器工作负载提供易于使用的解决方案,并具有高级安全特征。

创建任务定义

任务定义类似于应用程序的蓝图。每次在 Amazon ECS 中启动任务时,您都指定任务定义。这样,服务知道要用于容器的 Docker 映像、任务中要使用的容器数量以及为每个容器分配的资源。

1、在导航窗格中,选择 Task Definitions 。

2、选择 Create new Task Definition(创建新的任务定义) ,并参考下图完成设置。注意: Task Role 需要赋予访问 Bedrock Claude 3 的权限。

d3ae07c9acd0ad544aa6b2f4fc3bb7cc.png

3、输入服务端口,Bedrock Connector 通过 8866 对外提供服务访问。

b2d20eee216dfdd2df422117f55b47d8.png

4、设置环境变量,在 ECS 服务启动时,会将以下参数传入容器内。

44ea9ca00c299af580473146adf8c8f4.png

创建 Service(服务)

1、使用刚刚生成的 Task Definition ,创建 Service (服务)。

2e8018cbd5cf5297d15e219a0412eef1.png

2、在 Load balancing 选项中,输入提前准备好的 Network Load Balance“ecs-brconnector” ,并设置 Listener 信息。

2bc75ff591404bbbb033b2eb78f30f66.png

3、 Network Load Balance 信息如下:

49e7e38f1c4a2664007c3f972e5c39bd.png

注意: NLB 要作为 Cloudfront 的源,所以 NLB 安全组的 Inbound Rule 要允许 Cloudfront prefix list 访问 80 端口

com.amazonaws.global.cloudfront.origin-facing 。

d342b8064c37ae47432b7e8e873fc5e8.png

4

Cloudfront 的设置

在完成以上配置之后,通过 NLB 的 DNS name 已经可以通过 HTTP 方式访问 Bedrock Connector 了。那为什么我们要配置 Cloudfront 呢?因为部分 Client 使用 HTTPS 的方式访问,需要 Cloudfront 来接收 HTTPS 的请求。根据实践,使用 Cloudfront ,会有更多收益。

 如果您要直接从 Amazon Elastic Load Balancer( ELB )或 Amazon EC2 实例向 Internet 上的最终用户提供动态内容(例如 Web 应用程序或 API ),则可以使用 Amazon CloudFront 作为内容分发网络来提高内容的性能、可用性和安全性。借助 Amazon CloudFront ,最终用户连接将在距离他们更近的 CloudFront 站点终止,这有助于减少建立连接所需的总体往返时间。这些 CloudFront 站点与具有高度弹性的 Amazon 主干网络相连,后者可以提供卓越的性能和可用性,以便连接到 Amazon 源。

创建分配步骤

1、登录 Amazon Management Console 并打开 CloudFront 控制台;

2、在导航窗格中,选择分配,然后选择创建分配;

3、指定分配的设置。有关更多信息,请参阅您创建或更新分配时指定的值。

94caf7c1c879dd7f8123c14cf7543075.png

分配设置参考

扫码了解更多

4、保存您的更改。

5、CloudFront 创建分配后,分配的 “状态” 列的值将从 InProgress 变为 “已部署”。如果您选择启用该分配,其状态变为已部署后就已就绪,可以处理请求了。

5

重点设置信息

1、origin设置

70472a1ab59791793e23960209d7acc6.png

2、Behaviors 设置

bc3b3d1883f009001883847a1a8ca690.png

1eb308a741f07c2e078052305a6dc840.png

3、Cache Policies 设置

  • TTL 时间设置

  • Headers 设置

9bcde5d18fbc245698ee4fb8ba12d59a.png

在 Cloudfront 状态可用之后,整个 Bedrock Connector 环境就已经部署完成。接下来我们进入客户端使用测试环节。

客户端配置使用

1

添加用户

1、创建管理员 API KEY(修改 name 和 email )


第一个用户需要通过 API 创建,不可以通过控制台创建。创建一个 admin 用户:

curl https://<Distribution>.cloudfront.net/admin/api-key/apply \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -d '{
  "name": "yourmail",
  "group_id": 1,
  "role": "admin",
  "email": "yourmail@amazon.com",
  "month_quota": 1.00
}'

左右滑动查看完整示意

输出:

{"success":true,"data":{"id":1,"name":"yourmail","email":"yourmail@amazon.com","api_key":"br-w3MF8z6WQYAtbbMhhN2a0Hp9LoZzm","role":"admin","month_quota":"1.0000000000","balance":"0.0000000000"}}

左右滑动查看完整示意

2、查看用户信息:

curl "https://<Distribution>.cloudfront.net/admin/api-key/list?q=yourmail" \
  -H "Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

左右滑动查看完整示意

输出:

{"success":true,"data":{"items":[{"id":1,"group_id":1,"api_key":"br-w3MF8z6WQYAtbbMhhN2a0Hp9LoZzm","name":"yourmail","email":"yourmail@amazon.com","role":"admin","total_fee":"0.0000000000","balance":"0.0000000000","month_fee":"0.0000000000","month_quota":"1.0000000000","created_at":"2024-04-12T15:54:28.967Z","updated_at":"2024-04-12T15:54:28.967Z"}],"total":"1","limit":20,"offset":0}}

左右滑动查看完整示意

3、通过 API 再创建两个 user key :

curl https://<Distribution>.cloudfront.net/admin/api-key/apply \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -d '{
  "name": "user1",
  "group_id": 1,
  "role": "user",
  "email": "yourmail@amazon.com",
  "month_quota": 1.00
}'




curl https://<Distribution>.cloudfront.net/admin/api-key/apply \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -d '{
  "name": "user2",
  "group_id": 1,
  "role": "user",
  "email": "yourmail@amazon.com",
  "month_quota": 1.00
}'

左右滑动查看完整示意

4、通过命令行测试 Bedrock Claude 3 :

curl https://<Distribution>.cloudfront.net/v1/chat/completions \
          -H "Content-Type: application/json" \
          -H "Authorization: Bearer br-fC9fVwOgUsIZnFqfkfHduXRmvRFGA" \
          -d '{
          "model": "claude-3-sonnet",
          "messages": [
            {
              "role": "user",
              "content": "你好"
            }
          ],
          "stream": false,
          "temperature": 1,
          "max_tokens": 4096
        }'

左右滑动查看完整示意

5、现在你已经可以正常访问 Bedrock Claude 3 ,测试如下:

{"choices":[{"message":{"content":"你好,很高兴和你交谈。作为一个人工智能助手,我会尽我所能为你提供帮助和回答你的问题。如果有任何我可以为你做的事情,请随时告诉我。我会耐心地倾听并尽最大努力解答。","role":"assistant"}}],"usage":{"completion_tokens":92,"prompt_tokens":10,"total_tokens":102}}%

左右滑动查看完整示意

2

WebUI 服务配置与使用

1、管理服务端访问

https://<Distribution>.cloudfront.net/manager

左右滑动查看完整示意

2、输入 Host 和 API Key ,即可登录

7cde32e131ed87349e7f0150ee352838.png

3、费用查询:

可以查询整体费用的统计;

293c5f94be2358d7c3a4dc578d9f0030.png

可以查看费用明细;

a8c0fc73abde3a4b1cf9287b72c20238.png

4、通过控制台( New 按钮)创建新用户

57628cc06e5138fff362c01a94b45f0a.png

3

Bedrock Client 配置与使用

客户端工具,我们使用 BRClient 进行演示。BRClient( “Bedrock Client” 的简称)是开源的桌面应用,为用户提供了友好的图形界面,可以轻松访问和使用 Claude 3 的功能。更多 BRClient 信息,请查询文末参考文档。

打开 Brclient ,选择左下角设置按钮

1、选择 True

2、填入 Cloudfront Distribution

3、填入 User API Key

4、选择模型

61f78580fdc8c3758537e87f00470336.png

开启生成式 AI 之旅

f178f18d7fcb280caad7b95b4cef46b8.png

也可以选择对应的“面具”,进行更专业的对话

91dfb0da8eccdc9815352a11992b7e78.png

 API 使用说明

开发者可以参考以下 API 代码样例,进行应用集成。

1

聊天 API

POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


{
  "model": "claude-3-sonnet",
  "messages": [
    {
      "role": "user",
      "content": "ping"
    }
  ],
  "stream": true,
  "temperature": 1,
  "max_tokens": 4096
}

左右滑动查看完整示意

2

管理端

1、创建一个 API key(用户)

POST /admin/api-key/apply
Content-Type: application/json
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


{
  "name": "jack",
  "group_id": 1,
  "role": "user",
  "email": "",
  "month_quota": 1.00
}

左右滑动查看完整示意

2、创建一个 API key(用户),并且有管理员权限

POST /admin/api-key/apply
Content-Type: application/json
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


{
  "name": "rob",
  "group_id": 1,
  "role": "admin",
  "email": ""
}

左右滑动查看完整示意

3、更新 API key 信息

POST /admin/api-key/update
Content-Type: application/json
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


{
  "id": 2,
  "name": "张三",
  "month_quota": 10.00
}

左右滑动查看完整示意

4、给 API key 充值

POST /admin/api-key/recharge
Content-Type: application/json
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


{
  "api_key": "br-xxxxxxxxxxxxxxx",
  "balance": 0.23
}

左右滑动查看完整示意

5、充值历史

GET /admin/payment/list?key_id=
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

6、列表显示 API key

GET /admin/api-key/list?q=&limit=10&offset=
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

7、列表显示会话

GET /admin/session/list?q=&limit=10&offset=&key_id=
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

8、列表显示对话

GET /admin/thread/list?q=&limit=10&offset=&key_id=&session_id=
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

3

 User API

1、我的会话

GET /user/session/list?q=&limit=10&offset=
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

2、我的会话详情

GET /user/session/detail/1
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

3、我的对话列表

GET /user/thread/list?q=&limit=10&offset=&session_id=
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

4、我的对话详情

GET /user/thread/detail/1
Authorization: Bearer br_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

左右滑动查看完整示意

至此,通过本篇的内容,已经完成了 Bedrock Connector 的部署与使用。快速开启你在 Amazon Bedrock 中的 Claude 3 之旅吧!

最后,感谢 Bedrock Connector 的开发者们为该项目做出的贡献。

开发者名单 郭强、黄俊杰、刘加昌、买乌、粟伟、谢正伟、张孝峰

(排名不分先后,按姓名拼音字母排序) 

参考文档

31e8348f1df22790a79956939ca0aa2a.png

参考文档1

扫码了解更多

856cc8cf624ea2369de7a8e7537aaea8.png

参考文档2

扫码了解更多

左右滑动查看更多

前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用、第三方生成式人工智能内容并非由亚马逊云科技提供,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

本篇作者

986b95da755b3ef680ca1e944be94bd1.jpeg

许晓亮

亚马逊云科技解决方案架构师,负责基于亚马逊云科技云计算方案架构的咨询和设计,在国内推广亚马逊云科技云平台技术和各种解决方案。擅长数据库和大数据领域,结合云原生特性,为客户设计高效稳定的全球化系统方案。

2e0cc634db0e01b72519fff7a9473d11.jpeg

谢正伟

亚马逊云科技资深解决方案架构师,致力于云计算方案架构设计、应用和推广。具有 20 多年 IT 行业工作经验,擅长应用的架构和开发,历任全栈开发工程师、应用架构师、系统架构师等。

987d017fe736f7846414b4707bfb0c5f.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

点击阅读原文查看博客,获得更详细内容

听说,点完下面4个按钮

就不会碰到bug了!

24249897ed5fb2254f969eb06fa264a0.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值