亚马逊AWS官方博客

通过 Bedrock Access Gateway 解决方案快速访问 Amazon Bedrock 的多种大语言模型

1. 概述

亚马逊云科技的 Amazon Bedrock 服务支持一系列领先的基础模型,为客户提供多种选择,满足不同业务场景的需求。其中,Anthropic 公司的 Claude3 是在 Amazon Bedrock 新上线的大型语言模型(Large Language Model,LLM)。与 OpenAI 的 GPT-4 等模型相比,Claude3 在保持高性能水平的同时,还能为客户带来更低的使用成本。

如果你已经在使用 OpenAI 的 API 或者 SDK 开发生成式 AI(Generative AI)应用,想快速体验或切换到 Amazon Bedrock 而不想更改你的应用代码,或者你想使用一些不直接支持 Amazon Bedrock 的开源项目或工具,又不想修改其代码,那么可以使用亚马逊云科技发布的 Bedrock Access Gateway(BAG)解决方案。它提供了兼容 OpenAI API 的代理,使你不需要修改任何代码,就可以把 OpenAI API 的调用转发到 Amazon Bedrock,从而获得包括 Claude3 在内的多种 LLM 的优秀能力。

该解决方案已经开源,请访问 https://github.com/aws-samples/bedrock-access-gateway 了解项目源代码和详情。

2. 整体架构

Bedrock Access Gateway 解决方案的架构非常简洁,如图 1 所示。

图 1 Bedrock Access Gateway 解决方案架构图

BAG 采用无服务器 (Serverless)架构,通过 Application Load Balancer(ALB)对外提供访问,由 Amazon Lambda 处理 API 请求,用户不需要登录或管理后台服务器。用户也可以根据需要修改此架构,例如私有化部署,不把 ALB 暴露在公网,或者通过 Amazon Fargate 服务以容器替换 Amazon Lambda 来处理 API 请求,从而实现更低的延迟。

截至 2024 年 4 月,Amazon Bedrock 支持以下模型:

  • anthropic.claude-instant-v1
  • anthropic.claude-v2:1
  • anthropic.claude-v2
  • anthropic.claude-3-sonnet-20240229-v1:0 (默认)
  • anthropic.claude-3-haiku-20240307-v1:0
  • meta.llama2-13b-chat-v1
  • meta.llama2-70b-chat-v1
  • mistral.mistral-7b-instruct-v0:2
  • mistral.mixtral-8x7b-instruct-v0:1
  • mistral.mistral-large-2402-v1:0
  • cohere.embed-multilingual-v3 (embedding)
  • cohere.embed-english-v3 (embedding)

在实际应用中,为方便用户在迁移时不用改造任何现有代码,当请求中模型名(model 参数的值)是以 gpt 开始时,例如 gpt-3.5-turbo,BAG 会直接调用默认模型,如 anthropic.claude-3-sonnet-20240229-v1:0。用户可以在部署完成后通过修改 Lambda 的环境变量 DEFAULT_MODEL 来指定默认模型。

Parameter Store 服务存储 API Key 参数,该参数的值用于 API 访问的认证。

BAG 目前支持的 API 与功能包括:

  • 通过 Server-Sent Events(SSE)技术提供流式响应
  • Model API
  • Chat Completion API
  • Embedding API
  • Function Call/Tool Call
  • Multimodal API

亚马逊云科技会根据客户的需要继续增加和更新 API 功能,你可以关注 GitHub 仓库来了解更新情况。有关解决方案的升级操作,请参考 BAG 的部署说明

3. 解决方案部署

3.1 前提条件

BAG 在运行时会调用 Amazon Bedrock 中的模型,所以需要先在 Amazon Bedrock 中启用相关模型的访问权限。有关具体方法,可以参考《Amazon Bedrock 用户指南》中的“模型访问权限”部分。启用权限成功后,Amazon Bedrock 控制台的页面如图 2 所示。

图 2 在 Amazon Bedrock 中启用模型访问权限

3.2 部署步骤

BAG 支持快速部署、开箱即用。整个部署和应用过程包括三个步骤:创建自定义 API Key、部署堆栈、配置环境变量。你只需要大约 5 分钟就可以在你的亚马逊云科技账户里搭建起一套兼容 OpenAI API 的代理。

第一步:创建自定义 API Key

