Slide 1

Slide 1 text

DEIM2024 チュートリアル AWSで生成AIのRAGを使った チャットボットを作ってみよう クラスメソッド株式会社 新規事業部 生成AIチーム 山本紘暉

Slide 2

Slide 2 text

チュートリアルの内容 自己紹介(5分) 前提の話(5分) ・RAGとは AWSで生成AIを始めるには(15分) ・AWS製リポジトリの紹介 ・使い方・機能の紹介 実際にやってみての課題(10分) ・検索システムでの読み込まれ方 ・コンテキストを理解させるには 対象 ・生成AIを始めてみたい方 ・RAGを試してみたい方 ・LLMを実社会で使う上での課題に 興味がある方 ・大学生・大学院生・研究室のご所属の方

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

自己紹介:山本紘暉 修士(電子情報学) クラスメソッド株式会社 研究開発エンジニア 2020年 5月~ ・コンピュータビジョン 骨格検出や人物追跡 2023年 3月~ ・生成AIやLLM 最近はRAGに注力 「クラスメソッド 山本 ブログ」で検索 https://dev.classmethod.jp/author/yamamoto-hiroki/

Slide 5

Slide 5 text

会社紹介:クラスメソッド株式会社 クラウド(技術コンサル・開発) ・AWS ・Google Cloud ・Azure アプリ(開発) ・モバイル(Android・iOS) ・LINE データ分析(基盤開発・分析) 生成AI(技術コンサル・開発) 運営メディア(やってみるカルチャー) https://classmethod.jp/ AWSで数多くの受賞

Slide 6

Slide 6 text

DEIM2024:ブース展示やってます スポンサーブース ・ブース番号:G1 ・「クラウド技術者養成協会」のスペース 大学様向けのご紹介 ・AWSバウチャー ・Zenn Publication 山本も滞在する予定 ・生成AIの取組み、実社会での課題に関する議論 ・RAGの課題、研究に関する議論

Slide 7

Slide 7 text

背景・前提知識

Slide 8

Slide 8 text

RAGとは LLM単体では知らないことを答えさせる (RAG:Retrieval Augmented Generation) 検索 で LLM を 拡張

Slide 9

Slide 9 text

LLMの問題点・RAGの目的 ユーザ 質問 誤った回答 LLM プログラム 質問 誤った回答 ユーザ 質問 正しい回答 LLM プログラム 質問 + 関連テキスト 正しい回答 参考 ドキュメント 検索 関連テキスト 通常 RAG

Slide 10

Slide 10 text

RAGの構成要素 ユーザ 質問 回答 LLM プログラム 質問 + 関連テキスト 回答 参考 ドキュメント インポート 検索 システム 検索クエリ 関連テキスト

Slide 11

Slide 11 text

RAGのシステム構成(例) AWS ユーザ Slack App Slack Notion アップロード 社内ドキュメント (PDF・ワードなど) Python プログラム (in コンテナ) App Runner Kendra インデックス S3 バケット Bedrock Anthropic Claude インポート

Slide 12

Slide 12 text

RAGを使った質問・回答の様子 質問 「名刺を発注したいのですが、 どうすればいいですか?」 回答 ・参考ドキュメントに基づいて、 発注方法を回答してくれる (使用したドキュメントへのリンクも表示)

Slide 13

Slide 13 text

RAGは社会的なニーズが高い 一般業務として困っている ・多くの会社で ・多くの部門で 社内ドキュメントを検索して 回答を生成するという作業を効率化したい 生成AI導入の流れ ・まず質問回答から始める ・その後、生成AIに業務タスクを任せる 専門業務レベル (専門システムを構築) 一般業務レベル (パッケージを導入) 個人レベル (ChatGPT・Copilotを利用) 広まってる 今ここ もう少し先

Slide 14

Slide 14 text

AWSで生成AIを使い始めるには

Slide 15

Slide 15 text

