🤛

Amazon BedrockでAnthropic Claude APIをシバくときにprofileのcredntialsで認証する

2024/04/12に公開


※画像は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;

その他

スマートラウンド テックブログ

Discussion