API Key 用于 API 访问的认证。登录你的亚马逊云科技控制台,访问 Systems Manager 服务,进入 Parameter Store,单击“创建参数”按钮。如图 3 所示,在创建参数页面,填写并记下用于存储 API Key 的参数的名字,如 my-api-key,参数类型选择“Secure String”,参数值就是未来用于认证的 API Key,可使用任何不带空格的字符串,建议复杂一些,以保证 API Key 的安全性。需要注意的是,目前版本暂不支持含有“/”的表示层次结构的参数名,如/my/api/key。

图 3 创建自定义 API Key 参数

第二步:部署 Amazon CloudFormation 堆栈

在浏览器中打开一个新的空白页面,访问 BAG 的 Amazon CloudFormation 堆栈模板启动链接。登录亚马逊云科技的控制台后,跳转到 Amazon CloudFormation 创建堆栈页面,如图 4 所示。

图 4 部署:设定 Amazon CloudFormation 模板

单击“下一步”按钮,在 ApiKeyParam 参数文本框里填上在第一步创建的参数的名称(如 my-api-key),如图 5 所示。

图 5 部署:填写 API Key 参数

单击“下一步”按钮,直到最后的提交页面,勾选“我确认,AWS CloudFormation 可能创建 IAM 资源”,如图 6 所示。

图 6 部署:勾选确认项

单击“提交”按钮。部署过程需要大约 3 分钟。在部署完成后,到 CloudFormation 堆栈的“输出”选项卡找到并记下 API Base URL,如图 7 所示。该 URL 将用于后续配置环境变量。

图 7 部署:从输出结果获得 API Base URL

上述部署采用 Lambda 函数处理 API 请求,也可以采用 Amazon Fargate 服务通过容器处理 API 请求,以获得更快的响应。请访问 BAG 的部署说明启动相关的 Amazon CloudFormation 堆栈模板,其他部署步骤都相同。

4 测试与应用

4.1 配置环境变量

在用户或应用程序一侧,要通过 BAG 的代理功能访问 Amazon Bedrock 服务,需要配置环境变量,以确保原先针对 GPT 的 API 请求被发送给 BAG 提供的 URL,并通过 API Key 认证。

在部署完成后,为快速进行 API 测试或 SDK 测试以确认 BAG 代理功能有效,配置环境变量的代码如下:

export OPENAI_API_KEY=<API Key参数的值> 
export OPENAI_BASE_URL=<API Base URL>

如果使用 Windows CMD 环境,代码如下:

set OPENAI_API_KEY=<API Key参数的值> 
set OPENAI_BASE_URL=<API Base URL>

4.2 API 测试

配置好环境变量后,可以通过如下的 curl 命令快速验证 API 有效性。

curl $OPENAI_BASE_URL/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "anthropic.claude-3-sonnet-20240229-v1:0",
    "messages": [
      {
        "role": "user",
        "content": "Hello!"
      }
    ]
  }'

如果使用 Windows CMD 环境,测试命令如下:

curl "%OPENAI_BASE_URL%/chat/completions" ^
  -H "Content-Type: application/json" ^
  -H "Authorization: Bearer %OPENAI_API_KEY%" ^
  -d "{\"model\":\"anthropic.claude-3-sonnet-20240229-v1:0\", \"messages\": [{\"role\":\"user\",\"content\":\"Hello!\"}]}"

API 工作正常时,将返回类似如下 json 格式的响应信息:

{"id":"msg_01H4wAGhcJQ1ruQu2ifYN38J","created":1712540374,"model":"anthropic.claude-3-sonnet-20240229-v1:0","system_fingerprint":"fp","choices":[{"index":0, "finish_reason":"stop","message":{"role":"assistant","content":"Hello! How can I assist you today?"}}],"object":"chat.completion","usage":{"prompt_tokens":9, "completion_tokens":12,"total_tokens":21}}

4.3 SDK 测试

类似地,在配置好环境变量后,可以通过如下 Python 代码测试代理是否有效。

from openai import OpenAI

client = OpenAI()
completion = client.chat.completions.create(
    model="anthropic.claude-3-sonnet-20240229-v1:0",
    messages=[{"role": "user", "content": "Hello!"}],
)

print(completion.choices[0].message.content)

4.4 在 NextChat 应用程序中使用

