Slide 1

Slide 1 text

1 © 2025 Japan Digital Design, Inc. Takuya Yo nezawa 2025.05.09 思い立ってBedrockを使って QAチャットボットを作った話 JAWS DAYS 2025 re :Cheers

Slide 2

Slide 2 text

2 © 2025 Japan Digital Design, Inc. 米澤 拓也 Software Engineer Technology & Development Div. and Corporate Culture室 プロフィール @CDK Conference 2024 Not Certified 前職ではCCoE、現職ではSoftware Engineer フロント/バックエンドの実装からインフラ構築など何でもやってます JAWS DAYS2025/ JAWS DAYS2024 / PANKRATION2024 の運営(WEB) Fin-JAWSの運営もやってます、CBはServerlessで2023年生 関西圏のJAWSに出没します 好きなAWSサービスは CloudFront、Lambda、CDK

Slide 3

Slide 3 text

3 © 2025 Japan Digital Design, Inc. 01 はじまりは突然に

Slide 4

Slide 4 text

4 © 2025 Japan Digital Design, Inc. re:Invent期間中

Slide 5

Slide 5 text

5 © 2025 Japan Digital Design, Inc. きっかけはre:Invent

Slide 6

Slide 6 text

6 © 2025 Japan Digital Design, Inc. これ (今は無効化済み)

Slide 7

Slide 7 text

7 © 2025 Japan Digital Design, Inc.

Slide 8

Slide 8 text

8 © 2025 Japan Digital Design, Inc. 02 全体アーキ

Slide 9

Slide 9 text

9 © 2025 Japan Digital Design, Inc. JAWSイベントサイトのコンセプト 安さは正義

Slide 10

Slide 10 text

10 © 2025 Japan Digital Design, Inc. AWS Cloud CDK App Runner ECR Secrets Manager 自動デプロイ GitHub Actions AWS WAF User CloudFront Bedrock Knowledge Base S3 (RAG用) AppConfig 開発中の機能はAppConfigの FeatureFlag用いることで、 デプロイとリリースを分離 QAチャット機能

Slide 11

Slide 11 text

11 © 2025 Japan Digital Design, Inc. 03 いろいろハマったこと

Slide 12

Slide 12 text

12 © 2025 Japan Digital Design, Inc. RAGには Bedrock Knowledge Bases + Pineconeを採用 • AWSでRAGといえば Knowledge Baseですよね • WEBの全ページを自動でPNG化し てKnowledge Baseのデータソース に設定(Cypress利用) • 画像形式なのでパーサーは Claude 3.5 Sonnetを利用 辛かったこと # 1 PNGが3.5MB以上だと Knowledge Baseで処理できない! 手動で分割 HTMLとJSをデータソースに設定するか?? とも思いましたがRemix (Vite)でビルドされているので諦め

Slide 13

Slide 13 text

13 © 2025 Japan Digital Design, Inc. RAGには Bedrock Knowledge Bases + Pineconeを採用 • AWSでRAGといえば Knowledge Baseですよね • WEBの全ページを自動でPNG化し てKnowledge Baseのデータソース に設定(Cypress利用) • 画像形式なのでパーサーは Claude 3.5 Sonnetを利用 辛かったこと # 2 Knowledge Baseのデータ同期で Claude3.5がクオータに抵触しまくり RPM 3 !! ちなみにKB@オレゴンのパーサーで Cross Region Inferenceは利用できない 素直にクオータ緩和リクエスト出せばよかった。。

Slide 14

Slide 14 text

14 © 2025 Japan Digital Design, Inc. 押し寄せる同期失敗の嵐 今後よしなにキューイングとか してくれるようになると嬉しいな。。 今回はボタン連打で運用カバー(辛かった)

Slide 15

Slide 15 text

15 © 2025 Japan Digital Design, Inc. RAGには Bedrock Knowledge Bases + Pineconeを採用 • AWSでRAGといえば Knowledge Baseですよね • WEBの全ページを自動でPNG化し てKnowledge Baseのデータソース に設定(Cypress利用) • 画像形式なのでパーサーは Claude 3.5 Sonnetを利用 辛かったこと # 3 チャットのラリーを続けると WAFに弾かれる 犯人は AWSManagedRulesCommonRuleSet の このルール WAFを経由しないようWEBクライアント側からで はなく、App Runner側 (Remix内部) から チャット用のAPIを呼び出すように変更

Slide 16

Slide 16 text

16 © 2025 Japan Digital Design, Inc. WEBに公開LLM系APIを生やす際に考えたこと① 課金死への対応: 誰でも叩けるAPIになるので連打されたらBedrock課金が増えて泣いちゃう ex.) Jmeter、“必ず10000文字で回答して” ① WAFでのレートリミット制限(Remix内部、App Runnerでは無理そうだった) ② BedrockのAPIコールする時に maxTokenを指定して爆発しないようにした ③ プロンプト側で「最大300文字で回答してね」と指示を与える ④ 会話形式を辞めて一問一答形式にする(先述)

Slide 17

Slide 17 text

17 © 2025 Japan Digital Design, Inc. WEBに公開LLM系APIを生やす際に考えたこと② 怪しいプロンプトへの対応: プロンプトインジェクションとか全く関係ない質問とか ex.)明日の天気を教えて ぶっちゃけ全部カバーは難しかったのでお気持ちで下記を実施 ① フロント側のチャット入力欄でバリデーション設定 ② バックエンド側でも①のバリデーションを設定(Zod) ③ 「イベントに関係ない質問は答えないでね」とプロンプト指示 ④ 一応DBにチャット履歴保存してチラチラ眺める

Slide 18

Slide 18 text

18 © 2025 Japan Digital Design, Inc. 04 文鎮化

Slide 19

Slide 19 text

19 © 2025 Japan Digital Design, Inc. もうLambda Web Adapterに移植完了しました (Cold Start問題が起こるけど大目に見てね) https://speakerdeck.com/takuyay0ne/20241004-jpk2024-retrospective

Slide 20

Slide 20 text

Thank you. 20 © 2025 Japan Digital Design, Inc.