Knowledge Bases for Amazon BedrockでサポートされたAdvanced RAGを試す

# はじめに

2024年7月11日に`Knowledge Bases for Amazon Bedrock now supports advanced RAG capabilities`という発表がありました｡

https://aws.amazon.com/jp/about-aws/whats-new/2024/07/knowledge-bases-amazon-bedrock-advanced-rag-capabilities/

この発表によるとAmazon Bedrockでクエリ拡張がサポートされたようです｡どのように機能するのかさっそく試してみました｡

> Knowledge Bases now also supports query reformulation. This capability breaks down queries into simpler sub-queries, retrieves relevant information for each, and combines the results into a final comprehensive answer. 

> ナレッジベースは現在、クエリの再構築もサポートしています。この機能は、クエリをより単純なサブクエリに分解し、それぞれに関連する情報を取得し、結果を組み合わせて最終的な包括的な回答を生成します。(Claude 3.5 Sonnetによる翻訳)

# 参考情報

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agent-runtime/client/retrieve_and_generate.html

https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html

https://aws.amazon.com/jp/blogs/machine-learning/knowledge-bases-for-amazon-bedrock-now-supports-advanced-parsing-chunking-and-query-reformulation-giving-greater-control-of-accuracy-in-rag-based-applications/

# Amazon BedrockでサポートされたAdvanced RAGはどのようなものか

