Generative AI Use Case JP (GenU) で Amazon Bedrock Flows で作成したフローを連携する

AWS

2026.3.3

Topics

概要

本記事では、Amazon Bedrock Flows で作成した AI ワークフローを、Generative AI Use Cases JP (GenU) に連携する手順をご紹介します。

今回はユースケースとして、「調査するデータソースに優先度を設ける」というテーマのフローを構築します。

Bedrock Flows の作成

社内ナレッジを優先的に検索し、関連度スコアが閾値を超えた場合は社内情報を基に回答、超えなかった場合は社外ナレッジを検索する条件分岐型の RAG フローを構築しました。

  • 社内ナレッジ:社内特有の詳細な操作手順
  • 社外ナレッジ:一般的な操作手順

処理の流れは以下の通りです。

  1. 社内ナレッジソースを検索
  2. 関連度が閾値を超える場合はその内容を回答する
  3. 関連度が閾値を超えない場合は社外ナレッジソースをもとに回答

このフローにより、優先的に検索させたいナレッジソースを先に検索させることが可能になります。

完成したフローは以下の通りです。

RAGの条件分岐フロー図

フローの全体像

フローの全体像をテキスト形式で表すと、以下のようになります。

ユーザー入力(質問文)
    │
    ├──→ [KnowledgeBaseNode_1_copy] 社内ナレッジ検索(Knowledge Base)
    │         │
    │         ├──→ [InlineCodeNode_1] 関連度スコア判定(スコア > 0.5 )
    │         │         │
    │         │         └──→ [ConditionNode_1] 分岐
    │         │               ├─ true  → [Prompt_1] LLM で回答生成 → [FlowOutputNode_2]
    │         │               └─ false → [KnowledgeBaseNode_2] 社外ナレッジを検索し回答生成 → [FlowOutputNode_3]
    │         │
    │         └──→ [Prompt_1] へ検索結果を渡す(true ルートの場合)
    │
    ├──→ [Prompt_1] へ質問文を渡す(true ルートの場合)
    └──→ [KnowledgeBaseNode_2] へ質問文を渡す(false ルートの場合)

ノード構成

各ノードの役割は以下の通りです。

No ノード名 タイプ 役割
1 FlowInputNode Flow input ユーザーからの質問文を受け取る
2 KnowledgeBaseNode_1_copy Knowledge base 社内ナレッジを検索する
3 InlineCodeNode_1 Inline Code 検索結果の関連度スコアを判定する
4 ConditionNode_1 Condition スコア判定結果に基づいて処理を分岐する
5 Prompt_1 Prompts 検索結果と質問文を基に LLM で回答を生成する
6 KnowledgeBaseNode_2 Knowledge base 社外ナレッジで回答を生成する
7 FlowOutputNode_2 Flow output LLM 生成回答を出力する(関連度が高い場合)
8 FlowOutputNode_3 Flow output 社外 Knowledge Base による回答を出力する(関連度が低い場合)

各ノードの詳細解説

以下 3 つのポイントに絞って解説します。

  • Inline Code での関連度スコア判定
  • Condition の条件分岐
  • 社内ナレッジに関連があった場合の回答

Inline Code での関連度スコア判定

今回は、RAG の関連度を Knowledge Base の出力結果に含まれるscoreを使って判別する仕組みを実装しました。

Knowledge Base からの回答は、以下のように JSON 形式の複雑な構造になっています。

Knowledge Base の出力トレースの一部抜粋

"score": 0.40366350531418077,
"location": {
    "sharePointLocation": null,
    "salesforceLocation": null,
    "sqlLocation": null,
    "kendraDocumentLocation": null,
    "confluenceLocation": null,
    "customDocumentLocation": null,
    "s3Location": {
    "uri": "s3://cold-airflow-148761661473/flows/internal_knowledge.md"
    },
    "type": "S3",
    "webLocation": null
},

しかし、条件ノードは単純な比較しか行えないため、この出力をそのまま利用できません。
そのため、InlineCodeNode を使って score の値のみを抽出し、真偽値 (Boolean) を返す処理を実装しました。

以下の Python コードを使用して、検索結果の関連度を判定します。

def __func(variable):
    return any(item.get('score', 0) > 0.5 for item in variable)

__func(variable)

検索結果の配列を受け取り、いずれかの結果でscoreが 0.5 を超えれば true を返します。

Condition の条件分岐

インラインコードの判定結果(Boolean)に基づいて処理を分岐します。

  • 社内ナレッジに関連度がある場合:社内ナレッジを活用して LLM で回答
  • 社内ナレッジに関連度がない場合:社外ナレッジベースで回答を生成

社内ナレッジに関連があった場合の回答

最初の Knowledge Base を使った社内ナレッジ検索では、score の判定を行なうために、取得した結果を返すだけにしています。
そのため、実際の回答を生成するために、以下の 2 つの入力を受け取っています。

  • retrieveResults: 社内ナレッジからの検索結果
  • document: ユーザーからの元の質問文

なお、社外ナレッジについては、取得した結果に基づいて応答を生成する設定にしています。

エイリアスの作成

フローが完成したら、エイリアスを作成します。

エイリアス作成モーダル

フローのエイリアス一覧画面

このエイリアス ID とフロー ID を、GenU の設定で使用するのでコピーしておきます。

フローの詳細とエイリアス設定

GenU の設定更新

作成したフローを GenU から呼び出せるように、parameter.ts を更新してデプロイします。
flows の配列に作成したフローの情報を追加します。

const envs: Record<string, Partial<StackInput>> = {
  test: {
    flows: [
      {
        flowId: "XXXXXXXX",
        aliasId: "XXXXXXXX",
        flowName: "Sample1",
        description: "サンプルフロー",
      },
    ],
  },
};

generative-ai-use-cases/docs/ja/DEPLOY_OPTION.md at main · aws-samples/generative-ai-use-cases

GenU での動作確認

デプロイ完了後、GenU のチャット画面から実際に動作を確認してみます。

社内ナレッジに該当する検索の場合

社内情報として登録されている内容を聞くと、スコア判定(true ルート)を通過し、社内ナレッジベースの情報を基に回答が生成されます。

FlowチャットでのVPN接続案内

社外ナレッジに該当する検索の場合

社内ナレッジには存在しない一般的な内容を聞くと、スコア判定(false ルート)に分岐し、汎用ナレッジベース側の情報から回答が生成されます。

ログアウト方法に関するチャット

社内・社外どちらにも情報がない場合

どちらのナレッジベースにも関連する情報が含まれていない場合は、「提供された検索結果には〇〇に関する情報は含まれていません。」と、ハルシネーションを起こすことなく適切な回答が返ってきます。

業務外の質問とAIの回答

まとめ

Bedrock Flows を使用することで、条件分岐や複数のナレッジベースのルーティングを含む複雑な AI ワークフローを、視覚的かつ直感的に作成できます。

さらに GenU と連携することで、構築した高度なフローを素早く安全に社内ユーザー向けのチャットインターフェースとして展開することができます。
ユーザーの質問意図に応じた柔軟な生成 AI アプリケーションの実装に、ぜひ Bedrock Flows と GenU の連携を活用してみてください。

NHN テコラスの採用情報はこちら

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら