Bedrock Access Gateway(BAG)解决方案提供了开箱即用、兼容 OpenAI 的代理功能,帮助用户轻松无缝地从 OpenAI 迁移到 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 的优秀能力。
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 的部署说明。
完整原文传送门:通过 Bedrock Access Gateway解决方案快速访问Amazon Bedrock的多种大语言模型-国外VPS网站
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 使用了 ALB、Amazon Lambda、Amazon Fargate、Amazon 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 模型的迁移,确保用户能够高性价比地使用高性能的大语言模型;