Bedrockナレッジベースの新機能全部入りのRAGを作る

Bedrockおよびナレッジベースの新機能を幾つか確認したので、全部入りのRAGプログラムを書いてみます。

# ナレッジベースの作成

以下の

https://qiita.com/cyberBOSE/items/44515b0989b79ecfcda0

Use foundation model for parsing、Hierarchicalチャンキング で構築したナレッジベースを使います。

# ガードレールの作成

以下の

https://qiita.com/cyberBOSE/items/cc8ed630470b96dc3ed8

Contextual grounding check を有効にしたガードレールを使います。

# ナレッジベースの検索仕様

テストツールで言うところの以下のハイブリッドサーチを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/cf151b99-0b9c-d892-0bb9-151abfa04e93.png)

テストツールで言うところの以下の機能を使い、クエリの書き換えを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/512dc207-ca26-aa75-e2f3-6b32d1c145a3.png)

# プログラム

```Python
import streamlit as st
import boto3

st.title("ナレッジベース全部入り")
user_input = st.text_input("質問")
send_button = st.button("送信")

if send_button and user_input:

    knowledgebase = boto3.client("bedrock-agent-runtime")
    response = knowledgebase.retrieve_and_generate(
        input={"text": user_input},
        retrieveAndGenerateConfiguration={
            "type": "KNOWLEDGE_BASE",
            "knowledgeBaseConfiguration": {
                "generationConfiguration": {
                    "guardrailConfiguration": { 
                        "guardrailId": "各自のガードレールID",
                        "guardrailVersion": "1"
                    },
                    "inferenceConfig": { 
                        "textInferenceConfig": { 
                            "maxTokens": 4000
                        }
                    }
                },
                "knowledgeBaseId": "各自のナレッジベースID",
                "modelArn": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
                "orchestrationConfiguration": { 
                    "queryTransformationConfiguration": { 
                        "type": "QUERY_DECOMPOSITION"
                    }
                },
                "retrievalConfiguration": { 
                    "vectorSearchConfiguration": { 
                        "numberOfResults": 5,
                        "overrideSearchType": "HYBRID"
                    },
                },
            },
        },
    )
    st.write(response["output"]["text"])
```
以下の部分でガードレールを組み込んでいます。（バージョンは1だとして）
```Python
"generationConfiguration": {
    "guardrailConfiguration": { 
        "guardrailId": "各自のガードレールID",
        "guardrailVersion": "1"
    },
}
```
以下の部分でクエリ書き換えを組み込んでいます。
```Python
"orchestrationConfiguration": { 
    "queryTransformationConfiguration": { 
        "type": "QUERY_DECOMPOSITION"
    }
},
```
以下の部分でハイブリッドサーチを組み込んでいます。
```Python
"retrievalConfiguration": { 
    "vectorSearchConfiguration": { 
        "numberOfResults": 5,
        "overrideSearchType": "HYBRID"
    },
},
```
# PDFに記載されている内容でテスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/f72debd4-131f-a693-67bd-876c9a8b28ea.png)

### ログ1つ目
```JSON
    "modelId": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "anthropic_version": "bedrock-2023-05-31",
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "text",
                            "text": "新規事業開発のビジネスアーキテクトがDX推進において担う責任を説明してください"
                        }
                    ]
                }
            ],
            "system": "You are a query generation agent. Given the conversation history (optional) and a user question, your task is to determine the optimal queries.\n\nYou should consider the following two steps:\nStep 1. If conversation history is available, decide if the user question misses any necessary context. If so, rewrite the user question to be a standalone question that captures the relevant context from the given conversation history.\nStep 2. Decide if the standalone question is a complex question. If so, decompose it into a set of relevant queries, which can be easier to answer.\n\nPlease pay attention to the conversation history. If the user question is already a standalone question, you can skip Step 1.\nIf the standalone question does not require a further decomposition, you can skip Step 2.\n\nHere’s an example for Step 1:\n\n<example>\nInput:\n<conversation_history>\n<conversation>\n<question>How many vehicles can I include in a quote in Kansas</question>\n<answer>You can include 5 vehicles in a quote if you live in Kansas</answer>\n</conversation>\n</conversation_history>\n\nUser: What about texas?\n\nOutput:\n<generated_queries><standalone_question>How many vehicles can be included in a quote in Texas?<standalone_question></generated_queries>\n</example>\n\nHere are two examples for Step 2:\n\n<example>\nInput:\n\nUser: Were both of the following rock groups formed in California: Dig and Thinking Fellers Union Local 282?\n\nOutput:\n<generated_queries><standalone_question>Were both of the following rock groups formed in California: Dig and Thinking Fellers Union Local 282?</standalone_question><query>What is the formation place of rock group Dig?</query><query>What is the formation place of the rock group Thinking Fellers Union Local 282?</query></generated_queries>\n</example>\n\n<example>\nInput:\n\nUser: in 2018 , what percentage of undeveloped acres were located in the u.s?\n\nOutput:\n<generated_queries><standalone_question>in 2018 , what percentage of undeveloped acres were located in the u.s?</standalone_question><query>the net undeveloped acres in 2018 of u.s.</query><query>the total net undeveloped acres in 2018</query></generated_queries>\n</example>\n\nHere is the current conversation history:\n<conversation_history>\n\n</conversation_history>\n\nPlease output your response between <generated_queries> </generated_queries> tags, the standalone question within <standalone_question> </standalone_question> and each decomposed query within <query> </query> tags.\n",
            "max_tokens": 2048,
            "temperature": 0,
            "top_p": 1,
            "stop_sequences": [
                "\nObservation"
            ],
            "top_k": 50
        },
        "inputTokenCount": 641
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": {
            "id": "msg_bdrk_019VX5GxyfoKGrnP6VNgvqLH",
            "type": "message",
            "role": "assistant",
            "model": "claude-3-sonnet-20240229",
            "content": [
                {
                    "type": "text",
                    "text": "<generated_queries>\n<standalone_question>新規事業開発のビジネスアーキテクトがDX推進において担う責任とは何ですか?</standalone_question>\n<query>新規事業開発におけるビジネスアーキテクトの役割</query>\n<query>DX推進におけるビジネスアーキテクトの責任</query>\n<query>ビジネスアーキテクトがDX推進で果たすべき具体的な業務</query>\n</generated_queries>"
                }
            ],
            "stop_reason": "end_turn",
            "stop_sequence": null,
            "usage": {
                "input_tokens": 641,
                "output_tokens": 150
            }
        },
        "outputTokenCount": 150
    }
```
入力内容を元にクエリの書き換え・分割が行われます。