AWSには色々なサービスがあります ※ エンタープライズ検索 様々のデータソースから 様々なドキュメントを読み込んで 横断的に検索できるシステムの総称 エンタープライズ検索※ を使いたい Amazon Kendra とりあえずRAGを試したい Amazon Bedrock(knowledge base) 生成AIモデルを使いたい Amazon Bedrock(基盤モデル) 文章検索エンジンを作りたい Amazon OpenSearch Service

Slide 16

Slide 16 text

AWSリポジトリの紹介(generative-ai-use-cases) https://github.com/aws-samples/generative-ai-use-cases-jp/ https://dev.classmethod.jp/articles/introduce-aws-samples-gen-ai-app-repo/

Slide 17

Slide 17 text

generative-ai-use-casesのメリット 環境を用意するのが大変 データを外部サービスや海外に出したくない 導入しても使われることが少ない サービスを作り込むのが大変 一度作るのは良いけど、その後の開発で作り直す 開発コストがかかりそう デプロイが簡単 データが社内環境の中で収まる ユースケースごとにUIが用意されている 機能が豊富・使いやすい 機能追加開発が簡単 課題(面倒なこと) メリット

Slide 18

Slide 18 text

generative-ai-use-casesのシステム構成

Slide 19

Slide 19 text

RAGの構成要素(genai-usecaseの場合) 質問 + 会話履歴 ユーザ 質問 回答 LLM プログラム 質問 + 関連テキスト + 会話履歴 回答 参考 ドキュメント インポート 検索 システム 検索クエリ 関連テキスト 検索クエリ LLM 会話履歴

Slide 20

Slide 20 text

実際の画面を見せながら説明 デプロイ方法 ・Cloud9を立ち上げる ・数コマンドを実行する Web画面の使い方 ・サービス内容 RAGの有無で回答が変化する様子

Slide 21

Slide 21 text

AWSログイン~デプロイ開始:AWSにログイン AWSにログイン ・アカウントID ・ユーザ名 ・パスワード サインインアドレス ※ 初ログインの場合はパスワードを 変更してください (コラム:AWSumeを使うと便利)

Slide 22

Slide 22 text

AWSログイン~デプロイ開始:Bedrockでアクセス許可(1) Bedrockのページにアクセス リージョンは以下を選択 ・バージニア北部(us-east-1) 「Model Access」をクリック 補足: ・アカウントごと、リージョンごとに1回必要 ・新しいモデルが出たら、そのモデルを使用するために再度必要

Slide 23

Slide 23 text

AWSログイン~デプロイ開始:Bedrockでアクセス許可(2) 「Manage model access」を クリック 補足:上記は既に許可されている状態です

Slide 24

Slide 24 text

AWSログイン~デプロイ開始:Bedrockでアクセス許可(3) すべてのモデルを選択し、 「Save changes」を押します 補足:上記は既に許可されている状態です

Slide 25

Slide 25 text

AWSログイン~デプロイ開始:Cloud9を準備(1) Cloud9にアクセス リージョンは以下を選択 ・東京(ap-northeast-1) 補足 ・自分のPCからでも可能です ・Cloud9を使う理由:デプロイ時の環境の差分をなくすため 動画:https://www.youtube.com/watch?v=9sMA17OKP1k&ab_channel=KazuhitoGo

Slide 26

Slide 26 text

AWSログイン~デプロイ開始:Cloud9を準備(2) 「環境を作成」をクリック (※ この画像は既に1つ作成した後の状態です)

Slide 27

Slide 27 text

AWSログイン~デプロイ開始:Cloud9を準備(3) 以下のように設定してください ・名前:(任意のもの) ・環境タイプ:新しいEC2 ・インスタンスタイプ:m5.large ・プラットフォーム:Ubuntu ・タイムアウト:4時間 画面下部の「作成」ボタンを 押してください 補足:上記は今回スムーズに作業するための設定で、 上記以外の設定でもデプロイは可能です

Slide 28

Slide 28 text

AWSログイン~デプロイ開始:Cloud9を準備(4) 作成した環境の、Cloud9IDEを「開く」をクリックし、 立ち上がるまでお待ちください(数分)

Slide 29

Slide 29 text

AWSログイン~デプロイ開始:Cloud9を準備(5) 環境が準備されると 右画面のように変わります (以降、右下のシェルで操作します)

Slide 30

Slide 30 text

AWSリポジトリ(generative-ai-use-cases) https://github.com/aws-samples/generative-ai-use-cases-jp/ https://dev.classmethod.jp/articles/introduce-aws-samples-gen-ai-app-repo/

Slide 31

Slide 31 text

AWSログイン~デプロイ開始:genai-usecaseをデプロイ(1) Cloud9のシェルで以下のコマンドを実行してください git clone https://github.com/aws-samples/generative-ai-use-cases-jp cd generative-ai-use-cases-jp (以下はリポジトリにかかれているデプロイ手順と同じです) npm ci (npm audit fix)(必要なら) npx -w packages/cdk cdk bootstrap ※ npm run cdk:deploy はまだ実行しないでください (実行してしまっても、後から修正は可能です)

Slide 32

Slide 32 text

AWSログイン~デプロイ開始:genai-usecaseをデプロイ(2) packages/cdk/cdk.json を開き 以下の2項目を変更してください ・“ragEnabled”をtrueに変更 (”T”rueではありません) ・“allowedSignUpEmailDomains”を [“classmethod.jp”]のように変更 お使いのメールアドレスのドメインを、 リスト形式で設定してください 補足:変更内容の詳細はこちらです ・RAGの有効化 ・メールドメインの制限 ファイルの保存は忘れずに実行してください

Slide 33

Slide 33 text

AWSログイン~デプロイ開始:genai-usecaseをデプロイ(3) Cloud9のシェルで以下のコマンドを実行してください npm run cdk:deploy 少し待つと「Do you wish to deploy these changes (y/n)?」 と聞かれるので、「y」を入力して「enter」を押します (これが面倒な場合は、オプションで無視することが可能です) https://qiita.com/eyuta/items/cc9817d59aa1dc6c8b80#cdk-deploy 20~30分ほど待つとデプロイが完了します (主にKendraのIndexを作成する時間です)

Slide 34

Slide 34 text

AWSログイン~デプロイ開始:genai-usecaseをデプロイ(4) デプロイが完了するとCDKの結果が出力されます この内、「WebUrl」がWebサービスのアドレスです

Slide 35

Slide 35 text

サービスログイン~ユースケース体験:サインイン(1) 認証ページが開かれるので、 「アカウントを作る」を押してください

Slide 36

Slide 36 text

サービスログイン~ユースケース体験:サインイン(2) それぞれ入力してください ・ユーザ名:お使いのメールアドレス ・パスワード ・パスワードの確認 ※ メールアドレスはデプロイ時に設定した ドメインのみ登録可能です 「アカウントを作る」を押してください

Slide 37

Slide 37 text

サービスログイン~ユースケース体験:サインイン(3) メールが送られてきます 確認用のコードが書かれているので、 ページに入力してください 「確定」を押すとログインできます

Slide 38

Slide 38 text

サービスログイン~ユースケース体験:サインイン(4) ログインするとホームページに アクセスできます ここから各ユースケースを 試すことが可能です

Slide 39

Slide 39 text

サービスログイン~ユースケース体験:ユースケースを試す チャットの場合 ChatGPTライクな使い方ができます 他もためしてみましょう

Slide 40

Slide 40 text

RAGのチャットの差分を見てみる RAGなし (Kendraにデータなし) RAGあり (Kendraにデータあり)

Slide 41

Slide 41 text

最後(削除は忘れずに) リソースをすべて削除する場合 npm run cdk:destroy Kendraだけ止める場合 packages/cdk/cdk.json の “ragEnabled”をfalseに変更し npm run cdk:deploy を実行してください ファイルの保存は忘れずに実行してください

