AWS Dify おもしろいやつ

DifyでAmazon Bedrockのモデルを利用する方法を詳細に解説!

2024年9月26日

dify-logo

DifyでAWSのAmazon Bedrockが提供するLLMを安全に利用するための設定方法を詳しく解説します。

「サリー」です。AWSパートナー企業でエンジニアとして働いています。
お問い合わせ自己紹介

なぜDifyでAmazon Bedrockのモデルを使うのか

  • 設定が簡単:他のAIプロバイダーと比べ、API利用のための設定が簡単だと思います。
  • AWSアカウントとの連携:既存のAWSアカウントを活用できるため、新たな登録や支払い設定が不要です。他のプロバイダーのAPIを利用する場合は別途支払い情報などの登録が必要です。
  • 豊富なモデル:Bedrockを通じて、AnthropicのClaude 3シリーズを含む様々な最新のLLMが利用できます。

Bedrockのモデルを利用する方法

Difyでモデルを追加するには

まず、Difyで利用できるモデルを追加するには利用したいモデルを追加する必要があります。初期状態だと、OpenAIとAnthropicが表示されています。

利用するための流れ

それでは、Amazon Bedrockと連携する方法を紹介します。連携するために必要な情報やIAMでの権限設定など含めて紹介します。

簡単にまとめると以下のステップで連携できます。

  1. 【AWS】適切な権限を持つIAMユーザーの作成
  2. 【AWS】IAMユーザーのアクセスキー、シークレットアクセスキーを作成
  3. 【Dify】使用したいモデル名とIAMユーザーのアクセスキー、シークレットアクセスキーDifyに登録
  4. 【Dify】DifyのLLMでモデルを選択

必要な情報

上記でも触れていますが、DifyがBedrockと連携しモデルを利用するために必要な情報は以下となります。この必要な情報を準備するため以下の手順で解説します。

項目内容
Access Keyアクセスキー
Secret Access Keyシークレットアクセスキー
AWS Regionリージョン
Available Model NameモデルID

【AWS】IAMユーザーの作成

アクセスキー、シークレットアクセスキーを作成するためにはIAMユーザーを作成します。アクセスキーなどを発行するということで、まずは最低限の権限を持ったユーザーを作成するためのIAMポリシーを作成します。

IAMポリシー設定

以下のIAMポリシーを作成します。Difyではチャットボットのような対話型アプリケーションでストリーミング出力されるため下表の権限を追加します。

今回は「AllowClaudeHaikuInvocation」というポリシー名で作成しました。

ポリシー説明
bedrock:InvokeModel・Bedrock の基盤モデルを呼び出して推論を実行するために必要
bedrock:InvokeModelWithResponseStream・ストリーミングレスポンスをサポートするモデルに対して推論を実行するために使用される
・チャットボットのような対話型アプリケーションで、リアルタイムでレスポンスを受け取りたい場合に有用

IAMポリシー(JSON)

今回はClaude 3 Haikuのみ利用するためのIAMポリシーを作成しました。Resourceには利用するBedrockのモデルのARNを指定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0"
        }
    ]
}

IAMユーザーを作成しポリシーをアタッチ

下表のように設定し、ユーザーを作成します。

項目
ユーザー名dify
許可のオプションポリシーを直接アタッチする
許可ポリシーAllowClaudeHaikuInvocation(上記で作成したカスタマー管理ポリシー)

アクセスキーを入手

作成したIAMユーザーの「セキュリティ認証情報」タブへ移動し、「アクセスキーを作成」をクリックします。次に、ユースケースで「AWS の外部で実行されるアプリケーション」(他なんでも良いと思うが)を選択の上「アクセスキーを作成」をクリックします。

アクセスキー、シークレットアクセスキーが生成されるため安全な場所へ保存しておいてください。

注意

モデルを利用するには、Bedrockコンソールでモデルアクセスを有効化しておく必要があります。

【Dify】Bedrockのモデルを利用するための設定

アクセスキー・モデル名登録

