Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DEIM2024 チュートリアル ~AWSで生成AIのRAGを使ったチャットボットを作ってみよう~
Search
Hiroki YAMAMOTO
March 05, 2024
Science
3
1.4k
DEIM2024 チュートリアル ~AWSで生成AIのRAGを使ったチャットボットを作ってみよう~
Hiroki YAMAMOTO
March 05, 2024
Tweet
Share
More Decks by Hiroki YAMAMOTO
See All by Hiroki YAMAMOTO
Classmethod Odyssey 登壇資料
yamahiro
0
860
実例で紹介するRAG導入時の知見と精度向上の勘所
yamahiro
8
8.6k
JAWS-UG Bedrock Claude Night
yamahiro
3
1.2k
RAGに関する知見
yamahiro
9
74k
Jagu'e'r Tech Writers Meetup #1
yamahiro
0
640
LangChain Japan Meetup
yamahiro
0
910
【Developers IO Dey One】 Passregi CVの現在と取り組んできた改良
yamahiro
0
1k
re:Growth 2021 Amazon Store Amazing Points
yamahiro
0
830
Other Decks in Science
See All in Science
240510 COGNAC LabChat
kazh
0
160
Transformers are Universal in Context Learners
gpeyre
0
620
インフラだけではない MLOps の話 @事例でわかるMLOps 機械学習の成果をスケールさせる処方箋 発売記念
icoxfog417
PRO
2
620
As We May Interact: Challenges and Opportunities for Next-Generation Human-Information Interaction
signer
PRO
0
200
解説!データ基盤の進化を後押しする手順とタイミング
shomaekawa
1
360
Improving Search @scale with efficient query experimentation @BerlinBuzzwords 2024
searchhub
0
250
拡散モデルの概要 −§2. スコアベースモデルについて−
nearme_tech
PRO
0
680
WeMeet Group - 採用資料
wemeet
0
3.7k
LIMEを用いた判断根拠の可視化
kentaitakura
0
370
科学で迫る勝敗の法則(名城大学公開講座.2024年10月) / The principle of victory discovered by science (Open lecture in Meijo Univ. 2024)
konakalab
0
230
Celebrate UTIG: Staff and Student Awards 2024
utig
0
500
深層学習を利用して 大豆の外部欠陥を判別した研究事例の紹介
kentaitakura
0
240
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
510
110k
The Cost Of JavaScript in 2023
addyosmani
45
7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Bash Introduction
62gerente
608
210k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
YesSQL, Process and Tooling at Scale
rocio
169
14k
It's Worth the Effort
3n
183
28k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Embracing the Ebb and Flow
colly
84
4.5k
Visualization
eitanlees
146
15k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Optimizing for Happiness
mojombo
376
70k
Transcript
DEIM2024 チュートリアル AWSで生成AIのRAGを使った チャットボットを作ってみよう クラスメソッド株式会社 新規事業部 生成AIチーム 山本紘暉
チュートリアルの内容 自己紹介(5分) 前提の話(5分) ・RAGとは AWSで生成AIを始めるには(15分) ・AWS製リポジトリの紹介 ・使い方・機能の紹介 実際にやってみての課題(10分) ・検索システムでの読み込まれ方 ・コンテキストを理解させるには
対象 ・生成AIを始めてみたい方 ・RAGを試してみたい方 ・LLMを実社会で使う上での課題に 興味がある方 ・大学生・大学院生・研究室のご所属の方
自己紹介
自己紹介:山本紘暉 修士(電子情報学) クラスメソッド株式会社 研究開発エンジニア 2020年 5月~ ・コンピュータビジョン 骨格検出や人物追跡 2023年 3月~
・生成AIやLLM 最近はRAGに注力 「クラスメソッド 山本 ブログ」で検索 https://dev.classmethod.jp/author/yamamoto-hiroki/
会社紹介:クラスメソッド株式会社 クラウド(技術コンサル・開発) ・AWS ・Google Cloud ・Azure アプリ(開発) ・モバイル(Android・iOS) ・LINE データ分析(基盤開発・分析)
生成AI(技術コンサル・開発) 運営メディア(やってみるカルチャー) https://classmethod.jp/ AWSで数多くの受賞
DEIM2024:ブース展示やってます スポンサーブース ・ブース番号:G1 ・「クラウド技術者養成協会」のスペース 大学様向けのご紹介 ・AWSバウチャー ・Zenn Publication 山本も滞在する予定 ・生成AIの取組み、実社会での課題に関する議論
・RAGの課題、研究に関する議論
背景・前提知識
RAGとは LLM単体では知らないことを答えさせる (RAG:Retrieval Augmented Generation) 検索 で LLM を 拡張
LLMの問題点・RAGの目的 ユーザ 質問 誤った回答 LLM プログラム 質問 誤った回答 ユーザ 質問
正しい回答 LLM プログラム 質問 + 関連テキスト 正しい回答 参考 ドキュメント 検索 関連テキスト 通常 RAG
RAGの構成要素 ユーザ 質問 回答 LLM プログラム 質問 + 関連テキスト 回答
参考 ドキュメント インポート 検索 システム 検索クエリ 関連テキスト
RAGのシステム構成(例) AWS ユーザ Slack App Slack Notion アップロード 社内ドキュメント (PDF・ワードなど)
Python プログラム (in コンテナ) App Runner Kendra インデックス S3 バケット Bedrock Anthropic Claude インポート
RAGを使った質問・回答の様子 質問 「名刺を発注したいのですが、 どうすればいいですか?」 回答 ・参考ドキュメントに基づいて、 発注方法を回答してくれる (使用したドキュメントへのリンクも表示)
RAGは社会的なニーズが高い 一般業務として困っている ・多くの会社で ・多くの部門で 社内ドキュメントを検索して 回答を生成するという作業を効率化したい 生成AI導入の流れ ・まず質問回答から始める ・その後、生成AIに業務タスクを任せる 専門業務レベル
(専門システムを構築) 一般業務レベル (パッケージを導入) 個人レベル (ChatGPT・Copilotを利用) 広まってる 今ここ もう少し先
AWSで生成AIを使い始めるには
AWSには色々なサービスがあります ※ エンタープライズ検索 様々のデータソースから 様々なドキュメントを読み込んで 横断的に検索できるシステムの総称 エンタープライズ検索※ を使いたい Amazon Kendra
とりあえずRAGを試したい Amazon Bedrock(knowledge base) 生成AIモデルを使いたい Amazon Bedrock(基盤モデル) 文章検索エンジンを作りたい Amazon OpenSearch Service
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/
generative-ai-use-casesのメリット 環境を用意するのが大変 データを外部サービスや海外に出したくない 導入しても使われることが少ない サービスを作り込むのが大変 一度作るのは良いけど、その後の開発で作り直す 開発コストがかかりそう デプロイが簡単 データが社内環境の中で収まる ユースケースごとにUIが用意されている
機能が豊富・使いやすい 機能追加開発が簡単 課題(面倒なこと) メリット
generative-ai-use-casesのシステム構成
RAGの構成要素(genai-usecaseの場合) 質問 + 会話履歴 ユーザ 質問 回答 LLM プログラム 質問
+ 関連テキスト + 会話履歴 回答 参考 ドキュメント インポート 検索 システム 検索クエリ 関連テキスト 検索クエリ LLM 会話履歴
実際の画面を見せながら説明 デプロイ方法 ・Cloud9を立ち上げる ・数コマンドを実行する Web画面の使い方 ・サービス内容 RAGの有無で回答が変化する様子
AWSログイン~デプロイ開始:AWSにログイン AWSにログイン ・アカウントID ・ユーザ名 ・パスワード サインインアドレス ※ 初ログインの場合はパスワードを 変更してください (コラム:AWSumeを使うと便利)
AWSログイン~デプロイ開始:Bedrockでアクセス許可(1) Bedrockのページにアクセス リージョンは以下を選択 ・バージニア北部(us-east-1) 「Model Access」をクリック 補足: ・アカウントごと、リージョンごとに1回必要 ・新しいモデルが出たら、そのモデルを使用するために再度必要
AWSログイン~デプロイ開始:Bedrockでアクセス許可(2) 「Manage model access」を クリック 補足:上記は既に許可されている状態です
AWSログイン~デプロイ開始:Bedrockでアクセス許可(3) すべてのモデルを選択し、 「Save changes」を押します 補足:上記は既に許可されている状態です
AWSログイン~デプロイ開始:Cloud9を準備(1) Cloud9にアクセス リージョンは以下を選択 ・東京(ap-northeast-1) 補足 ・自分のPCからでも可能です ・Cloud9を使う理由:デプロイ時の環境の差分をなくすため 動画:https://www.youtube.com/watch?v=9sMA17OKP1k&ab_channel=KazuhitoGo
AWSログイン~デプロイ開始:Cloud9を準備(2) 「環境を作成」をクリック (※ この画像は既に1つ作成した後の状態です)
AWSログイン~デプロイ開始:Cloud9を準備(3) 以下のように設定してください ・名前:(任意のもの) ・環境タイプ:新しいEC2 ・インスタンスタイプ:m5.large ・プラットフォーム:Ubuntu ・タイムアウト:4時間 画面下部の「作成」ボタンを 押してください 補足:上記は今回スムーズに作業するための設定で、
上記以外の設定でもデプロイは可能です
AWSログイン~デプロイ開始:Cloud9を準備(4) 作成した環境の、Cloud9IDEを「開く」をクリックし、 立ち上がるまでお待ちください(数分)
AWSログイン~デプロイ開始:Cloud9を準備(5) 環境が準備されると 右画面のように変わります (以降、右下のシェルで操作します)
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/
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 はまだ実行しないでください (実行してしまっても、後から修正は可能です)
AWSログイン~デプロイ開始:genai-usecaseをデプロイ(2) packages/cdk/cdk.json を開き 以下の2項目を変更してください ・“ragEnabled”をtrueに変更 (”T”rueではありません) ・“allowedSignUpEmailDomains”を [“classmethod.jp”]のように変更 お使いのメールアドレスのドメインを、 リスト形式で設定してください
補足:変更内容の詳細はこちらです ・RAGの有効化 ・メールドメインの制限 ファイルの保存は忘れずに実行してください
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を作成する時間です)
AWSログイン~デプロイ開始:genai-usecaseをデプロイ(4) デプロイが完了するとCDKの結果が出力されます この内、「WebUrl」がWebサービスのアドレスです
サービスログイン~ユースケース体験:サインイン(1) 認証ページが開かれるので、 「アカウントを作る」を押してください
サービスログイン~ユースケース体験:サインイン(2) それぞれ入力してください ・ユーザ名:お使いのメールアドレス ・パスワード ・パスワードの確認 ※ メールアドレスはデプロイ時に設定した ドメインのみ登録可能です 「アカウントを作る」を押してください
サービスログイン~ユースケース体験:サインイン(3) メールが送られてきます 確認用のコードが書かれているので、 ページに入力してください 「確定」を押すとログインできます
サービスログイン~ユースケース体験:サインイン(4) ログインするとホームページに アクセスできます ここから各ユースケースを 試すことが可能です
サービスログイン~ユースケース体験:ユースケースを試す チャットの場合 ChatGPTライクな使い方ができます 他もためしてみましょう
RAGのチャットの差分を見てみる RAGなし (Kendraにデータなし) RAGあり (Kendraにデータあり)
最後(削除は忘れずに) リソースをすべて削除する場合 npm run cdk:destroy Kendraだけ止める場合 packages/cdk/cdk.json の “ragEnabled”をfalseに変更し npm
run cdk:deploy を実行してください ファイルの保存は忘れずに実行してください
実際にやってみての課題
RAG研究と異なる点 データ(ドキュメント) ・様々な種類・バリエーション ・整備されていないデータ、明示されていない暗黙知 現実的に解くには ・できる限り使い回せる方法で ・手間はそこまでかけられない ・費用対効果
山本の今までの取り組み 社内 ・QAボットを作成してみた ・改善ポイントを分析した 案件(お客様向け) ・システムを構築した ・使用状況データを分析した
課題:2つをピックアップ(技術的な課題) 課題1:ドキュメントが読み込まれ方が 意図しない形になってしまう ・PDF・Word・PowerPointファイル 課題2:人間が使っている情報に比べて システムが使える情報が少ない ・メタデータ・コンテキスト ・暗黙的な情報
課題1:人間の読み方とシステムの読み方が異なる 人間 読むとわかる 違う読まれ方をする システム
課題1:テキストに変換された結果を見てみる PDF ? ? Word Power Point テキスト ファイル
課題1:確認方法:ドキュメントファイルを追加する S3バケットにドキュメントファイルを アップロード KendraのS3データソースで Syncを実行
課題1:確認方法:Kendraの検索機能を使って確認 Kendraの検索ページで確認 ※ API(queryやretriveメソッド)を実行した結果と異なるので、注意してください Search indexed content
課題1:PDFファイルの読まれ方(ヘッダ・フッタ部分) 本文間にフッターやページ数が 入り込んでしまう
課題1:PDFファイルの読まれ方(表部分) 表部分がテキストの羅列になってしまう チャンクが表の途中で途切れてしまう (→ カラム名が分からなくなる)
課題1:PowerPointファイルの読まれ方 https://www.jinji.go.jp/saiyo/siken/senkou/setsumeikai_17.pptx 順番が変わる (オブジェクトのレイヤー順で読まれてる ※推測) 親子関係がわかりにくいテキストになる
課題1:Wordファイルの読まれ方 https://www.jdla.org/download/ai-guideline03/ 一部加工 ページに切れ目で分割されることはない (→ そんなに問題なさそう) ただ「四角で囲う強調」や「Heading」などの 装飾の情報は落ちている
課題1:テキストファイルの読まれ方 そのまま読み込まれている
課題1:画像は読まれない https://www.jinji.go.jp/saiyo/siken/senkou/setsumeikai_17.pptx そもそも画像があったかどうかも わからない ※ Kendraのリファレンスにも デフォルトでは画像が読み込まれないことは明記されています
課題1:(参考) 対策:PowerPointをMarkdownに変換する 画像対応の言語モデル(GPT4V・Gemini)に読ませて、 Markdownとして出力させる 入力 結果
課題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/
課題2:回答が難しい例 例: ・質問 「20期の年末年始の スケジュールを教えて」 ・ドキュメント ・2023年の年末年始 ・2022年の年末年始 ポイント ・20期が何なのか把握させる
・20期が何年に対応するのか 計算させる ・1期が何年なのか教える 普遍的な社内知識に対応させる (こうしたケースが大量にある)
課題2:人間が利用している情報(ナレッジ関係) (社内情報に関するQAの場合) ※ 山本独自の用語です 性質 1質問に関わる量 暗黙知 明文化 (ドキュメント) 暗黙知
明文化 (ドキュメント) 業務知識 社内知識 暗黙知 明文化 (ドキュメント) 業界の常識 間接的・普遍的 直接的・専門的 少ない 多い ドキュメント化されている割合
課題2:補足:LLMが対応できる範囲もある(はず) 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント) 業務知識 社内知識 暗黙知
業界の常識 エンタープライズ検索で 検索できる(しやすい)範囲 暗黙知 社会の常識 ある程度はLLMが対応できる ただし、会社固有の知識には 対応できない
課題2:人間が利用している情報 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント)
業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト テキスト 画像 リンク 質問 ナレッジ ドキュメント 本文
課題2:システムが利用できる情報 システムが使用している情報は、人間に比べてごく一部 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知 明文化
(ドキュメント) 業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト 通常のQAシステムの 対象範囲 通常のQAシステムの 対象範囲 エンタープライズ検索で 検索できる(しやすい)範囲 テキスト 画像 リンク 通常の検索システムの 対象範囲
課題2:差分をどう埋めるのか 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント)
業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト 通常のQAシステムの 対象範囲 通常のQAシステムの 対象範囲 エンタープライズ検索で 検索できる(しやすい)範囲 テキスト 画像 リンク 通常の検索システムの 対象範囲 検索システムを 変更する プログラムを 改良する プログラムを 改良する 別の検索システムを追加する(?) できる限り範囲をふやす (制約:そもそもデータがあるか・実装コスト・運用可能か) どうする? (明文化してもらう)
課題2:(参考) 最近取り組んでいること ユーザ 質問 回答 LLM プログラム 質問 + 関連テキスト
回答 参考 ドキュメント 前処理 ドキュメント 検索システム 検索クエリ 関連テキスト 前処理済み ドキュメント インポート UI 質問 回答 用語 検索システム 検索クエリ 関連テキスト インポート 他 検索システム 検索クエリ 関連テキスト 自律システム (Agent) ドキュメント 作成者・管理者 フィードバック オンボーディング 定期処理 用語集の自動作成 検索の仕組み 会話履歴
他にも課題はたくさん データ工学(分析・前処理)・情報検索・ 機械学習(生成AI・LLM) デザイン(UI・UX)・HCI・システム工学 などの知見をフル活用 https://dev.classmethod.jp/articles/improve-work-efficiency-with- generateive-ai-chatbot-using-rag/
得られた知見 https://dev.classmethod.jp/articles/rag-knowledge-on-real-projects/ 理想的なレベルを達成するには まだまだ課題が山積み まずは試してみて改善を繰り返す
まとめ
このチュートリアルで話したこと 背景・前提知識 ・RAGとは:検索 + 生成AIで 新たな知識に関して回答させること ・世の中のホットトピック AWSで生成AIを始めるには ・AWS製リポジトリが便利 ・使いやすい・機能が豊富
実際にやると課題がたくさん ・検索システムに前処理を加え 意図した読み方に修正する必要 ・人間と同じ情報を持たせるには 検索システムを追加した方が良い 研究的なRAGの精度改善よりも、 前段階にまだまだやることがある
DEIM2024:ブース展示やってます スポンサーブース ・ブース番号:G1 ・「クラウド技術者養成協会」のスペース 大学様向けのご紹介 ・AWSバウチャー ・Zenn Publication 山本も滞在する予定 ・生成AIの取組み、実社会での課題に関する議論
・RAGの課題、研究に関する議論