Slide 42

Slide 42 text

実際にやってみての課題

Slide 43

Slide 43 text

RAG研究と異なる点 データ(ドキュメント) ・様々な種類・バリエーション ・整備されていないデータ、明示されていない暗黙知 現実的に解くには ・できる限り使い回せる方法で ・手間はそこまでかけられない ・費用対効果

Slide 44

Slide 44 text

山本の今までの取り組み 社内 ・QAボットを作成してみた ・改善ポイントを分析した 案件(お客様向け) ・システムを構築した ・使用状況データを分析した

Slide 45

Slide 45 text

課題:2つをピックアップ(技術的な課題) 課題1:ドキュメントが読み込まれ方が 意図しない形になってしまう ・PDF・Word・PowerPointファイル 課題2:人間が使っている情報に比べて システムが使える情報が少ない ・メタデータ・コンテキスト ・暗黙的な情報

Slide 46

Slide 46 text

課題1:人間の読み方とシステムの読み方が異なる 人間 読むとわかる 違う読まれ方をする システム

Slide 47

Slide 47 text

課題1:テキストに変換された結果を見てみる PDF ? ? Word Power Point テキスト ファイル

Slide 48

Slide 48 text

課題1:確認方法:ドキュメントファイルを追加する S3バケットにドキュメントファイルを アップロード KendraのS3データソースで Syncを実行

Slide 49

Slide 49 text

課題1:確認方法:Kendraの検索機能を使って確認 Kendraの検索ページで確認 ※ API(queryやretriveメソッド)を実行した結果と異なるので、注意してください Search indexed content

Slide 50

Slide 50 text

課題1:PDFファイルの読まれ方(ヘッダ・フッタ部分) 本文間にフッターやページ数が 入り込んでしまう

Slide 51

Slide 51 text

課題1:PDFファイルの読まれ方(表部分) 表部分がテキストの羅列になってしまう チャンクが表の途中で途切れてしまう (→ カラム名が分からなくなる)

Slide 52

Slide 52 text

課題1:PowerPointファイルの読まれ方 https://www.jinji.go.jp/saiyo/siken/senkou/setsumeikai_17.pptx 順番が変わる (オブジェクトのレイヤー順で読まれてる ※推測) 親子関係がわかりにくいテキストになる

Slide 53

Slide 53 text

課題1:Wordファイルの読まれ方 https://www.jdla.org/download/ai-guideline03/ 一部加工 ページに切れ目で分割されることはない (→ そんなに問題なさそう) ただ「四角で囲う強調」や「Heading」などの 装飾の情報は落ちている

Slide 54

Slide 54 text

課題1:テキストファイルの読まれ方 そのまま読み込まれている

Slide 55

Slide 55 text

課題1:画像は読まれない https://www.jinji.go.jp/saiyo/siken/senkou/setsumeikai_17.pptx そもそも画像があったかどうかも わからない ※ Kendraのリファレンスにも デフォルトでは画像が読み込まれないことは明記されています

Slide 56

Slide 56 text

課題1:(参考) 対策:PowerPointをMarkdownに変換する 画像対応の言語モデル(GPT4V・Gemini)に読ませて、 Markdownとして出力させる 入力 結果

Slide 57

Slide 57 text

課題1:(補足) Kendraには前処理を実行するための機能があります ・Custom Document Enrichment https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html https://dev.classmethod.jp/articles/methods-to-select-target-document-in-kendra-search/

Slide 58

Slide 58 text

課題2:回答が難しい例 例: ・質問 「20期の年末年始の スケジュールを教えて」 ・ドキュメント ・2023年の年末年始 ・2022年の年末年始 ポイント ・20期が何なのか把握させる ・20期が何年に対応するのか 計算させる ・1期が何年なのか教える 普遍的な社内知識に対応させる (こうしたケースが大量にある)

Slide 59