>"text": "<generated_queries>\n<standalone_question>
新規事業開発のビジネスアーキテクトがDX推進において担う責任とは何ですか?
</standalone_question>\n<query>
新規事業開発におけるビジネスアーキテクトの役割
</query>\n<query>
DX推進におけるビジネスアーキテクトの責任
</query>\n<query>
ビジネスアーキテクトがDX推進で果たすべき具体的な業務
</query>\n</generated_queries>"

オリジナルの質問の他に、3つの質問が生成されています。

### ログ（ベクトル化）
質問がベクトル化されます。
```JSON
    "modelId": "arn:aws:bedrock:us-west-2::foundation-model/amazon.titan-embed-text-v2:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "inputText": "DX推進におけるビジネスアーキテクトの責任",
            "dimensions": 1024
        },
        "inputTokenCount": 24
    },
```
```JSON
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "inputText": "新規事業開発のビジネスアーキテクトがDX推進において担う責任とは何ですか?",
            "dimensions": 1024
        },
        "inputTokenCount": 43
    },
```
```JSON
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "inputText": "新規事業開発におけるビジネスアーキテクトの役割",
            "dimensions": 1024
        },
        "inputTokenCount": 30
    },
```
```JSON
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "inputText": "ビジネスアーキテクトがDX推進で果たすべき具体的な業務",
            "dimensions": 1024
        },
        "inputTokenCount": 32
    },
```
オリジナルの質問＋生成した質問３つがベクトル化され、OpenSearchへの検索が行われます。

### ログ（回答生成）