NextChat(ChatGPT Next Web)是社区中热度较高的 ChatGPT 前端应用程序,但是目前版本不支持访问 Claude3 模型。部署 BAG 后,经过简单配置就可以使用 NextChat 轻松访问 Claude3 以及其他 Amazon Bedrock 上支持的大语言模型。

启动 NextChat 应用后,单击左下角的六边形图标,进入设置页面,如图 8 所示。勾选“自定义接口”复选框,在下面出现“接口地址”和“API Key”文本框,分别填入 BAG 的 API Base URL 和 API Key 参数的值。需要注意的是,接口地址文本框中的字符串最后不包含“/v1”,形式类似 http://xxxxxx.yyyyyy.elb.amazonaws.com/api。

图 8 NextChat 的设置页面

设置完成后,单击左下方的“新的聊天”按钮,就可以与 BAG 配置的默认模型对话了。如图 9 所示,对话中显示人工智能助手“由 Anthropic 公司开发”,说明后台的模型已经切换为 Amazon Bedrock 上的 anthropic.claude-3-sonnet-20240229-v1:0模型(BAG 的默认模型)。

图 9 使用 Claude3 模型后的响应信息

对于其他使用 OpenAI API 的应用,如 AutoGen,也可以采用类似的配置操作,就可以顺利访问 Amazon Bedrock 上的模型。有关更多应用示例,请参考 BAG 的部署说明。你也可以通过 Amazon Bedrock Claude3 Workshop(中文版) 更全面地了解 BAG 和 Amazon Bedrock 的高级使用。

5 安全与其他注意事项

安全与隐私:部署和使用 BAG 十分安全。在默认情况下,它不会记录任何用户的请求和 Amazon Bedrock 的响应,也不会访问用户自己的 OpenAI 密钥。

使用成本:BAG 使用了 ALBAmazon LambdaAmazon FargateAmazon Bedrock 等亚马逊云服务,在使用期间会产生费用,具体金额与使用量、部署区域等因素有关。请访问亚马逊云科技各服务的官方定价页面或 Pricing Calculator 查看详细信息。

响应延迟:与直接使用亚马逊云科技的官方 SDK 访问 Amazon Bedrock 相比,使用 BAG 会有额外的延迟。对于生产环境的应用,建议在部署后进行测试。如果对于延迟敏感,可以考虑使用 Amazon Fargate 版本,或者咨询你的亚马逊云科技业务经理。

多种部署方式:你不仅可以在所有亚马逊云科技提供 Amazon Bedrock 服务的区域云上部署 BAG,也可以在本地部署 Python 代码,构建本地代理服务,然后调用你的亚马逊云科技账户中的 Amazon Bedrock 服务。

6 总结

Bedrock Access Gateway(BAG)解决方案提供了开箱即用、兼容 OpenAI 的代理功能,帮助用户轻松无缝地从 OpenAI 迁移到 Amazon Bedrock,主要具有以下优点:

(1) 非侵入式集成:不需要修改应用代码即可实现无缝迁移。

(2) 开箱即用:提供一键部署的Amazon CloudFormation模版,部署时间约 3 分钟。

(3) 多种模型快速切换:支持 Amazon Bedrock 上多种主流模型,包括 Claude、Llama2、Mistral/Mixtral 系列模型等,除了调整 DEFAULT_MODEL,也可以直接在 API 请求的 model 参数中指定。

(4) 兼容 OpenAI:支持 OpenAI 的 API 和 SDK,支持 Server-Sent Events(SSE)流式响应。

(5) 开源:项目开源,客户可以根据需要进行客制化(例如私有化部署、在 EKS 上运行等)。

LLM 应用的效果由多方面因素决定,包括基础模型、提示词工程、知识库质量等。BAG 从 API 适配的角度解决了由 GPT 模型向 Claude3 模型的迁移,确保用户能够高性价比地使用高性能的大语言模型;亚马逊云科技推出的另一个工具 Claude Prompt Generator 则从提示词工程的角度,解决了提示词转换和优化的问题,我们将另文介绍。

本篇作者

戴晓斌

亚马逊云科技大中华区解决方案研发中心资深解决方案架构师,主要负责云上解决方案的设计与研发,在无服务器、容器、数据分析等方面有丰富的经验。

张濮

亚马逊云科技大中华区解决方案研发中心高级解决方案专家,主要负责云上解决方案的推广和赋能,在技术内容传播、合作伙伴生态建设等方面有丰富的经验。