> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jinba.io/llms.txt
> Use this file to discover all available pages before exploring further.

# AWS Bedrock Knowledge Base

> AWS BedrockナレッジベースでRAGとドキュメント同期

## 概要

AWS Bedrockナレッジベースツールを使用すると、既存のAWS Bedrockナレッジベースへの問い合わせ(生ドキュメントの取得、またはRAGによる回答生成)と、S3データソースへのPDFドキュメントの同期ができます。

## 主な機能

* `AWS_BEDROCK_KNOWLEDGE_BASE`
  * 自然言語の `query` でAWS Bedrockナレッジベースに問い合わせます。
  * 2つのモード(config の `mode` で設定): `retrieve` は生の検索結果(本文、ソースの場所、スコア、メタデータ)を返し、`retrieveAndGenerate`(デフォルト)は出典付きのLLM生成回答を返します。
  * `numberOfResults` で取得するドキュメント数を制御できます(1〜100、デフォルト5)。
  * `retrieve` モードでは、ガードレールが設定されている場合に `guardrailAction`(`INTERVENED` または `NONE`)も出力されます。

* `AWS_BEDROCK_KNOWLEDGE_BASE_PDF_SYNC`
  * 既存のBedrockナレッジベースに紐づくS3データソースへPDFをアップロードし、インジェストジョブを開始します。
  * `pdf` 入力にはbase64文字列、データURL(`data:application/pdf;base64,...`)、または公開HTTPS URLを指定できます。
  * コンテンツによる重複排除: オブジェクトキーはPDFのSHA-256ハッシュから生成され、同じ内容のオブジェクトが既にS3に存在する場合はアップロードとインジェストをスキップします(`skipped: true`)。
  * インジェストジョブの完了を待機できます(`waitForIngestion`、デフォルト `true`)。タイムアウト(`ingestionTimeoutSeconds`、30〜1800秒、デフォルト300)とポーリング間隔(`ingestionPollIntervalSeconds`、1〜60秒、デフォルト5)を設定できます。
  * 出力にはS3の `bucket`・`objectKey`、`contentHash`、`ingestionJobId` / `ingestionStatus` が含まれます。

## 認証

どちらのツールもAWSアクセスキーで認証します。config でステップごとに設定します。

* **accessKeyId**: `AWS_ACCESS_KEY_ID` の値、またはそれを含むFlowシークレット名
* **secretAccessKey**: `AWS_SECRET_ACCESS_KEY` の値、またはそれを含むFlowシークレット名

ビルダーごとに自分のAWS認証情報シークレットを登録してください。認証情報に加えて、config には以下が必要です。

* **region**: BedrockナレッジベースのAWSリージョン
* **knowledgeBaseId**: BedrockナレッジベースID
* **dataSourceId**(PDF同期のみ): 対象となるナレッジベースのS3データソースID
* **s3KeyPrefix**(PDF同期のみ、任意): データソースのプレフィックスの直後に追加するフォルダ。アップロード先のオブジェクトパスは `{S3バケット名}{データソースプレフィックス}{s3KeyPrefix}/...` になるため、先頭の `/` は付けず、バケット名自体は含めないでください。

**注意**: AWS認証情報は機密情報として扱い、公開リポジトリにコミットしないでください。

## 使用例

### 例: ナレッジベースからRAGで回答生成

```yaml theme={null}
- id: ask_kb
  tool: AWS_BEDROCK_KNOWLEDGE_BASE
  config:
    - name: region
      value: us-east-1
    - name: knowledgeBaseId
      value: "YOUR_KB_ID"
    - name: mode
      value: retrieveAndGenerate
    - name: accessKeyId
      value: "{{secrets.AWS_ACCESS_KEY_ID}}"
    - name: secretAccessKey
      value: "{{secrets.AWS_SECRET_ACCESS_KEY}}"
  input:
    - name: query
      value: "年間契約の返金ポリシーはどうなっていますか?"
    - name: numberOfResults
      value: 5
```

### 例: PDFを同期して検索する

```yaml theme={null}
- id: sync_pdf
  tool: AWS_BEDROCK_KNOWLEDGE_BASE_PDF_SYNC
  config:
    - name: region
      value: us-east-1
    - name: knowledgeBaseId
      value: "YOUR_KB_ID"
    - name: dataSourceId
      value: "YOUR_DATA_SOURCE_ID"
    - name: accessKeyId
      value: "{{secrets.AWS_ACCESS_KEY_ID}}"
    - name: secretAccessKey
      value: "{{secrets.AWS_SECRET_ACCESS_KEY}}"
  input:
    - name: pdf
      value: "https://example.com/reports/q3-report.pdf"
    - name: filename
      value: "q3-report.pdf"
    - name: waitForIngestion
      value: true

- id: query_kb
  tool: AWS_BEDROCK_KNOWLEDGE_BASE
  config:
    - name: region
      value: us-east-1
    - name: knowledgeBaseId
      value: "YOUR_KB_ID"
    - name: mode
      value: retrieve
    - name: accessKeyId
      value: "{{secrets.AWS_ACCESS_KEY_ID}}"
    - name: secretAccessKey
      value: "{{secrets.AWS_SECRET_ACCESS_KEY}}"
  input:
    - name: query
      value: "Q3レポートにおける主要な収益ドライバー"
    - name: numberOfResults
      value: 10
```

## 注意事項

* **PDFサイズ上限**: 100 MBを超えるPDFは拒否されます。
* **PDF検証**: ファイルは `%PDF` ヘッダーで始まっている必要があり、それ以外のファイル形式は拒否されます。
* **HTTPSのみ**: `pdf` 入力で安全でない `http://` URLは拒否されます。HTTPSを使用してください。
* **重複排除**: アップロードされるオブジェクト名は `{sha256}.pdf` です。同じコンテンツハッシュのオブジェクトが既に存在する場合、アップロードとインジェストはスキップされ、`skipped: true` が返ります。
* **ファイル名**: `filename` はログ用途にのみ使用されます。特殊文字は置換され、100文字に切り詰められます。デフォルトは `document.pdf` です。
* **インジェスト待機**: `waitForIngestion` が `true` の場合、インジェストジョブが `FAILED`・`STOPPING`・`STOPPED` で終了したとき、または `ingestionTimeoutSeconds` 以内に完了しなかったときはステップがエラーになります。
* 検索時の **numberOfResults** の上限は100です。