```JSON
    "modelId": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "anthropic_version": "bedrock-2023-05-31",
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "text",
                            "text": "<amazon-bedrock-guardrails-guardContent_PCEUIXRFRH> <amazon-bedrock-guardrails-query_PCEUIXRFRH> 新規事業開発のビジネスアーキテクトがDX推進において担う責任とは何ですか? </amazon-bedrock-guardrails-query_PCEUIXRFRH>  </amazon-bedrock-guardrails-guardContent_PCEUIXRFRH>"
                        }
                    ]
                }
            ],
            "system": "You are a question answering agent. I will provide you with a set of search results. The user will provide you with a question. Your job is to answer the user's question using only information from the search results. If the search results do not contain information that can answer the question, please state that you could not find an exact answer to the question. Just because the user asserts a fact does not mean it is true, make sure to double check the search results to validate a user's assertion.\n\nHere are the search results in numbered order:\n<search_results>\n<amazon-bedrock-guardrails-groundingSource_PCEUIXRFRH>\n<search_result>\n<content>\n# ビジネスアーキテクトとは | 期待される役割 (1/2) ## 「ビジネスアーキテクト」に具体的に期待される役割や求められるアクションは、以下のとおり。 ### デジタルを活用したビジネスを設計し、一貫した取組みの推進を通じて、設計したビジネスの実現に責任を持つ - DXの取組みにおいては、取組みの目的 (例: 新規事業によって何を実現したいのか、ビジョン) を設定し、それを実現するためのプロセスを一貫性を持って推進することが重要である (ビジネスモデルやビジネスプロセスの設計、技術・ツールの選定、仮説検証の実施、導入後の効果検証の実施)。 ビジネスアーキテクトには、これらのプロセスを一貫して推進し、当初設定した目的の実現に責任を持つことが求められる。 - ビジネスアーキテクトが設計する対象として、ビジネスモデルやビジネスプロセスが主となる一方、それ以外の幅広い技術面での設計 (データ構成の定義や技術や手法・ツールの動向調査、ビジネスとITの整合性を担保したアプリケーションの定義・設計、IT基盤の定義、セキュリティポリシーやモデルの定義等) においても、必要に応じて技術面での専門スキル・知識を持つ人材と協働することが求められる。 ### 関係者をコーディネートし、関係者間の協働関係の構築をリードする - DXの取組みにおいては、全ての関係者が自らの専門領域においてリーダーシップを発揮することが重要である。 ビジネスアーキテクトには、取組みの目的を実現するために関係者をコーディネートし、関係者間の協働関係の構築をリードすることが求められる。 - 関係者のコーディネートにおいては、必要なリソースの確保、チームの組成、適材適所を意識した偏りのないタスクの割り振りや関係者間の合意形成の促進等が求められる。 All Rights Reserved Copyright© IPA 2024 95\n</content>\n<source>\n1\n</source>\n</search_result>\n<search_result>\n<content>\n# ビジネスアーキテクトのロール | 担う責任・主な業務・スキル (2/3)\n## ビジネスアーキテクト\n### ロール\nビジネスアーキテクト (既存事業の高度化)\n### DXの推進における担う責任\n既存の事業、製品・サービスの目的を見直し、再定義した目的の実現方法を策定したうえで、関係者をコーディネートし関係者間の協働関係の構築をリードしながら、目的実現に向けたプロセスの一貫した推進を通じて、目的を実現する\n### 主な業務\n* 社内外の環境、社会や顧客・ユーザーのニーズ、技術動向等を踏まえて、既存の事業、製品・サービスの目的を再定義し、目的を実現するためのビジネスプロセスの設計、活用する技術や手法・ツールの選定を行う\n* 既存の製品・サービスの実現可能性や活用するソリューションの有効性を検証のうえ、既存の事業計画を見直し、ソリューションの要件の詳細化から実現に責任を持つ\n* 顧客・ユーザーからのフィードバックやKPIのモニタリングを通じて、プロセスやソリューションの収益性を向上する施策（ターゲットとなる顧客・ユーザー、領域の拡大等）を継続的に検討・実行する\n* 構想から効果検証まで一貫して、関係者全体のコーディネート（必要なリソースの確保、チームの組成、適材適所を意識した偏りのないタスクの割り振り、関係者間の合意形成の促進等）を担う\n### 必要なスキル\n| カテゴリー | サブカテゴリ― | スキル項目 | 重要度 |\n|-|-|-|-|\n| | ビジネス戦略策定・実行 | a |\n| ビジネス変革 | プロダクトマネジメント | a |\n| | 変革マネジメント | a |\n| | システムズエンジニアリング | a |\n| | エンタープライズアーキテクチャ | a |\n| | プロジェクトマネジメント | b |\n| ビジネスモデル・プロセス | ビジネス調査 | a |\n| | ビジネスモデル設計 | a |\n| | ビジネスアナリシス | a |\n| | 検証（ビジネス視点） | a |\n| | マーケティング | b |\n| | ブランディング | b |\n| デザイン | 顧客・ユーザー理解 | b |\n| | 価値発見・定義 | b |\n| | 設計 | d |\n| | 検証（顧客・ユーザー視点） | c |\n| | その他デザイン技術 | d |\n| カテゴリー | サブカテゴリ― | スキル項目 | 重要度 |\n|-|-|-|-|\n| データ活用 | データ・AIの戦略的活用 | b |\n| | データ・AI活用戦略 | b |\n| | データ・AI活用業務の設計・事業実装・評価 | c |\n| AI・データサイエンス | 数理統計・多変量解析・データ可視化 | d |\n| | 機械学習・深層学習 | d |\n| データエンジニアリング | データ活用基盤設計 | d |\n| | データ活用基盤実装・運用 | d |\n| テクノロジー | コンピュータサイエンス | d |\n| ソフトウェア開発 | チーム開発 | d |\n| | ソフトウェア設計手法 | d |\n| | ソフトウェア開発プロセス | c |\n| | Webアプリケーション基本技術 | d |\n| | フロントエンドシステム開発 | d |\n| | バックエンドシステム開発 | d |\n| | クラウドインフラ活用 | d |\n| | SREプロセス | d |\n| | サービス活用 | d |\n| カテゴリー | サブカテゴリ― | スキル項目 | 重要度 |\n|-|-|-|-|\n| テクノロジー | フィジカルコンピューティング | c |\n| デジタルテクノロジー | その他先端技術 | d |\n| | テクノロジートレンド | c |\n| セキュリティ | セキュリティマネジメント | d |\n| セキュリティ体制構築・運営 | セキュリティマネジメント | c |\n| | インシデント対応と事業継続 | c |\n| | プライバシー保護 | b |\n| セキュリティ技術 | セキュア設計・開発・構築 | d |\n| セキュリティ運用・保守・監視 | セキュリティ運用・保守・監視 | d |\n| パーソナルスキル | リーダーシップ | z |\n| | コラボレーション | z |\n| ヒューマンスキル | | |\n| コンセプチュアルスキル | ゴール設定 | z |\n| | 創造的な問題解決 | z |\n| | 批判的思考 | z |\n| | 適応力 | z |\n【重要度凡例】\na 高い実践力と専門性が必要  \nb 一定の実践力と専門性が必要\nc 説明可能なレベルで理解が必要\nd 位置づけや関連性の理解が必要\nz 役割や状況に応じた実践力が必要\nAll Rights Reserved Copyright© IPA 2024 100\n\n</content>\n<source>\n2\n</source>\n</search_result>\n<search_result>\n<content>\n# ビジネスアーキテクト補記：プロダクトマネージャーの担う責任・主な業務・スキル ## DXを推進するプロダクトマネージャーについて、担う責任や主な業務、必要なスキルを以下のとおり定義した。 ### DX推進において担う責任 ✦ ビジネスの変革を通じて実現したい目的・世界観を設定し、それを実現するためのプロダクト（＝デジタル技術を活用した事業、製品・サービス）の戦略策定から開発、リリース、その後の改善までのプロセスを一貫して推進し、社内外の関係者の巻き込み等をリードしながらプロダクトの価値を継続的に向上する。 ### 主な業務 ✦ ビジネスの変革を通じて実現したい目的・世界観を設定し、その実現に向けて社内外の環境、社会や顧客・ユーザーのニーズ、技術動向等を踏まえた戦略策定を行う。 ✦ 戦略を実行するために、プロダクトの開発、リリース、その後の改善を含むあらゆるプロセスにおいて、プロセス相互の関連性を見極め、起こりうる問題への対応方針を決定する。 ✦ 品質評価や顧客・ユーザーからのフィードバックに基づき、プロダクトを改善するとともに、プロダクトのポジショニングや顧客・ユーザーのニーズ分析、収益性向上施策の検討を通じた収益及びユーザー価値の最大化を行い、現状のプロダクトの価値にとどまらない継続的な価値向上を実現する。 ✦ 戦略策定から開発、リリース、その後の改善を含むあらゆるプロセスにおいて一貫して、関係者全体のコーディネート（明確かつ影響力のあるコミュニケーション、パフォーマンス向上に向けたチーム作り等）を担う。 ### 必要なスキル ✦ プロダクトマネージャーは、関係者をリードしながらの各プロセスの一気通貫した推進や、複数のプロダクトを組み合わせた取組みの推進という点で、ビジネスアーキテクトと共通の役割であることから、その役割を果たすために必要なスキルもビジネスアーキテクトと共通であると考えられる。 ✦ 上記を踏まえ、プロダクトマネージャーに必要なスキルは、ビジネスアーキテクト（新規事業開発及び既存事業高度化）に必要なスキルと共通であるものとする。 All Rights Reserved Copyright© IPA 2024 106\n</content>\n<source>\n3\n</source>\n</search_result>\n<search_result>\n<content>\n# ビジネスアーキテクトのロール | スキルマッピングの考え方 ## ビジネスアーキテクト（新規事業開発） ✓ 「ビジネス変革」や「データ活用」関連のスキルにおいて、知識とともに高い実践力が求められる * 新たな製品・サービスの目的を定義し、目的を実現するためのビジネスモデルやビジネスプロセスの設計を行う際に必要 ✓ 「テクノロジー」や「セキュリティ」関連のスキルについても、関係者をコーディネートするために一定の知識をもっていることが求められる * ビジネスモデルやビジネスプロセス以外の幅広い技術面での設計（データ構成の定義や技術や手法・ツールの動向調査、ビジネスとITの整合性を担保したアプリケーションの定義・設計、IT基盤の定義、セキュリティポリシーやモデルの定義等）を行う際に必要 ## ビジネスアーキテクト（既存事業の高度化） ✓ 「ビジネスアーキテクト（新規事業開発）」同様、「ビジネス変革」や「データ活用」関連のスキルにおいて、知識とともに高い実践力が求められるほか、「テクノロジー」や「セキュリティ」関連のスキルについても、関係者をコーディネートするために一定の知識をもっていることが求められる ✓ 新規事業開発と既存事業の高度化は、スキルを実践する場面・発揮する場面が異なり、それぞれに異なる難しさがあると考えられるが、必要なスキル自体に差はないと考えられるため、新規事業開発と同様のスキルが必要であるとした * 新規事業開発は、何もないところからビジネスの変革を通じて新たに実現したいことを定義する点では、既存事業の高度化よりも難易度が高いが、一方で、既存事業の高度化は、すでにある製品・サービスの要件との整合性担保や、ステークホルダーとの調整を行いながらスケールさせなければならない点において新規事業開発よりも難易度が高いと考えられる ## ビジネスアーキテクト（社内業務の高度化・効率化） ✓ 取組みテーマの範囲が社内業務であることから、ビジネス変革やデータ・AIの戦略的活用において、新規事業開発や既存事業の高度化ほどの高い実践力は求められないが、ステークホルダーの多い「変革マネジメント」については高い実践力が必要 * 関係者のコーディネート（必要なリソースの確保、チームの組成、適材適所を意識した偏りのないタスクの割り振り）を行う際に必要\n</content>\n<source>\n4\n</source>\n</search_result>\n<search_result>\n<content>\n# DX推進スキル標準の構成｜言葉の定義\n- DX推進スキル標準を構成する人材類型、ロール、スキルに関する用語の定義は以下のとおり。\n| 用語 | 定義 |\n|-|-|\n| 人材類型 | 企業や組織のDXの推進において必要とされる人材を5つの類型に区分したもの<br>（ビジネスアーキテクト/デザイナー/データサイエンティスト/ソフトウェアエンジニア/サイバーセキュリティ） |\n| ロール | ある人材類型を、業務の違いによりさらに詳細に区分したもの<br>※1人の人材が複数のロールを兼ねることもある |\n| DXの推進において<br>担う責任 | 各ロールがDXを推進する上で果たすべきミッション |\n| 主な業務 | 各ロールが上記責任を果たすために実施すべきと考えられる仕事・作業・タスク |\n| スキル項目 | 企業や組織のDX推進における業務遂行に必要とされる知識や能力などの項目 |\n| 学習項目例 | あるスキル項目の習得に向けて学習が期待される項目の一例<br>※学習項目例はあくまでも例であり、全ての項目の学習を必須とするものではない |\nAll Rights Reserved Copyright© IPA 2024 69\n\n</content>\n<source>\n5\n</source>\n</search_result>\n\n</amazon-bedrock-guardrails-groundingSource_PCEUIXRFRH>\n</search_results>\n\nIf you reference information from a search result within your answer, you must include a citation to source where the information was found. Each result has a corresponding source ID that you should reference.\n\nNote that <sources> may contain multiple <source> if you include information from multiple results in your answer.\n\nDo NOT directly quote the <search_results> in your answer. Your job is to answer the user's question as concisely as possible.\n\nYou must output your answer in the following format. Pay attention and follow the formatting and spacing exactly:\n<answer>\n<answer_part>\n<text>\nfirst answer text\n</text>\n<sources>\n<source>source ID</source>\n</sources>\n</answer_part>\n<answer_part>\n<text>\nsecond answer text\n</text>\n<sources>\n<source>source ID</source>\n</sources>\n</answer_part>\n</answer>",
            "max_tokens": 4000,
            "temperature": 0,
            "top_p": 1,
            "stop_sequences": [
                "\nObservation"
            ],
            "amazon-bedrock-guardrailConfig": {
                "tagSuffix": "PCEUIXRFRH"
            },
            "top_k": 50
        },
        "inputTokenCount": 5152
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": {
            "id": "msg_bdrk_01WVTwBKiV9nHJDzd8uH1cpP",
            "type": "message",
            "role": "assistant",
            "model": "claude-3-sonnet-20240229",
            "content": [
                {
                    "type": "text",
                    "text": "<answer>\n<answer_part>\n<text>\n新規事業開発のビジネスアーキテクトが DX 推進において担う責任は、新たな製品・サービスの目的を定義し、その目的を実現するためのビジネスモデルやビジネスプロセスを設計することです。そして、関係者をコーディネートしながら、設計したビジネスモデルやプロセスを一貫して推進し、当初設定した目的の実現に責任を持つことが求められます。\n</text>\n<sources>\n<source>1</source>\n</sources>\n</answer_part>\n</answer>"
                }
            ],
            "stop_reason": "end_turn",
            "stop_sequence": null,
            "usage": {
                "input_tokens": 5152,
                "output_tokens": 187
            },
            "amazon-bedrock-trace": {
                "guardrail": {
                    "outputs": [
                        {
                            "lvgsup0rgo2c": {
                                "contextualGroundingPolicy": {
                                    "filters": [
                                        {
                                            "type": "GROUNDING",
                                            "threshold": 0.7,
                                            "score": 0.85,
                                            "action": "NONE"
                                        },
                                        {
                                            "type": "RELEVANCE",
                                            "threshold": 0.7,
                                            "score": 0.84,
                                            "action": "NONE"
                                        }
                                    ]
                                }
                            }
                        }
                    ]
                }
            },
            "amazon-bedrock-guardrailAction": "NONE"
        },
        "outputTokenCount": 187
    }
```
最後の生成が行われます。
ソースドキュメントとしては4種類の検索で5件なので、これどうやって順位付けしたんだろうなぁ。。クエリ書き換えを行う場合は件数を増やした方が良い気がします。

