cac61d506bda1e60a1c32b6238bfd006.gif

概述

亚马逊云科技的 Amazon Bedrock 服务支持一系列领先的基础模型,为客户提供多种选择,满足不同业务场景的需求。其中,Anthropic 公司的 Claude 3 是在 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 ,从而获得包括 Claude 3 在内的多种 LLM 的优秀能力。

6437553b98adb3e4bfab4e5d09252345.png

该解决方案已经开源,

您可扫码了解项目源代码和详情

整体架构

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

0544d17cc90e9173fe3d0b522176c999.jpeg

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

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

在实际应用中,为方便用户在迁移时不用改造任何现有代码,当请求中模型名( 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 仓库,了解更新情况:

980c95d71fce1b9ca626856c242e4555.png

扫码了解

GitHub 仓库

有关解决方案的升级操作,请扫码参考 BAG 的部署说明

7d7e8c07754c18e45e798b0b0cdb07ca.png

扫码了解

部署说明

解决方案部署

前提条件

BAG 在运行时会调用 Amazon Bedrock 中的模型,所以需要先在 Amazon Bedrock 中启用相关模型的访问权限。

有关具体方法,可以参考《Amazon Bedrock 用户指南》中的“模型访问权限”部分。

f2ae1b31f2e4eadb54be7daf2cdc9f69.png

扫码了解

模型访问权限

启用权限成功后,Amazon Bedrock 控制台的页面如图 2 所示。

9b7299e9f8f5c20d80efe04e0b08398a.jpeg

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

部署步骤

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 。

68e19a4e1910f1ff5fccfde42efddd7d.jpeg

图 3 创建自定义 API Key 参数

第二步:部署 Amazon CloudFormation 堆栈

在浏览器中打开一个新的空白页面,访问 BAG 的 Amazon CloudFormation堆栈模板启动链接

bd8431ac5805a7b492d7f538d587e96f.png

扫码了解

堆栈模板启动链接

登录亚马逊云科技的控制台后,跳转到 Amazon CloudFormation 创建堆栈页面,如图 4 所示。

94a02135e7c1db82670ff92bbbec148a.jpeg

图 4 部署:设定 Amazon CloudFormation 模板

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

f7d7072771ae928596a1c65ee65fb2f1.jpeg

图 5 部署:填写 API Key 参数

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

e32996708eff371d8bb65edb5a7742a5.jpeg

图 6 部署:勾选确认项

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

69f98bf151602889aea6fac083dea5bf.jpeg

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

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

16a20ca0d1cbaf40bab8961bf0db2f14.png

扫码了解

部署说明

测试与应用

配置环境变量

在用户或应用程序一侧,要通过 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>

左右滑动查看完整示意

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}}

左右滑动查看完整示意

 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)

左右滑动查看完整示意

在 NextChat 应用程序中使用

部署 BAG 后,经过简单配置就可以使用 NextChat 轻松访问 Claude 3 以及其他 Amazon Bedrock 上支持的大语言模型。

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

16e2e75c28a63293756fd1b7317d90f3.jpeg

图 8 NextChat 的设置页面

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

f581362511b9f1337d1e3e0d7a0a0ced.jpeg

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

对于其他使用 OpenAI API 的应用,如 AutoGen ,也可以采用类似的配置操作,就可以顺利访问 Amazon Bedrock 上的模型。

有关更多应用示例,请参考 BAG 的部署说明

2dea6c0f9e0ffb34de43217ebb6300d8.png

扫码了解

部署说明

安全与其他注意事项

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

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

9b925dc72aaa631af000797301742a4a.png

扫码了解更多

ALB 相关内容

9b5b4086092e5a5291ea423c548c3a12.png

扫码了解更多

Amazon Lambda 相关内容

58d1d7b6b6fff02f47f9d3f8fd909a9b.png

扫码了解更多

Amazon Fargate 相关内容

da9c20b351e84b5d46d009281a6fb63a.png

扫码了解更多

Amazon Bedrock 相关内容

fdc47a8afea13fecc46aa6b7923b7214.png

扫码了解更多

Pricing Calculator 相关内容

滑动查看更多

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

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

总结

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

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

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

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

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

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

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

0d2fd8228b6634b4a47f589ccbaa1126.png

扫码了解

Claude Prompt Generator

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

d5c6772a6d4d54941670418398a097ab.gif

请持续关注亚马逊云开发者微信公众号,了解更多面向开发者的技术分享和云开发动态!

本篇作者

a8132d992a06aaa33a4d6994dfeead83.jpeg

戴晓斌

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

527b0928e236d5402476d414e6c7863b.png

张濮

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

9346271d7a820f3087ed3a8c7068db8b.gif

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

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

听说,点完下面4个按钮

就不会碰到bug了!

dc7278fb1d62354bd1b870df520f3114.gif

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