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
JAWS PANKRATION前哨戦 The Ultimate RAG Showdown
Search
moritalous
August 24, 2024
0
15
JAWS PANKRATION前哨戦 The Ultimate RAG Showdown
以下のイベントで登壇した資料です。
KyotoLT 第31回 (テーマはAWS!)
https://kyotolt.connpass.com/event/325478/
moritalous
August 24, 2024
Tweet
Share
More Decks by moritalous
See All by moritalous
Contextual Retrievalをやってみた
moritalous
0
100
The Ultimate RAG Showdown
moritalous
0
77
The Ultimate RAG Showdown (Japanese)
moritalous
1
16
Knowledge Bases for Amazon Bedrockの推しポイント
moritalous
2
340
AWSのノーコード・ローコードLLMアプリ開発
moritalous
0
1.6k
Bedrockに触ってみよう - 【#Bedrock開発入門 出版記念】AWSで生成AIアプリ開発をはじめよう!
moritalous
1
1.3k
Bedrock最新情報 Bedrock Studio、Converse API / Tool use | 書籍「Amazon Bedrock 生成AIアプリ開発入門」出版イベント
moritalous
1
320
LINEとSlackとBedrock
moritalous
4
1.6k
Matterport連携手順を解説します
moritalous
0
320
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Unsuck your backbone
ammeep
668
57k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
What's new in Ruby 2.0
geeforr
343
31k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Why Our Code Smells
bkeepers
PRO
334
57k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Transcript
JAWS PANKRATION前哨戦 The Ultimate RAG Showdown 8/23 KyotoLT 第31回 (テーマはAWS!)
@moritalous
自己紹介 森田 和明 富士ソフト株式会社 主任 / フェロー(アーキテクト・エバンジェリスト) AWS Ambassador(2023~) AWS Top
Engineer(2020~) AWS All Certifications Engineer(2024) AWS Community Builder(2024) 生成AIに限らず、AWS関係のアーキテクトとエバンジェリストをやってます Java Webアプリ開発出身 新しいもの好き X / Qiita / GitHub : @moritalous 2 「Jumping deer with japanese temple」 Amazon Titan Image Generatorにて生成
3 Bedrockの入門書を執筆しました!!
明日のJAWS PANKRATION 2024に登壇します!! 4 2024/8/24 17:20 (JST) 登壇予定
RAGとは • RAG(Retrieval-Augmented Generation)とは、生成AIに外部情報 を与えたうえで回答を生成させるテクニック • 生成AIが「もっともらしい嘘(ハルシネーション)」を言わないようにする工夫 5
RAGとは 6 出典:Gartner (2024年8月) https://www.gartner.co.jp/ja/newsroom/press-releases/pr-20240807-future-oriented-infra-tech-hc
過度に期待しています 7
RAGの構成を色々比 較して対決します 8
Knowledge bases for Amazon Bedrock 9 ニックネーム:ナレベベ エントリーNo.1
Knowledge bases for Amazon Bedrockと は 10 • RAGを構築するためのBedrockの機能 •
マネージメントコンソールの操作のみで構築可能 • 機能アップデートも活発
Knowledge bases for Amazon Bedrock Knowledge bases for Amazon Bedrockのアーキテクチャ
11 埋め込み 埋め込み 回答生成 テキスト 抽出 チャンク 分割 OpenSear ch Serverles s 検索 S3 質問 回答
1回のAPI呼び出しで検索と回答生成が可能 def retrieve_and_generate(question: str): response = client.retrieve_and_generate( input={"text": question}, retrieveAndGenerateConfiguration={
"knowledgeBaseConfiguration": { "knowledgeBaseId": knowledgeBaseId, "modelArn": modelArn, "orchestrationConfiguration": { "queryTransformationConfiguration": {"type": "QUERY_DECOMPOSITION"} }, "retrievalConfiguration": { "vectorSearchConfiguration": {"overrideSearchType": "HYBRID"} }, }, "type": "KNOWLEDGE_BASE", }, ) return response 12 APIを一つ呼び出すだけで検索と回答生成が同時に処理される (検索だけを実行するAPIもあります)
ナレベベの評価 • 難易度:☆☆☆ マネジメントコンソールの操作だけで構築可能 OpenSearch Serverlessを自動で作成するクイック作成もある • 機能の豊富さ:☆☆ 機能アップデートが頻繁にあり、最近はAdvanced RAGを構築する機能が追加
RAGの最適化手法の中から厳選されたものを簡単に適用できる • 拡張性:☆ 新しい手法や新しいLLMが登場してもすぐに使えるわけではない • 日本語対応:☆ クイック作成で作成されるOpenSearch Serverlessのインデックスには、日本語向けの 設定が入っていない 13
The Ultimate RAG Showdown 14 ナレベベ 難易度 ☆☆☆ 機能の豊富さ ☆☆
拡張性 ☆ 日本語対応 ☆
Kendraを使って生成AIアプリを構築 15 ニックネーム:KendRAG エントリーNo.2
Kendraとは 16 • マネージドなエンタープライズ検索サービス • データソースコネクターが豊富に用意されている • ドキュメント検索だけでなくFAQ形式の検索にも対応
生成AIアプリ KendRAGのアーキテクチャ 回答生成 検索 検索クエリ生成 17 Bedrock Bedrock テキスト 抽出
チャンク 分割 Kendra S3 質問 回答
処理1)検索クエリ生成関数 def generate_search_query(question: str): result = bedrock_runtime.converse( modelId="cohere.command-r-plus-v1:0", additionalModelRequestFields={"search_queries_only": True},
additionalModelResponseFieldPaths=["/search_queries"], messages=[ { "role": "user", "content": [{"text": question}], } ], ) return list( map( lambda x: x["text"], result["additionalModelResponseFields"]["search_queries"], ) ) 18 検索前にユーザーの質問からク エリを作成する処理。 Cohere Command R/R+で 用意されている機能 例:「Kendraが提供されてい て、BedrockでClaude 3.5 が使えるリージョンは?」 ・Kendraが提供されている リージョン ・BedrockでClaude 3.5が 提供されているr-ジョン
処理2)Kendra検索関数 def fetching_relevant_documents(queries: list[str]): items = [] for query in
queries: response = kendra.retrieve( IndexId=kendra_index_id, QueryText=query, AttributeFilter={ "EqualsTo": {"Key": "_language_code", "Value": {"StringValue": "ja"}} }, ) items.extend( list( map( lambda x: {k: v for k, v in x.items() if k in ["Id", "DocumentId", "DocumentTitle", "Content", "DocumentURI"]}, response["ResultItems"], ) ) ) return items 19 Kendraで検索する処理
処理3)回答生成関数 def generating_response(question: str, documents: list[str]): result = bedrock_runtime.converse( modelId="cohere.command-r-plus-v1:0",
additionalModelRequestFields={"documents": documents}, messages=[ { "role": "user", "content": [{"text": question}], } ], ) return result["output"]["message"]["content"][0]["text"] 20 Bedrockで回答を生成する処理 Cohere Command RのAPIと相性がよい
KendRAGの評価 • 難易度:☆☆ 生成AIアプリを構築する必要があるが、LangChainなどの生成AIフレームワークが充実 しているので、それほど難易度は高くない • 機能の豊富さ:☆ Kendraが提供している検索機能が利用できる 生成AIとの連携部分は開発する必要がある •
拡張性:☆☆☆ 様々なRAGの精度向上テクニックを試して取り入れることが可能 生成AIや検索データベースの変更も容易 • 日本語対応:☆☆ Kendraは日本語に正式に対応 21
The Ultimate RAG Showdown 22 ナレベベ KendRAG 難易度 ☆☆☆ ☆☆
機能の豊富さ ☆☆ ☆ 拡張性 ☆ ☆☆☆ 日本語対応 ☆ ☆☆
OpenSearchでRAG APIを構築 23 ニックネーム:OpenSearchRAG エントリーNo.3
• オープンソースで開発されているOpenSearchをAWSがマネージドで提 供するサービス • RAG用途で使える機能の追加が活発 ◦ ベクトル検索、ニューラル検索、ハイブリッド検索 ◦ Bedrock、SageMakerなど外部AIモデルとの連携 ◦
テキストチャンキング ◦ リランキング ◦ 会話型検索、RAG OpenSearch Serviceとは 24
Search pipeline OpenSearch Service Ingest pipeline OpenSearchRAGのアーキテクチャ 25 Bedrock テキスト
抽出 データソー ス 質問 回答 Bedrock SageMaker Bedrock 埋め込み 検索 リランク 回答生成 チャンク分割 埋め込み
OpenSearchの検索API def search(query: str): response = client.search( index=index_name, body={ "_source":
{"exclude": ["body_chunk_embedding"]}, "query": { "hybrid": { "queries": [ {"match": {"body_chunk": {"query": query,}}}, {"nested": { "score_mode": "max", "path": "body_chunk_embedding", "query": { "neural": { "body_chunk_embedding.knn": { "query_text": query, "model_id": titan_model_id, }}},}},],}}, "ext": { "rerank": {"query_context": {"query_text": query,},}, "generative_qa_parameters": { "llm_model": "litellm", "llm_question": query, "context_size": 4, },},}, params={"search_pipeline": "hybrid-rerank-search-pipeline"}, ) 26 context = list(map(lambda x: x["_source"], response["hits"]["hits"])) for tmp in context: del tmp["body_chunk"] return { "answer": response["ext"]["retrieval_augmented_generation"]["answer"], "context": context, } 検索パイプラインを定義しておくことで、検索 APIを呼び出すだけでRAGの結果を取得できる
OpenSearchRAGの評価 • 難易度:☆ OpenSearch Serviceの様々な機能を組み合わせて構築 OpenSearchのドキュメントには単体機能の解説のみなので、構築の難易度は高い • 機能の豊富さ:☆☆ RAGを想定した機能拡充が活発で、ハイブリッド検索、リランキング、チャンク分割などが 可能
• 拡張性:☆ OpenSearchが対応している機能の範囲で実現 • 日本語対応:☆☆ kuromojiやSudachiプラグインを使うことで日本語に合わせた検索が可能 27
The Ultimate RAG Showdown 28 ナレベベ KendRAG OpenSearchRAG 難易度 ☆☆☆
☆☆ ☆ 機能の豊富さ ☆☆ ☆ ☆☆ 拡張性 ☆ ☆☆☆ ☆ 日本語対応 ☆ ☆☆ ☆☆
RAGの性能評価 29
続きは明日のお楽しみ! 30 2024/8/24 17:20 (JST) 登壇