$30 off During Our Annual Pro Sale. View Details »

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. RAG Approach on AWS
    ~Kendraの検索API
    ひとつじゃないって知ってた?~
    JAWS-UG東京 2023 〜Bedrock Night〜
    November 13th, 2023
    小杉 隼人 | Hayato Kosugi

    View Slide

  2. About Me
    • Cloud Engineer @ セゾン情報システムズ
    • AWS Community Builder
    • 2019 - 2023 Japan AWS Top Engineer
    • 12x AWS Certified
    2
    @hayaok3 @hayao_k

    View Slide

  3. 本日お話すること
    • AWS での RAG 実装アプローチ
    • 所属会社の事例紹介
    3

    View Slide

  4. AWS での RAG 実装アプローチ
    4

    View Slide

  5. • 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}

    Question: {question}
    Assistant:

    View Slide

  6. ナレッジソースの選択肢
    • 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

    View Slide

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

    View Slide

  8. 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": {

    View Slide

  9. • 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)

    View Slide

  10. 事例紹介
    10

    View Slide

  11. • LLM Mavericks
    • ボトムアップで意欲の高いメンバーを募集し、20 名ほどで活動
    • バーチャル組織として既存の業務と兼務
    • 個々の⽣成系 AI へのモチベーションを組織的なムーブメントへ
    • ミッション
    • 社員が当たり前に LLM を活用し、業務プロセスを改善したり、プロダクト、
    サービスに取り込み、お客様に価値を届ける
    11
    研究チームの立ち上げ

    View Slide

  12. 12
    研究チームの立ち上げ
    環境の整備 • 社内向け利用環境の構築
    • 利用ガイドラインの作成
    研究 • アイデアや最新情報の収集と共有
    • プロトタイプの作成と PoC
    発信 • 社内外への取り組みの発信
    社内環境向け Web AI チャットボット

    View Slide

  13. • Kendra に製品サポート担当が参照する FAQ の情報を同期
    • 将来的に社員向け Web AI チャットボットに機能を取り込んでいきたい
    • 取り組みの詳細は AWS Jr. Champion の 石原さんの登壇資料を参照ください
    製品サポート部門の業務効率化
    13
    Amazon BedrockとAmazon Kendraで専門知識から回答できる⽣成系AIサービスを構築!
    〜業務効率化につなげている話〜

    View Slide

  14. • 社員が自由にデータ活用できる環境として 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 の実行
    自社データ

    View Slide

  15. • 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}
    )

    View Slide

  16. • Claude だと LangChain で Tools が使用されない事象に遭遇
    16
    ChatDDP を Bedrock する
    Claude 2
    ぱっと見動作しているように見えるが、
    存在しないデータを回答している
    GPT-4
    適切に Tool を選択して
    DDP 上にあるデータを回答している

    View Slide

  17. 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.
    ....
    """
    • 日本語の質問も英語で思考するようにお願いしたら動作した!

    View Slide

  18. 18
    Demo

    View Slide

  19. 他、Bedrock してみてどうだったか
    • Claude が忖度して SQL を実行しないケースがあった
    • 個人情報にはセキュリティ上、アクセスできません〜
    • 有害な出力を⽣成する確率が低い Claude 2 の特色がでているように感じる
    • この事例の用途においては Claude は GPT-4 より精度が劣った
    • 具体的には SQL ⽣成の精度が低く、実行エラーや誤った回答になるケースも
    • テーブル定義を参照せずに SQL を⽣成してしまうなど
    • これらは単に Claude に適したプロンプトになっていないことが原因かも
    19

    View Slide

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

    View Slide

  21. 最後に宣伝させてください🙏
    21

    View Slide

  22. 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

    View Slide

  23. Appendix.
    23

    View Slide

  24. OpenSearch がセマンティック検索をサポート
    24
    • https://aws.amazon.com/jp/about-aws/whats-new/2023/11/amazon-
    opensearch-neural-search/
    • https://docs.aws.amazon.com/opensearch-
    service/latest/developerguide/cfn-template.html

    View Slide

  25. References
    25
    • https://docs.aws.amazon.com/kendra/latest/dg/searching-retrieve.html
    • https://docs.anthropic.com/claude/docs/introduction-to-prompt-design

    View Slide