Slide 59 text

課題2:人間が利用している情報(ナレッジ関係) (社内情報に関するQAの場合) ※ 山本独自の用語です 性質 1質問に関わる量 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント) 業務知識 社内知識 暗黙知 明文化 (ドキュメント) 業界の常識 間接的・普遍的 直接的・専門的 少ない 多い ドキュメント化されている割合

Slide 60

Slide 60 text

課題2:補足:LLMが対応できる範囲もある(はず) 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント) 業務知識 社内知識 暗黙知 業界の常識 エンタープライズ検索で 検索できる(しやすい)範囲 暗黙知 社会の常識 ある程度はLLMが対応できる ただし、会社固有の知識には 対応できない

Slide 61

Slide 61 text

課題2:人間が利用している情報 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント) 業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト テキスト 画像 リンク 質問 ナレッジ ドキュメント 本文

Slide 62

Slide 62 text

課題2:システムが利用できる情報 システムが使用している情報は、人間に比べてごく一部 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント) 業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト 通常のQAシステムの 対象範囲 通常のQAシステムの 対象範囲 エンタープライズ検索で 検索できる(しやすい)範囲 テキスト 画像 リンク 通常の検索システムの 対象範囲

Slide 63

Slide 63 text

課題2:差分をどう埋めるのか 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント) 業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト 通常のQAシステムの 対象範囲 通常のQAシステムの 対象範囲 エンタープライズ検索で 検索できる(しやすい)範囲 テキスト 画像 リンク 通常の検索システムの 対象範囲 検索システムを 変更する プログラムを 改良する プログラムを 改良する 別の検索システムを追加する(?) できる限り範囲をふやす (制約:そもそもデータがあるか・実装コスト・運用可能か) どうする? (明文化してもらう)

Slide 64

Slide 64 text

課題2:(参考) 最近取り組んでいること ユーザ 質問 回答 LLM プログラム 質問 + 関連テキスト 回答 参考 ドキュメント 前処理 ドキュメント 検索システム 検索クエリ 関連テキスト 前処理済み ドキュメント インポート UI 質問 回答 用語 検索システム 検索クエリ 関連テキスト インポート 他 検索システム 検索クエリ 関連テキスト 自律システム (Agent) ドキュメント 作成者・管理者 フィードバック オンボーディング 定期処理 用語集の自動作成 検索の仕組み 会話履歴

Slide 65

Slide 65 text

他にも課題はたくさん データ工学(分析・前処理)・情報検索・ 機械学習(生成AI・LLM) デザイン(UI・UX)・HCI・システム工学 などの知見をフル活用 https://dev.classmethod.jp/articles/improve-work-efficiency-with- generateive-ai-chatbot-using-rag/

Slide 66

Slide 66 text

得られた知見 https://dev.classmethod.jp/articles/rag-knowledge-on-real-projects/ 理想的なレベルを達成するには まだまだ課題が山積み まずは試してみて改善を繰り返す

Slide 67

Slide 67 text

まとめ

Slide 68

Slide 68 text

このチュートリアルで話したこと 背景・前提知識 ・RAGとは:検索 + 生成AIで 新たな知識に関して回答させること ・世の中のホットトピック AWSで生成AIを始めるには ・AWS製リポジトリが便利 ・使いやすい・機能が豊富 実際にやると課題がたくさん ・検索システムに前処理を加え 意図した読み方に修正する必要 ・人間と同じ情報を持たせるには 検索システムを追加した方が良い 研究的なRAGの精度改善よりも、 前段階にまだまだやることがある

Slide 69

Slide 69 text

DEIM2024:ブース展示やってます スポンサーブース ・ブース番号:G1 ・「クラウド技術者養成協会」のスペース 大学様向けのご紹介 ・AWSバウチャー ・Zenn Publication 山本も滞在する予定 ・生成AIの取組み、実社会での課題に関する議論 ・RAGの課題、研究に関する議論