中文
Amazon Bedrock用のOpenai互換のRestful API
ソースコードは、ツールコールでネイティブサポートを提供するBedrockごとに新しいConverse APIでリファクタリングされます。
問題に直面している場合は、問題を提起してください。
Amazon Bedrockは、幅広い基礎モデル(Claude 3 Opus/Sonnet/Haiku、Llama 2/3、Mistral/Mixtralなど)と、生成的AIアプリケーションを構築するための幅広い機能セットを提供しています。追加情報については、Amazon Bedrockランディングページを確認してください。
時々、OpenAI APIまたはSDKを使用してアプリケーションを開発し、コードベースを変更せずにAmazon Bedrockを試してみたい場合があります。または、オートゲンなどのツールでこれらのファンデーションモデルの機能を評価することを単に希望する場合があります。
このGitHubリポジトリが便利だと思う場合は、プロジェクトに対する感謝とサポートを示すために、無料の星を提供することを検討してください。
特徴:
新しいAPIの使用方法の詳細については、使用ガイドを確認してください。
注:レガシーテキスト完了APIはサポートされていません。チャット完了APIを使用するには変更する必要があります。
サポートされているAmazon Bedrock Modelsファミリ:
models
APIを呼び出して、サポートされているモデルIDの完全なリストを取得できます。
注:デフォルトモデルは
DEFAULT_MODEL
anthropic.claude-3-sonnet-20240229-v1:0
に設定されています。
前提条件以下で会ったことを確認してください。
モデルアクセスのリクエスト方法の詳細については、Amazon Bedrockユーザーガイド(セットアップ>モデルアクセス)を参照してください。
次の図は、参照アーキテクチャを示しています。また、アプリケーションロードバランサー(ALB)にのみ2つのパブリックサブネットを備えた新しいVPCも含まれていることに注意してください。
また、AWS Lambdaの代わりにALBの背後にあるAWS Fargateを使用することもできます。主な違いは、ストリーミング応答の最初のバイトの遅延です(Fargateは低く)。
または、lambda関数URLを使用してALBを置き換えることができます。例を参照してください
以下の手順に従って、Bedrock Proxy APIをAWSアカウントに展開してください。 Amazon Bedrockが利用可能な地域( us-west-2
など)のみをサポートしています。展開には約3〜5分かかります。
ステップ1:独自のカスタムAPIキー(オプション)を作成する
注:このステップは、後でプロキシAPIにアクセスするために使用されるカスタムAPIキー(資格情報)を作成するのが好きな文字列(スペースなし)を使用することです。このキーは、実際のOpenAIキーを一致させる必要はなく、OpenAI APIキーを使用する必要はありません。この一歩を踏み出し、キーを安全でプライベートに保つことをお勧めします。
ステップ2:CloudFormationスタックを展開します
alb + lambda
alb +ファーゲート
BedrockProxyAPIKey
など)を入力します。 APIキーを設定しなかった場合は、このフィールドを空白のままにしておきます。 [次へ]をクリックします。それです! ?展開したら、[CloudFormationスタック]をクリックしてAPIBaseUrl
出力]タブに移動します。ApibaseurlからAPIベースURLを見つけることができます。値はhttp://xxxx.xxx.elb.amazonaws.com/api/v1
のように見えるはずです。
必要なのは、APIキーとAPIベースURLだけです。独自のキーを設定しなかった場合、デフォルトのAPIキー( bedrock
)が使用されます。
これで、プロキシAPIを試すことができます。 Claude 3 Sonnetモデルをテストするとしましょう(モデルID: anthropic.claude-3-sonnet-20240229-v1:0
)...
API使用の例
export OPENAI_API_KEY= < API key >
export OPENAI_BASE_URL= < API base url >
# For older versions
# https://github.com/openai/openai-python/issues/624
export OPENAI_API_BASE= < API base url >
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!"
}
]
} '
SDK使用の例
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 )
埋め込みAPI、マルチモーダルAPI、ツールコールの使用方法の詳細については、使用ガイドを確認してください。
クロスリージョン推論は、地域全体の基礎モデルへのアクセスをサポートし、ユーザーが異なるAWS地域でホストされているモデルを推論のために呼び出すことができます。主な利点:
岩盤のクロスリージョン推論を確認してください
制限:現在、Bedrock Access Gatewayは、次のモデルに対する地域の推論のみをサポートしています。
前提条件:
API使用の例:
us.anthropic.claude-3-5-sonnet-20240620-v1:0
などのModelIDとして指定します。 curl $OPENAI_BASE_URL /chat/completions
-H " Content-Type: application/json "
-H " Authorization: Bearer $OPENAI_API_KEY "
-d ' {
"model": "us.anthropic.claude-3-5-sonnet-20240620-v1:0",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
} '
以下は、Autogen Studioでモデルをセットアップする画像です。
Openai ChatOpenAI(...)
OpenAI(...)
を使用することを確認してください
# pip install langchain-openai
import os
from langchain . chains import LLMChain
from langchain . prompts import PromptTemplate
from langchain_openai import ChatOpenAI
chat = ChatOpenAI (
model = "anthropic.claude-3-sonnet-20240229-v1:0" ,
temperature = 0 ,
openai_api_key = os . environ [ 'OPENAI_API_KEY' ],
openai_api_base = os . environ [ 'OPENAI_BASE_URL' ],
)
template = """Question: {question}
Answer: Let's think step by step."""
prompt = PromptTemplate . from_template ( template )
llm_chain = LLMChain ( prompt = prompt , llm = chat )
question = "What NFL team won the Super Bowl in the year Justin Beiber was born?"
response = llm_chain . invoke ( question )
print ( response )
このアプリケーションでは、データを収集しません。さらに、デフォルトでリクエストや応答を記録しません。
簡単な答えは、APIゲートウェイがストリーミング応答のためにサーバーセントイベント(SSE)をサポートしていないことです。
このソリューションは、現在のように、Amazon Bedrockが利用可能な地域のみをサポートしています。以下はリストです。
一般的に、Amazon Bedrockがサポートするすべての地域もサポートされます。そうでない場合は、GitHubで問題を提起してください。
これらの地域ですべてのモデルが利用できるわけではないことに注意してください。
はい、レポをクローンしてコンテナ画像を自分で構築し( src/Dockerfile
)、ECRリポジトリにプッシュできます。 scripts/push-to-ecr.sh
を使用できます
展開する前に、CloudFormationテンプレートにリポジトリのURLを交換します。
はい、これをローカルに実行できます。
APIベースのURLはhttp://localhost:8000/api/v1
のように見える必要があります。
AWS SDKコールと比較すると、参照されるアーキテクチャは応答に追加の遅延をもたらします。自分でそれを試してテストすることができます。
また、Lambda Web Adapter + Function URL(例を参照)を使用してALBまたはAWS Fargateを置き換えてLambdaを置き換えて、ストリーミング応答のパフォーマンスを向上させることができます。
現在、Sagemakerモデルをサポートする計画はありません。これは、顧客からの需要があれば、変更される可能性があります。
プロビジョニングされたスループットを備えた微調整モデルとモデルは現在サポートされていません。必要に応じて、レポをクローンしてカスタマイズを作成できます。
最新の機能を使用するには、CloudFormationスタックを再展開する必要はありません。最新の画像を引く必要があります。
そうするために、展開したバージョンに依存します。
Deploy new image
ボタンを見つけてクリックし、[保存]をクリックします。Tasks
タブに移動し、[実行]のみを選択し、 Stop selected
クリックします。最新の画像を使用した新しいタスクは自動的に開始されます。 詳細については、貢献を参照してください。
このライブラリは、MIT-0ライセンスに基づいてライセンスされています。ライセンスファイルを参照してください。