[Knowledge Bases for Amazon Bedrock now supports advanced parsing, chunking, and query reformulation giving greater control of accuracy in RAG based applications](https://aws.amazon.com/jp/blogs/machine-learning/knowledge-bases-for-amazon-bedrock-now-supports-advanced-parsing-chunking-and-query-reformulation-giving-greater-control-of-accuracy-in-rag-based-applications/) によると､単一の複雑なクエリに複数の質問が埋め込まれることで派生する意味の希釈化を起こすことなくknowledge baseからチャンクを取得できるそうです｡
例として､Octankという架空の会社の財務情報に対して､無意味な複数の質問が挙げられています｡

> “Where is the Octank company waterfront building located and how does the whistleblower scandal hurt the company and its image?”

knowledge baseが上記の質問を受けて以下のように複数の質問を分割し､チャンクから回答を取得するという処理を行っているそうです｡

> 1. Where is the Octank Waterfront building located?
> 1. What is the whistleblower scandal involving Octank?
> 1. How did the whistleblower scandal affect Octank’s reputation and public image?

# Advanced RAGの使い方

## マネージドコンソールのTest knowledge baseでAdvanced RAGを使う場合

`Query modifications`という項目に`Break down queries`のスイッチがあります｡デフォルトOFFなので､ONにすることでクエリ拡張が使えるようです｡

> Enabling this allows the Knowledge base to split complex queries into multiple parts to get more relevant responses. This may improve retrieval accuracy.

> これを有効にすると、ナレッジベースは複雑なクエリを複数の部分に分割し、より関連性の高い回答を得ることができます。これにより検索の精度が向上する可能性があります。(Claude 3.5 Sonnetによる翻訳)

![Knowledge base configuration](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/15fa4126-e939-83f3-7a33-a488b1b0f149.png)

## AgentsforBedrockRuntimeでAdvanced RAGを使う場合

Boto3 1.34.143 documentationの[retrieve_and_generate](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agent-runtime/client/retrieve_and_generate.html)に以下の項目がありました｡これを使えばよさそうです｡

```python
            'orchestrationConfiguration': {
                'queryTransformationConfiguration': {
                    'type': 'QUERY_DECOMPOSITION'
                }
```

ドキュメントによるとtypeは`QUERY_DECOMPOSITION`固定のようです｡

> queryTransformationConfiguration (dict) – [REQUIRED]
> 
> To split up the prompt and retrieve multiple sources, set the transformation type to QUERY_DECOMPOSITION.


# Knowledge baseの構築

[Backlogヘルプセンター](https://support-ja.backlog.com/hc/ja)のHTMLをS3バケットに保存し､Knowledge baseを構築しました｡ベクターデータベースはPineconeを使用しています｡

Embeddings modelは､`Embed Multilingualv3`です｡
![Embeddings model](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/8531aa9c-2fcb-de4f-64e4-9dceb72ccfe5.png)


グレーアウトしていて見にくいですが､Chunking and parsing configurationsは`Default`です｡

![Chunking and parsing configurations](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/0552d395-60ec-a398-0685-38aaab256319.png)

Backlogヘルプセンターの内容について質問を投げ､どのような回答が得られるか試してみます｡

https://support-ja.backlog.com/hc/ja

# 使用する言語モデル
コード内ではClaude 3.5 Sonnetを使用しています｡コードの9行目をコメントアウトし10行目を有効にすればhaikuを使用できます｡

# サンプルコード

```python:app.py
import sys
import boto3
from botocore.exceptions import ClientError


knowledgebase_id = "XXXXXXXXXX" # Knowledge base ID
region = "us-east-1"
model_arn = "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0"
# model_arn = "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0"

def retrieveAndGeneratea(input_text: str,):
    bedrock_agent_client = boto3.client(
        service_name='bedrock-agent-runtime',
        region_name=region
    )

    return bedrock_agent_client.retrieve_and_generate(
        input={"text": input_text},
        retrieveAndGenerateConfiguration={
            "type": 'KNOWLEDGE_BASE',
            "knowledgeBaseConfiguration": {
                "knowledgeBaseId": knowledgebase_id,
                "modelArn": model_arn,
                'generationConfiguration': {
                    'inferenceConfig': {
                        'textInferenceConfig': {
                            'maxTokens': 2048,
                            'temperature': 0,
                        }
                    },
                },
                'retrievalConfiguration': {
                    'vectorSearchConfiguration': {
                        'numberOfResults': 5,
                        'overrideSearchType': 'SEMANTIC'
                    }
                },
                'orchestrationConfiguration': {
                    'queryTransformationConfiguration': {
                        'type': 'QUERY_DECOMPOSITION'
                    }
                }
            }
        }
    )

def main():
    if len(sys.argv) < 2:
        print("Usage: python3 ./bedrock_retrieve_and_generate.py <input_text>")
        sys.exit(1)

    input_text = sys.argv[1]
    response = retrieveAndGeneratea(input_text)

    print(response['output']['text'])

if __name__ == '__main__':
    main()
```

# Advanced RAGの比較
いくつかの質問を投げ、クエリ拡張の有無で結果を比較しました。temperature=0として回答のランダム性を抑えるようにしていますが、それでも毎回同じ回答が得られるとは限らないためここでは回答の一例として紹介します。

retrieveAndGenerateConfiguration={}内に以下がある場合にクエリ拡張ありで動作するはずです｡

```python
                'orchestrationConfiguration': {
                    'queryTransformationConfiguration': {
                        'type': 'QUERY_DECOMPOSITION'
                    }
                }
```

もとの質問文がどのようなクエリに変化したのかは､レスポンスボディにもふくまれておらず確認することはできませんでした｡

## ｢Backlogにデータをインポート する方法を教えてください。｣
前回の記事[Amazon Bedrock で Advanced RAG を実装してみる](https://qiita.com/revsystem/items/36f81083bc54cb48edbb#backlog%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84)で検証した際に､クエリ拡張あり/なしで明確な違いがあった質問を使ってみました｡
どちらの場合も､Backlog エンタープライズ版のデータ移行についての回答が出力されました｡[ASP Backlog から エンタープライズ にデータを移すことはできますか？](https://support-ja.backlog.com/hc/ja/articles/360035646514)や[Backlog サーバの移行手順をおしえてください ( エンタープライズ プロフェッショナル エディション )](https://support-ja.backlog.com/hc/ja/articles/360035646674)の内容をもとにしているようです｡
クエリ拡張ありの場合にSubversionリポジトリのエクスポートについて言及がありますが､エクスポートは[Subversion のリポジトリのエクスポートサービスはありますか？](https://support-ja.backlog.com/hc/ja/articles/360035645434)にあるとおりサービス提供はありません｡誤った情報が出力されてしまいました｡


### クエリ拡張なし

```console
Backlogにデータをインポートする方法は、Backlogサーバーを移行する手順に従います。具体的には以下の手順になります:

1. Backlogを停止する
2. データベースのダンプファイルを作成する
3. データ領域ディレクトリ(画像、SVN、Git、検索インデックスなどのデータ)を圧縮する
4. 移行先のBacklogサーバーにダンプファイルとデータ領域の圧縮ファイルを転送する
5. 移行先のBacklogを停止し、データベースを再作成する
6. 移行先のデータ領域ディレクトリを空にする
7. ダンプファイルをリストアする
8. データ領域の圧縮ファイルを解凍し、移行元のデータ領域にコピーする
9. 移行先のBacklogを起動する 移行手順の詳細は、Backlogのエディション(プロフェッショナル、スタンダード)によって異なります。エンタープライズプロフェッショナルエディションとエンタープライズスタンダードエディションの移行手順が、ヘルプセンターに記載されています。手順に従って作業を行えば、Backlogにデータをインポートできます。
```


### クエリ拡張あり

```console
Backlogにデータをインポートする機能はありません。ただし、別のBacklogスペースからデータを移行することは可能です。エンタープライズプロフェッショナルエディションでは、「プロジェクトのデータを別のスペースへ移行するツール」を利用して、ASP BacklogのデータをエンタープライズBacklogに移行できます。 また、Backlogのデータをバックアップして保管することはできます。課題やコメントはCSV形式でダウンロードできます。共有ファイルはWebフォルダやFinderからダウンロードできます。Gitリポジトリは「git clone」で、Subversionリポジトリはエクスポートサービスを利用してバックアップできます。スペース全体のデータをバックアップしたい場合は、有料オプション「スペースデータのバックアップ」をご利用ください。
```


## ｢契約期間の途中でもプラン変更はできますか？｣
途中の改行の有無や多少の言い回しの違いがあるものの､クエリ拡張の有無で大きな違いはありませんでした｡

### クエリ拡張なし

```console
はい、契約期間の途中でもプラン変更ができます。プランのアップグレード(上位プランへの変更)とダウングレード(下位プランへの変更)で適用タイミングが異なります。 アップグレードの場合は即日適用され、ダウングレードの場合は次の利用期間の開始日から適用されます。ただし、プロジェクト数やユーザー数が変更後のプランの上限を超えている場合はダウングレードできません。また、有料プランからフリープランへのダウングレードはできません。
```

### クエリ拡張あり

```console
はい、契約期間の途中でもプラン変更ができます。ただし、アップグレード(上位プランへの変更)とダウングレード(下位プランへの変更)で適用タイミングが異なります。

アップグレードの場合は即日適用され、ダウングレードの場合は次の利用期間の開始日から適用されます。また、プランによって料金変更のタイミングや支払期日も異なります。 ダウングレードする際は、変更後のプランの上限を超えるプロジェクト数やユーザー数がある場合はダウングレードできませんので、事前に制限内におさめる必要があります。また、有料プランからフリープランへのダウングレードはできません。
```

### 前回記事のクエリ拡張との比較
[前回の記事](https://qiita.com/revsystem/items/36f81083bc54cb48edbb#backlog%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84)のAdvanced RAGの実装では以下の回答が得られました｡全体的に箇条書きで記述され可読性が良いことと､利用しているプランの違いにより料金変更のタイミングが異なる旨まで含まれている点が今回と異なります｡

情報元のページ[契約期間の途中でもプラン変更はできますか？](https://support-ja.backlog.com/hc/ja/articles/360035645954)によると､内容も問題なさそうです｡


```console
2024-07-13 07:57:16,469 [INFO] Found credentials in shared credentials file: ~/.aws/credentials
2024-07-13 07:57:16,575 [INFO] origin_query: 契約期間の途中でもプラン変更はできますか？
2024-07-13 07:57:20,550 [INFO] search_query: プラン変更 契約期間中 可能性
2024-07-13 07:57:21,139 [INFO] search_query: サブスクリプション mid-contract plan change options
2024-07-13 07:57:21,747 [INFO] search_query: 料金プラン 途中変更 upgrade downgrade 契約条件
2024-07-13 07:57:22,345 [INFO] search_query: 契約期間の途中でもプラン変更はできますか？
2024-07-13 07:57:22,346 [INFO] context_length: 15
2024-07-13 07:57:32,961 [INFO] 

********************************************************************************
<related>true</related>

<answer>
はい、契約期間の途中でもプラン変更は可能です。ただし、アップグレード（上位プランへの変更）とダウングレード（下位プランへの変更）で適用されるタイミングが異なります。

アップグレードの場合：
- プラン適用はお申し込み即日となります。
- 料金変更もお申し込み即日（新プラン）またはお申し込み翌日（クラシックプラン）から適用されます。

ダウングレードの場合：
- 次の利用期間の開始日からプランが適用されます。
- 料金変更も次の利用期間の開始日から適用されます。

注意点：
1. ダウングレードの場合、期間途中でお申し込みしても差額は返金されません。
2. ダウングレード時、プロジェクト数やユーザー数が新しいプランの上限を超えている場合、ダウングレードできません。
3. 有料プランからフリープランへのダウングレードはできません。
4. 特別容量プランへの変更は、データ移行の作業が必要なため、適用までに時間がかかります。

プラン変更の詳細な方法については、Backlogのヘルプセンターで確認することができます。
```

# ひとつのクエリに複数の質問をいれる
前述のとおり､BedrockのAdvanced RAGは`単一の複雑なクエリに複数の質問が埋め込まれることで派生する意味の希釈化を起こすことなくknowledge baseからチャンクを取得できる`ということなので､ひとつのクエリに複数の質問がある場合で検証します｡

サンプルコードのmain()を以下のように変更し､参照元を一覧で出力します｡

```python:app.py main()
    if len(sys.argv) < 2:
        print("Usage: python3 ./bedrock_retrieve_and_generate.py <input_text>")
        sys.exit(1)

    input_text = sys.argv[1]
    response = retrieveAndGeneratea(input_text)
    completion, uri, text, references = "", "", "", ""
    completion = response['output']['text']

    if 'citations' in response:
        for citation in response['citations']:
            if 'retrievedReferences' in citation:
                for refs in citation['retrievedReferences']:
                    if 'location' in refs:
                        uri = refs['location']['s3Location']['uri']
                    if 'content' in refs:
                        text = refs['content']['text']
                    references += "\"" + text[:60].replace('\n', '') + "\" "+ " (" + uri + ")"+ "\n"

    print("\n\n","*" * 80)
    print(completion + "\n\n" + "参照元:\n" + references if references else completion)
```

## ｢契約期間の途中でもプラン変更はできますか？ディスクサイズを増やすことはできますか?ユーザーをCSV等でインポートできますか? ユーザーが増えても効率的にタスクを検索する方法を おしえてください｡｣

クエリ拡張なし､ありともにプラン変更や特別容量プランの案内､ユーザーのCSVインポートについて正しい情報を回答しました｡しかし､効率的なタスク検索については､クエリ拡張なしのほうが正しい回答を出力した一方､クエリ拡張ありではユーザーへの通知方法を回答しました｡
前回記事のクエリ拡張では､特別容量プランについて具体的な容量を回答した一方で効率的にタスクを検索については回答できませんでした｡

### クエリ拡張なし

```console
契約期間の途中でもプランの変更は可能です。プランのアップグレード(上位プランへの変更)は即日適用され、ダウングレード(下位プランへの変更)は次の利用期間から適用されます。ただし、ダウングレードする際はプロジェクト数やユーザー数が変更後のプランの上限を超えていないことが条件となります。 ディスクサイズを増やすことはできます。特別容量プランをご契約いただくことで、ディスク容量を増やすことができます。ただし、データを専用領域に移し替える作業が必要なため、変更が適用されるまでに時間がかかります。 ユーザーのCSVインポートは現在のところ提供されていません。ユーザーの追加は1人ずつ手動で行う必要があります。 ユーザー数が増えた場合でも効率的にタスクを検索するには、以下の方法があります:

- 絞り込み検索機能を活用し、ステータス、担当者、マイルストーンなどの条件で課題を絞り込む
- 課題の種別やカテゴリを適切に設定し、分類しておく
- 優先度を付けて重要な課題を見つけやすくする
- コメントやファイル添付で課題の詳細を記録し、検索しやすくする

参照元:
"契約期間の途中でもプラン変更はできますか？ – Backlog ヘルプセンター# 契約期間の途中でもプラン変更はできま"  (s3://xxxxx/hc/ja/articles/360035645954.html)
"契約期間の途中でもプラン変更はできますか？ – Backlog ヘルプセンター# 契約期間の途中でもプラン変更はできま"  (s3://xxxxx/hc/ja/articles/360035645954.html)
"ユーザーの権限 – Backlog ヘルプセンター# ユーザーの権限ご契約いただいているプランにより仕様が異なります"  (s3://xxxxx/hc/ja/articles/360035643434.html)
"ユーザーの権限 – Backlog ヘルプセンター# ユーザーの権限ご契約いただいているプランにより仕様が異なります"  (s3://xxxxx/hc/ja/articles/360035643434.html)
```

### クエリ拡張あり

```console
契約期間の途中でもプラン変更はできます。プランのアップグレード(上位プランへの変更)の場合は即日適用され、ダウングレード(下位プランへの変更)の場合は次の利用期間から適用されます。ただし、ダウングレードする際はプロジェクト数やユーザー数の制限に注意が必要です。 ディスクサイズを増やすことはできます。有料プランでは、プラン変更によりディスクサイズを増やすことができます。また、特別容量プランを契約することで、さらに大きなディスクサイズを確保できます。 ユーザーをCSVでインポートする機能はありません。新プランの場合は組織設定からユーザー一覧をCSVでダウンロードできますが、インポート機能はありません。クラシックプランの場合はCSVダウンロードもできません。 ユーザー数が増えた場合でも効率的にタスクを検索するには、チームやプロジェクトの参加者を指定してお知らせする機能を活用することをおすすめします。課題やコメントの宛先にチーム名や「このプロジェクトへの参加者」を指定すれば、該当するユーザー全員にまとめて通知できます。

参照元:
"契約期間の途中でもプラン変更はできますか？ – Backlog ヘルプセンター# 契約期間の途中でもプラン変更はできま"  (s3://xxxxx/hc/ja/articles/360035645954.html)
"契約期間の途中でもプラン変更はできますか？ – Backlog ヘルプセンター# 契約期間の途中でもプラン変更はできま"  (s3://xxxxx/hc/ja/articles/360035645954.html)
"ユーザー一覧をダウンロードすることはできますか？ – Backlog ヘルプセンター # ユーザー一覧をダウンロードする"  (s3://xxxxx/hc/ja/articles/360035645694.html)
"課題やコメントをお知らせしたいユーザーに何人も入力するのは手間がかかります – Backlog ヘルプセンター # 課題"  (s3://xxxxx/hc/ja/articles/360036149613.html)
```

### 前回記事のクエリ拡張との比較

```console
2024-07-13 15:26:29,540 [INFO] Found credentials in shared credentials file: ~/.aws/credentials
2024-07-13 15:26:29,627 [INFO] origin_query: 契約期間の途中でもプラン変更はできますか？ディスクサイズを増やすことはできますか?ユーザーをCSV等でインポートできますか? ユーザーが増えても効率的にタスクを検索する方法を おしえてください｡
2024-07-13 15:26:33,707 [INFO] search_query: ディスクサイズ増加 プラン変更 契約期間途中
2024-07-13 15:26:34,499 [INFO] search_query: ユーザー増加 効率的検索 タスク管理 CSV import
2024-07-13 15:26:34,967 [INFO] search_query: プラン変更 ストレージ拡張 ユーザーインポート 検索最適化 efficiency
2024-07-13 15:26:35,534 [INFO] search_query: 契約期間の途中でもプラン変更はできますか？ディスクサイズを増やすことはできますか?ユーザーをCSV等でインポートできますか? ユーザーが増えても効率的にタスクを検索する方法を おしえてください｡
2024-07-13 15:26:35,534 [INFO] context_length: 16
2024-07-13 15:26:51,709 [INFO] 

********************************************************************************
<related>true</related>

<answer>
はい、契約期間の途中でもプラン変更が可能です。ただし、プラン変更の適用タイミングと料金変更には注意が必要です。

ディスクサイズの増加については、プラチナプランのストレージ容量300GBでは不足する場合、特別容量プラン（500GB、1TB）が用意されています。これらのプランへの変更は通常のプラン変更とは異なり、お問い合わせフォームからの申し込みが必要です。

ユーザーのCSVインポートについての情報は提供されていません。

ユーザー数が増えても効率的にタスクを検索する方法については、具体的な情報が提供されていません。ただし、Backlogには課題、Wiki、ファイル、リポジトリなどの機能があり、これらを活用することで効率的な作業管理ができる可能性があります。

プラン変更に関する注意点：
1. アップグレードは即日適用されますが、ダウングレードは次の利用期間から適用されます。
2. ダウングレード時は、プロジェクト数やユーザー数が新しいプランの制限を超えていないことを確認する必要があります。
3. 有料プランからフリープランへのダウングレードはできません。
4. 特別容量プランへの変更には、データ移行のための時間が必要です。

プラン変更の詳細な方法については、Backlogのヘルプセンターで確認することをお勧めします。
```

## ｢プロジェクトに参加するユーザーの棚卸しを行います｡管理者がユーザーの設定を変更することは可能ですか?たとえば､退職者メールアドレスやユーザー名を変更することを想定します｡課 題更新通知をSlackに送ることは可能ですか?｣

クエリ拡張なし､あり共に回答内容に大きな差はありませんでした｡クエリ拡張ありの場合､｢ユーザー本人がBacklogの情報を使う設定にしている場合は、管理者がハンドルネームを変更することができる｣という情報を追加で回答することができました｡
前回記事のクエリ拡張の場合は､情報を網羅したうえで箇条書きを使って整理されており､可読性に優れています｡

### クエリ拡張なし

```console
管理者はメンバーのユーザー情報（メールアドレス、ユーザー名など）を変更することはできません。クラシックプランでは管理者がユーザー情報を変更できましたが、移行後のヌーラボアカウントではユーザー本人のみがユーザー情報を編集できます。退職者のメールアドレスやユーザー名を変更したい場合は、ユーザー本人に依頼する必要があります。 課題の更新通知をSlackに送ることは可能です。Backlogには課題の更新をSlackに通知する機能が用意されており、プロジェクト設定からSlackの設定を行えば、課題の追加や更新時にSlackに通知を送ることができます。

参照元:
"クラシックプランからの移行についてよくある質問 – Backlog ヘルプセンター# クラシックプランからの移行につい"  (s3://xxxxx/hc/ja/articles/18604276789657.html)
"ユーザーの権限 – Backlog ヘルプセンター# ユーザーの権限ご契約いただいているプランにより仕様が異なります"  (s3://xxxxx/hc/ja/articles/360035643434.html)
```

### クエリ拡張あり

```console
クラシックプランから移行後、管理者はメンバーのユーザー情報（ユーザー名、パスワードなど）を変更することはできません。ユーザー情報の編集はユーザー本人のみが行えます。ただし、ユーザー本人がBacklogの情報を使う設定にしている場合は、管理者がハンドルネームを変更することができます。 課題更新時の通知をSlackに送ることは可能です。Backlogの課題更新通知をSlackに連携させるための設定を行えば、課題が更新されるたびにSlackにメッセージが送信されます。

参照元:
"クラシックプランからの移行についてよくある質問 – Backlog ヘルプセンター# クラシックプランからの移行につい"  (s3://xxxxx/hc/ja/articles/18604276789657.html)
"ユーザーの権限 – Backlog ヘルプセンター# ユーザーの権限ご契約いただいているプランにより仕様が異なります"  (s3://xxxxx/hc/ja/articles/360035643434.html)
```


### 前回記事のクエリ拡張との比較

```console
2024-07-13 15:46:02,801 [INFO] Found credentials in shared credentials file: ~/.aws/credentials
2024-07-13 15:46:02,890 [INFO] origin_query: プロジェクトに参加するユーザーの棚卸しを行います｡管理者がユーザーの設定を変更することは可能ですか?たとえば､退職者メールアドレスやユーザー名を変更することを想定します｡課 題更新通知をSlackに送ることは可能ですか?
2024-07-13 15:46:07,600 [INFO] search_query: プロジェクトメンバー管理 ユーザー設定変更 管理者権限
2024-07-13 15:46:08,224 [INFO] search_query: プロジェクト参加者 退職者処理 メールアドレス変更 ユーザー名更新
2024-07-13 15:46:08,781 [INFO] search_query: 課題管理システム Slack連携 通知設定 プロジェクト更新アラート
2024-07-13 15:46:09,365 [INFO] search_query: プロジェクトに参加するユーザーの棚卸しを行います｡管理者がユーザーの設定を変更することは可能ですか?たとえば､退職者メールアドレスやユーザー名を変更することを想定します｡課 題更新通知をSlackに送ることは可能ですか?
2024-07-13 15:46:09,366 [INFO] context_length: 17
2024-07-13 15:46:24,667 [INFO] 

********************************************************************************
<related>true</related>

<answer>
管理者がユーザーの設定を変更する能力については、クラシックプランから新プランへの移行後に変更がありました。

1. ユーザー情報の変更について：
   - クラシックプランでは、管理者がユーザー情報（ユーザー名、メールアドレスなど）を変更できました。
   - 新プランでは、ユーザー本人のみがユーザー情報を編集できます。管理者はユーザー情報を直接変更することはできません。

2. 退職者のメールアドレスやユーザー名の変更：
   - 新プランでは、管理者が直接これらの情報を変更することはできません。
   - ユーザー本人に変更してもらうか、ユーザー本人にBacklogの情報を使う設定にしてもらう必要があります。

3. 課題更新通知のSlackへの送信：
   - Backlogは外部サービスとの連携（インテグレーション）機能を提供しています。
   - Slackとの連携が可能で、課題やコメントの追加などのイベントをSlackに通知することができます。

したがって、ユーザー情報の直接的な変更は管理者にはできませんが、Slackへの課題更新通知は可能です。ユーザー情報の管理については、新プランでの制限を考慮した対応が必要となります。
</answer>
```

# まとめ

Knowledge Bases for Amazon BedrockでサポートされたAdvanced RAGを試してみました｡現状はRetrieveAndGenerateでしかサポートされてないようです｡そして､もとのクエリがどのように置き換えられたのかを確認する方法が見当たらず､検索結果も期待したほどではないようです｡ひとつのクエリに複数の質問が含まれている場合でも､クエリ拡張の有無による大きな差はみられませんでした｡
検索結果については､RAGを構築する際のもとデータの情報量や構造化されているかにも依存するかもしれません｡あるいは､日本語と英語､埋め込みモデル､Chunking and parsing configurationsをDefaultではなくSemantic chunkingを選択するなどにより精度が異なるのかもしれません｡

Advanced RAGが必要な場合は､モデルにクエリ拡張を依頼しそれを使って検索を行うほうがクエリ拡張の制御や検索精度の調整ができそうです｡