「Difyの設定→モデルプロバイダー」からAWS,Bedrockの「セットアップ」を選択します。

下図のような入力画面が表示されるため、先ほど取得したアクセスキーなどの情報を入力します。

項目
Access Key取得したアクセスキー
Secret Access Key取得したシークレットアクセスキー
AWS Region利用するモデルのリージョン
(ポリシーで指定したARNに記載のリージョン)
Available Model Name利用するモデルID

ポイント

Available Model Name 入力欄に例が記載されていて「e.g. amazon.titan-text-lite-v1」とあるため、"Model Name"とはありますが、利用するモデルのモデルIDを入力する必要があります。モデルIDやARNは以前紹介しているので記載しておきます。

アクセスキーなど設定完了後

アクセスキーなどを入力して保存するとモデルプロバイダー一覧にAWS,Bedrockが表示されていることが確認できます。

「モデルの表示」をクリックすると利用できるモデル一覧が表示されます。ここに表示されるのは、あくまでもDifyとBedrockを連携することで利用できるようになるモデル一覧で、IAMポリシーで許可したモデルとは関係ないみたいです。デフォルトで多くのモデルが利用できそうに見えています。

【Dify】Bedrockのモデルをチャットボットに設定する

チャットボットの作成

以前作成したチャットボットが残っていたので利用します。変数のみ設定しているだけで他プロンプトなどは設定していない状態です。

モデルの変更

右上の現在gpt-3.5となっている箇所をクリックするとモデルの各種設定を変更できます。その中でもモデルの右のgpt-3.5を再度クリックすると、下図の表示となるため利用するモデルを選択します。(先ほどのアクセスキーなどを登録しないとこのBedrockのモデル一覧はここに表示されない)

今回はClaude 3 Haiku を選択します。(Claude 3 Haiku(US.Cross Region Inferene)などのモデルもありますが許可したHaikuとは別物です

無事設定できました。

Bedrockのモデルを呼び出す

上記までの設定が完了したら後は呼び出すだけです。以前の記事でも紹介したとおりチャット形式で質問をしていきます。

「あなたはどこの会社のLLMで、モデル名は何ですか」と質問したところ、「ClaudeというLLMで、Anthropicが開発した」という回答が返ってきました。やったね。

トラブルシューティング

[bedrock] Error: AccessDeniedExceptionが表示される場合

「Error: AccessDeniedException」が表示され以下のような内容のエラーの場合は以下の原因が考えられます。

  1. IAMユーザーの権限が不足している。IAMポリシーを見直してください。
  2. モデルIDの指定が間違っている。IAMポリシーで許可したモデルIDを選択しているか確認してください。

なお、今回のエラーの場合は、IAMポリシーでClaude 3 Haikuしか許可していないのにMistral smallをDifyで利用するよう選択した場合に発生しました。

[bedrock] Error: AccessDeniedException: User: arn:aws:iam::<アカウントID>:user/dify is not authorized to perform: bedrock:InvokeModelWithResponseStream on resource: arn:aws:bedrock:us-east-1::foundation-model/mistral.mistral-small-2402-v1:0 because no identity-based policy allows the bedrock:InvokeModelWithResponseStream action

また、IAMポリシーで「bedrock:InvokeModel」「bedrock:InvokeModelWithResponseStream」のどちらかが抜けている場合でも[bedrock] Error: AccessDeniedExceptionのエラーが発生するので注意が必要です。

[bedrock] Error: AccessDeniedException: User: arn:aws:iam::<アカウントID>:user/dify is not authorized to perform: bedrock:InvokeModelWithResponseStream on resource: arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0 because no identity-based policy allows the bedrock:InvokeModelWithResponseStream action

選択したモデルに切り替わっていない気がする

モデルを切り替えたけど出力内容を見ると切り替える前のLLMが呼び出されている気がする場合は、「公開する→更新」で解決すると思います。もし解決しない場合は「アプリを実行」なども試すと良いと思います。

関連記事

https://docs.dify.ai/guides/model-configuration

-AWS, Dify, おもしろいやつ
-, ,