Amazon Bedrock が Rerank API をサポート

# 内容

AWS re:Invent 2024 で発表があった Amazon Bedrock Prompt Caching をシンプルに纏めます。

https://aws.amazon.com/jp/blogs/news/new-apis-in-amazon-bedrock-to-enhance-rag-applications-now-available/

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-bedrock-rerank-api-accuracy-rag-applications/

- Rerank API をサポート
- Rerank API はユーザーが探している情報に対して、より関連度の高い文書を優先的に上位に並べることで、回答の精度や検索結果の品質を高める
- Amazon Bedrock Knowledge Base で利用する場合は、Retrieve API / RetrieveAndGenerate API で設定することで利用可能

# モデル

:::note info
2024/12 現在
:::

- Amazon Rerank 1.0
- Cohere Rerank 3.5


# 対応リージョン

:::note info
2024/12 現在
:::

- 米国西部 (オレゴン)
- カナダ (中部)
- 欧州 (フランクフルト)
- アジアパシフィック (東京)


# 動作確認

## 前提

- ナレッジベースを作成済みであり、S3 にデータを格納済であること
- 今回 S3 には以下の PDF ファイルを配置しておきました

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-troubleshoot.html

※ ちなみに今回ナレッジベースには、Aurora Serverless v2 を使い、ゼロキャパシティを設定しています。（本題ではないので、詳しい説明は省きます。）

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/amazon-aurora-serverless-v2-scaling-zero-capacity/

## コンソールから確認

コンソールから動作確認する場合、Reranking で対応のモデルを指定するだけでできるようです。

![スクリーンショット 2024-12-25 0.53.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/434bb7c8-d27a-f332-8e8a-300129c9c0e2.png)

CloudWatch Logs から Rerank できているか確認してみます。

relevance_score が高い順で Rerank されていることが確認できました。

```json
{
    "schemaType": "ModelInvocationLog",
    "schemaVersion": "1.0",
    "timestamp": "2024-12-24T15:52:35Z",
    "accountId": "123456789012",
    "identity": {
        "arn": "arn:aws:iam::123456789012:user/XXX"
    },
    "region": "us-west-2",
    "requestId": "3aad1142-bf73-4473-b640-1ca355e15a2f",
    "operation": "InvokeModel",
    "modelId": "arn:aws:bedrock:us-west-2::foundation-model/amazon.rerank-v1:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "documents": [
                "2. 次のように、ボリュームをセカンダリボリュームとして一時インスタンスにアタッチします。     EC2Config を使用したパスワードのリセット 3043Amazon Elastic Compute Cloud ユーザーガイド     a. ナビゲーションペインで [ボリューム] を選択し、元のインスタンスからデタッチしたボ リュームを選択した後で、[アクション]、[ボリュームのアタッチ] の順に選択します。     b. [インスタンス] の [ボリュームのアタッチ] ダイアログボックスで、一時インスタンスの名前 または ID の入力を開始し、リストからインスタンスを選択します。     c. [デバイス] で、xvdf (まだない場合) を入力し、[アタッチ] を選択します。",
                "• ステップ 4: 設定ファイルを変更する     • ステップ 5: 元のインスタンスを再起動します。     ステップ 1: EC2Config サービスが実行中であることを確認します     管理者パスワードのリセットを試みる前に、EC2Config サービスがインストールされ、実行されて いることを確認します。このセクションの後で、EC2Config サービスを使用して管理者パスワード をリセットします。     EC2Config サービスが実行中であることを確認するには     1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。     2. ナビゲーションペインで [インスタンス] を選択し、パスワードのリセットが必要なインスタン スを選択します。",
                "設定ファイルを変更した後、元のインスタンスにボリュームをルートボリュームとして再アタッチ し、そのキーペアを使用してインスタンスに接続して管理者パスワードを取得します。     1. 初期インスタンスにボリュームを再度アタッチします。     a. ナビゲーションペインで [ボリューム] を選択し、一時インスタンスからデタッチしたボ リュームを選択した後で、[アクション]、[ボリュームのアタッチ] の順に選択します。     EC2Config を使用したパスワードのリセット 3045Amazon Elastic Compute Cloud ユーザーガイド     b. [インスタンス] の [ボリュームのアタッチ] ダイアログボックスで、元のインスタンスの名前 または ID の入力し、インスタンスを選択します。     c.",
                "詳細については、「AWS Systems Manager ユーザーガイド」の「EC2 インスタンスでのパスワードと SSH キーのリ セット」を参照してください。     EC2Config を使用して Windows 管理者パスワードをリセットするには、次の操作が必要です。     • ステップ 1: EC2Config サービスが実行中であることを確認します     • ステップ 2: ルートボリュームをインスタンスからデタッチします     EC2Config を使用したパスワードのリセット 3040           https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-ec2reset.html         https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-ec2reset.htmlAmazon Elastic Compute Cloud ユーザーガイド     • ステップ 3: ボリュームを一時インスタンスにアタッチします。",
                "詳細については、「Amazon EC2 Windows インスタンスの Windows 管理者パスワードをリセットする」を参照してくださ い。Systems Manager ドキュメントを使用してパスワードをリセットする手順については、「AWS Systems Manager ユーザーガイド」の「 EC2 インスタンスで、パスワードと SSH キーをリセット する」を参照してください。     プライベートキーを紛失しました。Windows インスタンスに接続するにはどうすればよいですか?"
            ],
            "query": "EC2インスタンスのWindwowsのパスワードを忘れました。どうしたら簡単に忘れたパスワードをリセット確認またはリセットできますか？"
        }
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": {
            "results": [
                {
                    "index": 3,
                    "relevance_score": 0.979589692299694
                },
                {
                    "index": 4,
                    "relevance_score": 0.9704086268107062
                },
                {
                    "index": 1,
                    "relevance_score": 0.8465777097883294
                },
                {
                    "index": 2,
                    "relevance_score": 0.5000392794608262
                },
                {
                    "index": 0,
                    "relevance_score": 0.31468201003066215
                }
            ]
        }
    }
}
```

# SDK での実装

下記の方が試されているようです。`rerankingConfiguration` を設定すればいいようですね。

https://zenn.dev/fusic/articles/github-zenn-linkage-20241202-2