🤛
Amazon BedrockでAnthropic Claude APIをシバくときにprofileのcredntialsで認証する
※画像はAmazon Bedrock公式サイトより
小ネタです。
サンプルコードは一旦JavaScriptで書いてます。サンプルだからね。
Tl; Dr
@aws-sdk/credential-providersのfromIni()を使おう
const { BedrockRuntimeClient } = require("@aws-sdk/client-bedrock-runtime");
const { fromIni } = require("@aws-sdk/credential-providers");
const bedrockClient = new BedrockRuntimeClient({
credentialDefaultProvider: fromIni({
profile: "xxx", // 使用するプロファイル名を指定
}),
region: "us-east-1", // us-east-1, us-west-2で全モデル使える
});
内容
背景
令和なのでcredentialsを環境変数とかで渡したくない & 社内では既にAWS関連の認証をSSO化しているので、それを使ってセキュアにやりたかった。
実装の全体
以下のように書くとAnthropic ClaudeのAPIを叩けます。
モデルやリージョン(後述)は好きなものを使ってください。
const {
BedrockRuntimeClient,
InvokeModelCommand,
} = require("@aws-sdk/client-bedrock-runtime");
const { fromIni } = require("@aws-sdk/credential-providers");
// BedrockのAPIを叩くためのClient
const bedrockClient = new BedrockRuntimeClient({
credentialDefaultProvider: fromIni({
profile: "xxx", // 使用するプロファイル名を指定
}),
region: "us-east-1", // us-east-1, us-west-2で全モデル使える
});
// プロンプトを書く
const prompt = "hogehoge"
// APIのRequestBodyの設定
const payload = {
anthropic_version: "bedrock-2023-05-31", // 2024/04/11現在時点ではこの値を指定する必要がある
max_tokens: 4096, // 好みの値を指定
temperature: 0, // 好みの値を指定
messages: [{ role: "user", content: [{ type: "text", text: prompt }] }],
};
// APIのRequestを設定
const command = new InvokeModelCommand({
body: JSON.stringify(payload),
contentType: "application/json",
accept: "application/json",
modelId:'anthropic.claude-3-sonnet-20240229-v1:0', // 好きなModelを選択
});
// APIを叩いてparseする
const result = await bedrockClient.send(command);
const decodedResponseBody = new TextDecoder().decode(result.body);
const responseBody = JSON.parse(decodedResponseBody);
return responseBody;
その他
- Amazon Bedrockは
us-east-1
およびus-west-2
のリージョンですべてのモデルを公開している: https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/models-regions.html- ので、特にこだわりがなければそのいずれかを使うのがよさそう
-
fromIni()
の引数でconfigFilepath
やfilepath
を指定して、~/.aws/config
以外も見るようにもできそう: https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/ - AnthropicClaudeメッセージ APIの仕様: https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-parameters-anthropic-claude-messages.html
-
anthropic_version
は2024/04/11
時点だと、bedrock-2023-05-31
を必須で指定しないとイケないみたい
-
Discussion