Hikaru's notes
A collection of notes and resources
View the Project on GitHub
HikaruMizoe/notes
トップ
AWS
Certs
07.AIP-C01
skill_builder_pretest
bedrock guardrails
PII, 誤情報、ヘイトスピーチ、安全でないマルチモーダルコンテンツ用のフィルターがある。
CloudWatchメトリクスもあるので、発砲した時にLambdaを発火して対応するとかできる
プロンプトインジェクション攻撃の対策にConfigでガードレールポリシー適用を強制するのは意味がない?
事後検知なのが微妙?
LLMとの会話ストレージにはDynamoDB
ユーザーIDと会話IDでグローバルセカンダリいんでっくすを作成したテーブルを作る
メッセージとかメタデータとかを保存するのには回送用のソートキーを備えた単一テーブル
最近の会話はDAXでキャッシュ
TTLで古い会話を削除
モデルの出力パラメータ系
温度:低いほど定型的な回答
0.5とかだと合理的な制御を維持しつつ創造性を発揮できるとされる
トップP:累積確率がPに達するまでのトークンを残す
0.8とかだと一定のオプションも考慮しつつ許容できそうな範囲内で多様性を持たせられる
トップK:上位K個のトークンを候補にする
50だと多様性が大きすぎる
Bedrock Flows
LLM呼び出しのチェイニングができる
StepFunctionsとの使い分け
開発・運用オーバーヘッドを気にしている時にはFlows
エラーハンドリングをこだわる必要があるときはStepFunctions
プロンプト差し替えとかモデル変更をアプリデプロイから切り離したければFlows
同期応答だとFlowsもしくはLambda直接呼び出し
非同期処理だとStepFunctions
ただしFlowsにも非同期実行機能が充実しつつある
しかも外側はStepFunctionde中にFlowsを使った入れ子構造もよくあるらしい
OpenSearchでのクエリのパフォーマンスが悪い時があるのを調査する。包括的な診断情報を提供するモニタリングソリューションを実装したい
CWカスタムダッシュボード
コンテキスト検索のレイテンシーメトリクス
OpenSearchのオペレーション数を組み合わせる
モデル評価ジョブで複数のFMに同じテストを適用できる。llm-as-a-judgeにすれば、テスト件数をめちゃスケールできる
AIアシスタントにガイドラインを守らせる方法
Bedrockの自動推論チェックとコンテキストグラウンディング
事実に基づいてるか系の精度
ハルシネーションを起こしていないか
医療情報が不正確になるリスクを減らしたいとき
Bedrockのガードレール
PIIの検出と除去
特定トピックの拒否
ベクトルデータストアのデータドリフト検知にはClarifyは不適?自前実装でデータドリフトを検証するしかないかも
定期実行するバッチで検証するしかないっぽい
OpenSearchとBedrock FMでRAGを実現する手順は厳密に決まっている
データ取り込みパイプライン構築
初期埋め込みの作成と更新を検知して自動埋め込み生成設定
OpenSearchにベクトル検索を導入
FMをデプロイ。コンテキスト検索を備えたプロンプトテンプレートを設定
Bedrock Data Automationのブループリント
目的データを作るロジックとかを置く
メディアのタイプごとに1つがベストプラクティス
プロジェクト内に同じタイプのブループリント
S3のオブジェクトをBedrockのFMで検索するのに使えるデータ整理
S3のシステムメタデータ:タイムスタンプ系
S3のユーザー定義メタデータ:著者情報とか
オブジェクトタグ:分類とか。階層構造を持たせることも可能
OpenSearch:オブジェクト内のセマンティック検索?
いろんな役割のエージェントを用意する場合、スーパーバイザーエージェントを用意することでエージェント間の回答の矛盾を抑える
タスクを委譲する感じだと思う
Bedrock Agent vs Strands Agent (SDK)
Strands Agentsでは複数のGenAIエージェントを実装しておーけストレートできる
ユースケースが複数ある、つまりマルチエージェントが必要なケースで採用する
Bedrock Agentはタスクを計画・推論・実行できるGenAIエージェントの構築ができる
単一タスクに限られるため、マルチエージェントにせざるを得ない複雑さがあるケースで不採用
人力でBedrockのFMの応答の評価をしたい。3ステップ
Cognitoで評価するエキスパートのユーザープールを作る
試験するプロンプトのJSONL形式のデータセットを作ってS3に格納する。CORS設定もする
Bedrockのモデル評価ジョブを作成。人による評価ジョブを設定
【❌】SageMaker Ground Truthでジョブを作成する
モデル評価ジョブで内部的に使うっぽいけど
Bedrockに特定のVPCエンドポイント経由しない限りアクションを拒否させるSCPを設定できる
Amazon Q BusinessでRAGを実装していて、すでにあるエンタープライズディレクトリサービスと統合したい。RBACとかデータアクセスへのコンプライアンスとかガバナンスにも対応したい
コンテンツの自動同期とアクセスコントロール用のセキュリティグループマッピングをデータソースに設定する
RBAC用にIAMアイデンティティセンター認証を使用する。アイデンティティセンターIdPに既存のディレクトリサービスを使う
Organization内でサードパーティ製モデルを禁止したいし、モデル呼び出しログを監視したい。打ち手をふたつ
SCPで未承認モデルとかマーケットプレイスのモデルでのInvokeModel*アクションを禁止する。全社的に禁止するならルートにアタッチする
アクセス許可セットをIdentity Centerに作成する。この許可セットを指定の開発アカウントに適用する
SCPと違ってアタッチされたアカウントに直接ロールとかポリシーを付与する
OUにアタッチはできない
Bedrock Guardrailでのフィルタで下記のユースケースもある
営業時間中はコンテンツポリシーを少し厳しくする
EventBridgeルールでLambda関数を発火して、時刻に基づいた適切なガードレールを選択する
部門ごとにフィルタリングルールをだし分ける
ガードレールのタグで部門を区別
S3のデータを要約するGenAIアプリケーションで、顧客追加したい。各顧客の要約コストを追跡したい。データを分離したい。
【⭕️】Bedrock推論プロファイルを新規顧客用に新規作成。要約処理では顧客用のS3を見るように修正
【⭕️】 EventBridgeルールでPutObjectイベントをキャプチャしてStepFunctionsのステートマシンを起動
OpenSearchは数十億件の製品カタログベクトルに対して類似度検索ができる
Dynamoを選んでしまったが
Berdrockのセマンティックチャンキングは自然言語を対象。HTMLページに不適
そういう時はLambda関数でカスタムロジックを実装
HTMLドキュメントならLangChainフレームワークとか
ナレッジベースを作成して、この関数をカスタムチャンク設定に指定する
クエリの複雑さに基づいて使うFMを切り分けたい
【⭕️】入り口はLambda関数で、小規模なBedrock FMを使って複雑か決める。レスポンスに応じて使うFMを変える
【❌】入り口はLambda関数で、自前実装の正規表現とかで判定する。
判定ロジックのメンテナンスが大変
文字数とかで補足しづらい、セマンティックな複雑さは判定ロジックとしてかけない(と思った方が良い)
分野によってFMだし分けたいならComprehendの結果に応じて?
Bedrockを社内のアプリケーションから使いたい。EntraIDがある
IAM Identity CenterをEntraIDを外部IdPとして構築。カスタムアクセス許可セットでBedrockへのアクセス許可
EntraIDとIAMの間でSAMLベースのフェデレーションをセットアップ。EntraIDのグループにマッピングされあIAMロールを作成してBedrockにアクセスするのに適切なアクセス許可を付与する
AWS RDKなるものがある
Rule Development Kit
問題ではConfigカスタムルールを実装してる。
既存のS3バケットが全部所定の暗号化を設定しているか判定して、修復適用
S3イベント通知でBDAブループリントは呼べない
問題では、S3イベント通知→EventBridge→StepFunctionの流れでマルチモーダルな処理をしてた
StepFunctionで構造化された推論ステップを実装する
【❌】Choiceステートで推論経路を動的に調整する
シナリオが違う問題解決アプローチに一貫性がなくなる可能性がある
【⭕️】ReActパターンを採用する
Reasoning
Choice
Acting & Observations
Bedrockのモデル評価ジョブは各データセットあたり1000プロンプトのクォータがある
超過するときはファイル分割して個別の評価ジョブを走らせることになる
JSONLファイル内で1000行あるということだと思う
API Gateway REST APIとマッピングテンプレートを使って、URLごとに違う外部SaaSとかBedrockとかを使い分ける?
Bedrockではプロンプトキャッシュ機能もある
よくある質問、一般的な問い合わせパターhとかで応答時間を短縮できる
Bedrock Intelligent Prompt Routing機能ある
クエリ特性に基づいて動的なモデル選択
複雑なクエリのときはフォールバックモデルを使う感じ?
同じモデルファミリーだけ?
ニッチなトピックについて、大量のデータは持っている。データにラベル付とかできてない。FMの精度を向上させたい
【⭕️】所有データで継続的な事前トレーニング
ラベルがついてないデータから学習できる
【❌】ファインチューニング
ラベル付きのトレーニングデータが必要
【❌】上流に使用する
大きなモデルからナレッジを抽出した小さく効率的なモデルを作ること
Identity Centerのリージョンレベルのフェイルオーバーオプションが試験に出る