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
17
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
150
The Ultimate RAG Showdown
moritalous
0
95
The Ultimate RAG Showdown (Japanese)
moritalous
1
18
Knowledge Bases for Amazon Bedrockの推しポイント
moritalous
2
430
AWSのノーコード・ローコードLLMアプリ開発
moritalous
0
1.7k
Bedrockに触ってみよう - 【#Bedrock開発入門 出版記念】AWSで生成AIアプリ開発をはじめよう!
moritalous
1
1.4k
Bedrock最新情報 Bedrock Studio、Converse API / Tool use | 書籍「Amazon Bedrock 生成AIアプリ開発入門」出版イベント
moritalous
1
350
LINEとSlackとBedrock
moritalous
4
1.6k
Matterport連携手順を解説します
moritalous
0
340
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
A better future with KSS
kneath
238
17k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Making Projects Easy
brettharned
116
6k
Six Lessons from altMBA
skipperchong
27
3.6k
Producing Creativity
orderedlist
PRO
343
39k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Facilitating Awesome Meetings
lara
51
6.2k
Automating Front-end Workflow
addyosmani
1366
200k
Statistics for Hackers
jakevdp
797
220k
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) 登壇