Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RAG Approach on AWS

hayao_k
November 13, 2023

RAG Approach on AWS

JAWS-UG東京 2023 〜Bedrock Night〜 登壇資料です。
RAG Approach on AWS ~Kendraの検索API、ひとつじゃないって知ってた?~

hayao_k

November 13, 2023
Tweet

More Decks by hayao_k

Other Decks in Technology

Transcript

  1. About Me • Cloud Engineer @ セゾン情報システムズ • AWS Community

    Builder • 2019 - 2023 Japan AWS Top Engineer • 12x AWS Certified 2 @hayaok3 @hayao_k
  2. • Retrieval-Augmented Generation (RAG) • 学習済みの大規模言語モデルに、外部検索によって得られた知識を組み合わせる手法 • 検索結果をプロンプトに組み込むことで”幻覚”を抑止しつつ、回答精度の向上が可能 5 RAG

    とは Amazon Bedrock ナレッジソース Users App Prompt + ナレッジ ナレッジをクエリ Human: Use the following pieces of context to provide a concise answer to the question at the end. If you don‘t know the answer, just say that you don’t know, don‘t try to make up an answer. <context> {context} </context> Question: {question} Assistant:
  3. ナレッジソースの選択肢 • Amazon Kendra • 豊富なコネクターを利用して社内情報ソースを同期、セマンティック検索をサポート • フィルター機能を使うことでユーザーの権限に応じたナレッジデータの参照制御も実現可能 • RAG

    用途に適した Retrieve API がリリース 2023.06 • Vector Database • Embedding モデル等でデータをベクトル化し DB に登録、検索結果をもとにプロンプトを⽣成 • 利用可能なサービスと機能 • Amazon OpenSearch Service の k-NN 検索機能 • Vector Engine for Amazon OpenSearch Serverless (Preview) 2023.07 • RDS for PostgreSQL の pgvector 拡張 • Amazon Aurora PostgreSQL pgvector 拡張 2023.07 6
  4. • Retrieve API • 最大 200 トークンからなるドキュメントの抜粋を 100 個まで取得できる •

    戻り値のデータ構造がシンプルに • 検索結果に FAQ タイプの回答が含まれないという制限あり • FAQ: Kendra が定める仕様で定義した CSV / JSON ファイルを登録し、検索対象にできる機能 • Query API • ドキュメントの抜粋はデフォルトで最大 100 トークン 7 Retrieve API と Query API
  5. 8 Response Syntax の比較 Retrieve API Query API { "QueryId":

    "string", "ResultItems": [ { "Content": "string", "DocumentAttributes": [ { "Key": "string", "Value": { "DateValue": number, "LongValue": number, "StringListValue": [ "string" ], "StringValue": "string" } } ], "DocumentId": "string", "DocumentTitle": "string", "DocumentURI": "string", "Id": "string", "ScoreAttributes": { "ScoreConfidence": "string" } } ] } { "QueryId": "string", "ResultItems": [ { "AdditionalAttributes": [ { "Key": "string", "Value": { "TextWithHighlightsValue": { "Highlights": [ { "BeginOffset": number, "EndOffset": number, "TopAnswer": boolean, "Type": "string" } ], "Text": "string" } }, "ValueType": "string" } ], "CollapsedResultDetail": { "DocumentAttribute": { "Key": "string", "Value": { "DateValue": number, "LongValue": number, "StringListValue": [ "string" ], "StringValue": "string" } }, "ExpandedResults": [ { "DocumentAttributes": [ { "Key": "string", "Value": { "DateValue": number, "LongValue": number, "StringListValue": [ "string" ], "StringValue": "string" } } ], "DocumentExcerpt": { "Highlights": [ { "BeginOffset": number, "EndOffset": number, "TopAnswer": boolean, "Type": "string" } ], "Text": "string" }, "DocumentId": "string", "DocumentTitle": { "Highlights": [ { "BeginOffset": number, "EndOffset": number, "TopAnswer": boolean, "Type": "string" } ], "Text": "string" }, "DocumentURI": "string", "Id": "string" } ] }, "DocumentAttributes": [ { "Key": "string", "Value": {
  6. • AmazonKendraRetriever が利用可能 9 LangChain with Kendra 🦜️🔗LangChain RetrievalQA /

    ConversationalRetrievalChain AmazonKendraRetriever LLMs Amazon Bedrock Amazon Kendra Retrieve API from langchain.chains import RetrievalQA from langchain.chat_models import BedrockChat from langchain.retrievers import AmazonKendraRetriever llm = BedrockChat( model_id="anthropic.claude-v2", model_kwargs={"temperature":0.1} ) retriever = AmazonKendraRetriever( index_id="c0806df7-e76b-4bce-9b5c-d5582f6b1a03", attribute_filter = { "EqualsTo": { "Key": "_language_code", "Value": {"StringValue": "ja"} } } ) qa = RetrievalQA.from_chain_type( llm=llm, chain_type='stuff', retriever=retriever ) query = “Amazon BedrockはPrivateLinkをサポートしていますか" qa.run(query)
  7. • LLM Mavericks • ボトムアップで意欲の高いメンバーを募集し、20 名ほどで活動 • バーチャル組織として既存の業務と兼務 • 個々の⽣成系

    AI へのモチベーションを組織的なムーブメントへ • ミッション • 社員が当たり前に LLM を活用し、業務プロセスを改善したり、プロダクト、 サービスに取り込み、お客様に価値を届ける 11 研究チームの立ち上げ
  8. 12 研究チームの立ち上げ 環境の整備 • 社内向け利用環境の構築 • 利用ガイドラインの作成 研究 • アイデアや最新情報の収集と共有

    • プロトタイプの作成と PoC 発信 • 社内外への取り組みの発信 社内環境向け Web AI チャットボット
  9. • Kendra に製品サポート担当が参照する FAQ の情報を同期 • 将来的に社員向け Web AI チャットボットに機能を取り込んでいきたい

    • 取り組みの詳細は AWS Jr. Champion の 石原さんの登壇資料を参照ください 製品サポート部門の業務効率化 13 Amazon BedrockとAmazon Kendraで専門知識から回答できる⽣成系AIサービスを構築! 〜業務効率化につなげている話〜
  10. • 社員が自由にデータ活用できる環境として Data Driven Platform (DDP) を提供 • DDP に自然言語で問い合わせることにより

    SQL や BI の知識の障壁を取り払う ChatDDP 14 Azure OpenAI Service 顧客管理 購買管理 経費管理 案件管理 会計 社員マスタ データ連携 Data Driven Platform ( Snowflake ) Users ChatDDP ( LangChain & Streamlit ) 部署ごとの有給休暇の 平均取得日数を教えて Vector DB ( Faiss ) テーブル定義およびメタデータを ベクトル化して格納 SQL の⽣成 回答の⽣成 SQL の実行 自社データ
  11. • LangChain の場合、基本は LLMs / Chat models の差し替えだけ • 楽勝!そんなふうに考えていた時期が私にもありました

    15 ChatDDP を Bedrock する 非BedrockアプリをBedrockして開発観点で比較する by @kzk_maeda 2023/10/17 AWSの⽣成AI「Amazon Bedrock」入門&LT会! from langchain.llms import Bedrock llm = Bedrock( model_id="anthropic.claude-v2", model_kwargs={"temperature":0} )
  12. • Claude だと LangChain で Tools が使用されない事象に遭遇 16 ChatDDP を

    Bedrock する Claude 2 ぱっと見動作しているように見えるが、 存在しないデータを回答している GPT-4 適切に Tool を選択して DDP 上にあるデータを回答している
  13. 17 どう解決したか prompt_template = """You are great assistant of employees.

    Answer the following questions as best you can. If you receive a question in Japanese, you must still think in English. .... """ • 日本語の質問も英語で思考するようにお願いしたら動作した!
  14. 他、Bedrock してみてどうだったか • Claude が忖度して SQL を実行しないケースがあった • 個人情報にはセキュリティ上、アクセスできません〜 •

    有害な出力を⽣成する確率が低い Claude 2 の特色がでているように感じる • この事例の用途においては Claude は GPT-4 より精度が劣った • 具体的には SQL ⽣成の精度が低く、実行エラーや誤った回答になるケースも • テーブル定義を参照せずに SQL を⽣成してしまうなど • これらは単に Claude に適したプロンプトになっていないことが原因かも 19
  15. Summary • AWS での RAG 実装アプローチ • ナレッジソースとして使用可能な複数の AWS サービスがある

    • 一般論としてナレッジデータの扱いにはそれなりの運用負荷がある • アクセス許可範囲の制御、データの継続的なメンテナンスなど • Kendra はこれらの実装をシンプルにする機能が提供されている • 本当に LLM / RAG が必要か考える • 必要だったのは単にエンタープライズサーチ (Kendra そのもの) というオチもありえる • 既存アプリの Bedrock への移行 • LLM 部分の差し替えは容易 • LangChain で複雑な処理を組むケースではプロンプトの見直し等も必要 20
  16. AWS re:Invent 2023 に出展します! 22 Come join us at Booth

    #1502 • Las Vegas に現地参加される方はぜひブースへお越しください AWS re:Invent 2023 出展特設ページ https://www.hulft.com/special-column/hulft-event-report/reinvent2023