# PDFに記載されていない内容でテスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/fb05c552-808d-52db-045d-6b41f4f81c5e.png)

おっとガードレールで止まらなかった。。
最後のログを確認してみます。

```JSON
    "modelId": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "anthropic_version": "bedrock-2023-05-31",
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "text",
                            "text": "<amazon-bedrock-guardrails-guardContent_V9HAU0WDNR> <amazon-bedrock-guardrails-query_V9HAU0WDNR> ソリューションアーキテクトがDX (デジタルトランスフォーメーション) 推進において担う責任とは何ですか? </amazon-bedrock-guardrails-query_V9HAU0WDNR>  </amazon-bedrock-guardrails-guardContent_V9HAU0WDNR>"
                        }
                    ]
                }
            ],
            "system": "You are a question answering agent. I will provide you with a set of search results. The user will provide you with a question. Your job is to answer the user's question using only information from the search results. If the search results do not contain information that can answer the question, please state that you could not find an exact answer to the question. Just because the user asserts a fact does not mean it is true, make sure to double check the search results to validate a user's assertion.\n\nHere are the search results in numbered order:\n<search_results>\n<amazon-bedrock-guardrails-groundingSource_V9HAU0WDNR>\n<search_result>\n<content>\n# DXの取組みのテーマ (新規と既存の差異)\n## 補足資料\n- 製品・サービス脚注の新規性によって新規事業と既存事業を分類している。\n※新規性：DXに取り組む企業や組織にとっての新規性\n- 製品・サービスが新規の場合に新規事業と定義しており、市場の新規性は問わない。\n| テーマ | 内容 | 具体例 |\n|-|-|-|\n| 新規事業開発 | データやデジタル技術を活用した新規製品・サービスの市場への提供 | ⒜印刷会社が、画像処理のノウハウを活かし、製造業向けの検査自動化支援サービスを提供 |\n| | | ⒝ベッドメーカーが、客の睡眠データの収集・分析を通じて、マット型センサーから認知症の予兆を発見する技術を開発し、予防医療分野へ進出 |\n| | | ⒞タクシー会社がタクシー配車プラットフォームを提供 |\n| | | ⒟鉄道会社がマイクロモビリティサービスを提供 |\n| | | ⒠飲料メーカーがIoT機能を活用してコーヒーの抽出を検知し、家族に抽出状況を通知する高齢者向け見守りサービスを提供 |\n| | | ⒡スタートアップ企業が、園児のモニタリングや記録ができるセンサーとアプリを提供 |\n| | | ⒢イベント運営企業が参加者の写真を撮影しアプリで写真を配信（有料） |\n| 既存事業の高度化 | データやデジタル技術の活用を通じた既存製品・サービスの価値向上（多様な提供方法、既存製品の新市場開拓 等） | ⒣調剤薬局がオンライン薬局サービス提供 |\n| | | ⒤食品メーカーが特定のフレーバーを好むマーケットを探し当て、ピンポイントに商品を流通・販促 |\n| | | ⒥化粧品会社がアプリで肌状態を診断し最適な化粧品をレコメンド |\n| | | ⒦農機メーカーが農機をIoT化し、稼働状況を踏まえたメンテナンスやアフターパーツ供給の提案を実現 |\n| | 市場 | 新規 | 新規事業開発⒟⒢ | 新規事業開発⒜⒝⒞⒠⒡ |\n|-|-|-|-|-|\n| サービス | 既存 | 既存事業の高度化⒣⒥⒦ | 既存事業の高度化⒤ |\n脚注 製品・サービス：顧客から対価を得るものに限る\nAll Rights Reserved Copyright© IPA 2024 103\n\n</content>\n<source>\n1\n</source>\n</search_result>\n<search_result>\n<content>\n# ビジネスアーキテクトとは | 期待される役割 (1/2) ## 「ビジネスアーキテクト」に具体的に期待される役割や求められるアクションは、以下のとおり。 ### デジタルを活用したビジネスを設計し、一貫した取組みの推進を通じて、設計したビジネスの実現に責任を持つ - DXの取組みにおいては、取組みの目的 (例: 新規事業によって何を実現したいのか、ビジョン) を設定し、それを実現するためのプロセスを一貫性を持って推進することが重要である (ビジネスモデルやビジネスプロセスの設計、技術・ツールの選定、仮説検証の実施、導入後の効果検証の実施)。 ビジネスアーキテクトには、これらのプロセスを一貫して推進し、当初設定した目的の実現に責任を持つことが求められる。 - ビジネスアーキテクトが設計する対象として、ビジネスモデルやビジネスプロセスが主となる一方、それ以外の幅広い技術面での設計 (データ構成の定義や技術や手法・ツールの動向調査、ビジネスとITの整合性を担保したアプリケーションの定義・設計、IT基盤の定義、セキュリティポリシーやモデルの定義等) においても、必要に応じて技術面での専門スキル・知識を持つ人材と協働することが求められる。 ### 関係者をコーディネートし、関係者間の協働関係の構築をリードする - DXの取組みにおいては、全ての関係者が自らの専門領域においてリーダーシップを発揮することが重要である。 ビジネスアーキテクトには、取組みの目的を実現するために関係者をコーディネートし、関係者間の協働関係の構築をリードすることが求められる。 - 関係者のコーディネートにおいては、必要なリソースの確保、チームの組成、適材適所を意識した偏りのないタスクの割り振りや関係者間の合意形成の促進等が求められる。 All Rights Reserved Copyright© IPA 2024 95\n</content>\n<source>\n2\n</source>\n</search_result>\n<search_result>\n<content>\n# DX推進スキル標準の構成｜言葉の定義\n- DX推進スキル標準を構成する人材類型、ロール、スキルに関する用語の定義は以下のとおり。\n| 用語 | 定義 |\n|-|-|\n| 人材類型 | 企業や組織のDXの推進において必要とされる人材を5つの類型に区分したもの<br>（ビジネスアーキテクト/デザイナー/データサイエンティスト/ソフトウェアエンジニア/サイバーセキュリティ） |\n| ロール | ある人材類型を、業務の違いによりさらに詳細に区分したもの<br>※1人の人材が複数のロールを兼ねることもある |\n| DXの推進において<br>担う責任 | 各ロールがDXを推進する上で果たすべきミッション |\n| 主な業務 | 各ロールが上記責任を果たすために実施すべきと考えられる仕事・作業・タスク |\n| スキル項目 | 企業や組織のDX推進における業務遂行に必要とされる知識や能力などの項目 |\n| 学習項目例 | あるスキル項目の習得に向けて学習が期待される項目の一例<br>※学習項目例はあくまでも例であり、全ての項目の学習を必須とするものではない |\nAll Rights Reserved Copyright© IPA 2024 69\n\n</content>\n<source>\n3\n</source>\n</search_result>\n<search_result>\n<content>\n# デザイナーのロール | 担う責任・主な業務・スキル (3/3)\n## 人材類型: デザイナー\n### ロール: グラフィックデザイナー\n#### DXの推進において担う責任\nブランドのイメージを具現化し、ブランドとして統一感のあるデジタルグラフィック、マーケティング媒体等のデザインを行う\n#### 主な業務\n- ブランドのイメージを具現化し、デジタルグラフィック、マーケティング媒体等のデザインを行う\n| カテゴリー | サブカテゴリー | スキル項目 | 重要度 |\n|-|-|-|-|\n| ビジネス変革 | 戦略・マネジメント・システム | ビジネス戦略策定・実行 | d |\n| | | プロダクトマネジメント | d |\n| | | 変革マネジメント | d |\n| | | システムズエンジニアリング | d |\n| | | エンタープライズアーキテクチャ | d |\n| | | プロジェクトマネジメント | c |\n| | ビジネスモデル・プロセス | ビジネス調査 | d |\n| | | ビジネスモデル設計 | d |\n| | | ビジネスアナリシス | d |\n| | | 検証（ビジネス視点） | d |\n| デザイン | | マーケティング | b |\n| | | ブランディング | b |\n| | | 顧客・ユーザー理解 | c |\n| | | 価値発見・定義 | c |\n| | | 設計 | c |\n| | | 検証（顧客・ユーザー視点） | c |\n| | | その他デザイン技術 | a |\n| カテゴリー | サブカテゴリー | スキル項目 | 重要度 |\n|-|-|-|-|\n| データ活用 | データ・AIの戦略的活用 | データ理解・活用 | d |\n| | | データ・AI活用戦略 | d |\n| | | データ・AI活用業務の設計・事業実装・評価 | d |\n| | AI・データサイエンス | 数理統計・多変量解析・データ可視化 | d |\n| | | 機械学習・深層学習 | d |\n| | データエンジニアリング | データ活用基盤設計 | d |\n| | | データ活用基盤実装・運用 | d |\n| テクノロジー | ソフトウェア開発 | コンピュータサイエンス | d |\n| | | チーム開発 | d |\n| | | ソフトウェア設計手法 | d |\n| | | ソフトウェア開発プロセス | d |\n| | | Webアプリケーション基本技術 | d |\n| | | フロントエンドシステム開発 | d |\n| | | バックエンドシステム開発 | d |\n| | | クラウドインフラ活用 | d |\n| | | SREプロセス | d |\n| | | サービス活用 | d |\n| カテゴリー | サブカテゴリー | スキル項目 | 重要度 |\n|-|-|-|-|\n| テクノロジー | デジタルテクノロジー | フィジカルコンピューティング | d |\n| | | その他先端技術 | d |\n| | | テクノロジートレンド | d |\n| セキュリティ | セキュリティマネジメント | セキュリティ体制構築・運営 | d |\n| | | セキュリティマネジメント | d |\n| | | インシデント対応と事業継続 | d |\n| | | プライバシー保護 | d |\n| | セキュリティ技術 | セキュア設計・開発・構築 | d |\n| | | セキュリティ運用・保守・監視 | d |\n| パーソナルスキル | | リーダーシップ | z |\n| | | コラボレーション | z |\n| コンセプチュアルスキル | | ゴール設定 | z |\n| | | 創造的な問題解決 | z |\n| | | 批判的思考 | z |\n| | | 適応力 | z |\n【重要度凡例】\na 高い実践力と専門性が必要  \nb 一定の実践力と専門性が必要\nc 説明可能なレベルで理解が必要\nd 位置づけや関連性の理解が必要\nz 役割や状況に応じた実践力が必要\nAll Rights Reserved Copyright© IPA 2024 116\n\n</content>\n<source>\n4\n</source>\n</search_result>\n<search_result>\n<content>\n# データサイエンティストのロール | スキルマッピングの考え方 ## データビジネスストラテジスト ✓ 「データビジネスストラテジスト」は、事業戦略に基づくデータ戦略を立案し、データ活用領域のプロジェクトのマネジメントを行うとともに、現場部門と一体となって、データを活用する業務の設計や見直しも行う役割を担う。すなわち、DXを推進する他の人材類型や自社内の現場部門等と「データサイエンティスト」を結びつける役割を担うと言える。 ✓ 上のような役割を担うため、「データビジネスストラテジスト」には、ビジネス系やマネジメント系のスキルが他のロールよりも強く求められる。また、「プライバシー保護」などを始めとする各種法制度等に関しても、知識とともに高い実践力が求められる。 ## データエンジニア ✓ 「データエンジニア」は、データ活用基盤として、リアルタイム、動的 (dynamic)、自動 (automatic) に最適化されるようなデータ分析環境を設計・実装・運用する役割を担う。 ✓ 上のような役割を担うため、「データエンジニア」には、「バックエンドシステム開発」や「クラウドインフラ活用」に関しても、ソフトウェアエンジニアと同等の高い実践力が求められる。 ## データサイエンスプロフェッショナル ✓ 「データサイエンスプロフェッショナル」は、データの処理・解析を行うほか、その結果を評価し、新規事業の創出や現場業務の変革・改善につながる知見を生み出す役割を担う。また、現場部門でのデータ活用の仕組みづくりやエンドユーザーに対する教育・サポートを行うという役割も担っており、データの処理・解析だけではなく、その結果の活用の場面においても一定の責任を負っている。 ✓ 上のような役割を担うため、「データサイエンスプロフェッショナル」には、データの分析やその結果の評価に関するスキルのほか、現場のユーザー等を含む多様な関係者と適切にコミュニケーションを行うための平均的なパーソナルスキルなども求められる。 ✓ また、急速に発展しているデータサイエンス分野を中心に、先端技術の動向を把握し、自社で活用できる技術を検証する役割も担うため、「その他先端技術」についても、他のロールよりも深い理解が求められる。 All Rights Reserved Copyright© IPA 2024 124\n</content>\n<source>\n5\n</source>\n</search_result>\n\n</amazon-bedrock-guardrails-groundingSource_V9HAU0WDNR>\n</search_results>\n\nIf you reference information from a search result within your answer, you must include a citation to source where the information was found. Each result has a corresponding source ID that you should reference.\n\nNote that <sources> may contain multiple <source> if you include information from multiple results in your answer.\n\nDo NOT directly quote the <search_results> in your answer. Your job is to answer the user's question as concisely as possible.\n\nYou must output your answer in the following format. Pay attention and follow the formatting and spacing exactly:\n<answer>\n<answer_part>\n<text>\nfirst answer text\n</text>\n<sources>\n<source>source ID</source>\n</sources>\n</answer_part>\n<answer_part>\n<text>\nsecond answer text\n</text>\n<sources>\n<source>source ID</source>\n</sources>\n</answer_part>\n</answer>",
            "max_tokens": 4000,
            "temperature": 0,
            "top_p": 1,
            "stop_sequences": [
                "\nObservation"
            ],
            "amazon-bedrock-guardrailConfig": {
                "tagSuffix": "V9HAU0WDNR"
            },
            "top_k": 50
        },
        "inputTokenCount": 4800
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": {
            "id": "msg_bdrk_01HroF7SDXg7djDWocjqFTSi",
            "type": "message",
            "role": "assistant",
            "model": "claude-3-sonnet-20240229",
            "content": [
                {
                    "type": "text",
                    "text": "<answer>\n<answer_part>\n<text>\nソリューションアーキテクトは、DXの推進において、デジタルを活用したビジネスを設計し、一貫した取り組みの推進を通じて設計したビジネスの実現に責任を持つことが期待されています。具体的には、DXの取り組みの目的を設定し、それを実現するためのプロセスを一貫して推進することが求められます。これには、ビジネスモデルやビジネスプロセスの設計、技術・ツールの選定、仮説検証の実施、導入後の効果検証の実施などが含まれます。\n</text>\n<sources>\n<source>2</source>\n</sources>\n</answer_part>\n\n<answer_part>\n<text>\nまた、ソリューションアーキテクトには、取り組みの目的を実現するために関係者をコーディネートし、関係者間の協働関係の構築をリードすることも求められます。関係者のコーディネートでは、必要なリソースの確保、チームの組成、適材適所を意識したタスクの割り振り、関係者間の合意形成の促進などが必要とされます。\n</text>\n<sources>\n<source>2</source>\n</sources>\n</answer_part>\n</answer>"
                }
            ],
            "stop_reason": "end_turn",
            "stop_sequence": null,
            "usage": {
                "input_tokens": 4800,
                "output_tokens": 389
            },
            "amazon-bedrock-trace": {
                "guardrail": {
                    "outputs": [
                        {
                            "lvgsup0rgo2c": {
                                "contextualGroundingPolicy": {
                                    "filters": [
                                        {
                                            "type": "GROUNDING",
                                            "threshold": 0.7,
                                            "score": 0.81,
                                            "action": "NONE"
                                        },
                                        {
                                            "type": "RELEVANCE",
                                            "threshold": 0.7,
                                            "score": 0.79,
                                            "action": "NONE"
                                        }
                                    ]
                                }
                            }
                        }
                    ]
                }
            },
            "amazon-bedrock-guardrailAction": "NONE"
        },
        "outputTokenCount": 389
    }
```
ガードレール部分を確認すると、
```JSON
"contextualGroundingPolicy": {
    "filters": [
        {
            "type": "GROUNDING",
            "threshold": 0.7,
            "score": 0.81,
            "action": "NONE"
        },
        {
            "type": "RELEVANCE",
            "threshold": 0.7,
            "score": 0.79,
            "action": "NONE"
        }
    ]
}
```
うーん、止まらなかった。

たまに止まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/0661e1f5-ff6b-03c7-40d2-7d4fc03ca736.png)

# 本気で関係の無い内容でテスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/f40f85e3-45e6-9ec7-f73b-6a6e0c46843c.png)

ちょいちょい、
> Sorry, I am unable to assist you with this request.

のエラーが応答されます。

生成ログ自体は特にエラーが出ていないので、生成後のナレッジベースでなにやらエラーが出ているようです。

正常完了する時もあります。（が、ガードレールで止まらなかった）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/a2f3a631-b9ff-0c01-1c48-00e32bba76e4.png)

# 感想

マネージドで、PDFのMarkdown変換、Parent-Child retrieve、クエリの書き換え、ガードレールまで実装できるので、自分で作り込むよりかなり楽になってきました。
日本語にどこまで対応できているかというのは少しありますが、機能的にはかなり充実してきたのではないでしょうか。