「ユーザーとの対話により、RAG使用例でのLLM応答を改善する」

「ユーザーとの対話を通じて、RAGを用いたLLMの応答を向上させる方法」

生成型AIと大規模言語モデル(LLM)の最も一般的な応用の1つは、特定の外部知識コーパスに基づいて質問に答えることです。Retrieval-Augmented Generation(RAG)は、外部知識ベースを使用する質問応答システムを構築するための人気のある技術です。詳細については、Amazon SageMaker、Amazon OpenSearch Service、Streamlit、およびLangChainを使用してパワフルな質問応答ボットを構築するを参照してください。

従来のRAGシステムは、十分な文脈を提供せずに曖昧な質問をするユーザーからの満足のいく回答を提供するのに苦労することがよくあります。これにより、「わかりません」といった役に立たない回答や、LLMによって提供される不正確な虚偽の回答が生じます。この記事では、LangChainを使用した対話的な明確化コンポーネントを導入することで、従来のRAGシステムよりもそのような使用ケースでの回答の品質を改善する解決策を示します。

主なアイデアは、初期の質問が不明確な場合にRAGシステムがユーザーと対話的な対話を行うことを可能にすることです。明確化の質問をすることで、ユーザーに詳細情報を求め、新しい文脈情報を取り入れることで、RAGシステムは曖昧な初期ユーザークエリからでも正確で役に立つ回答を提供するために必要な文脈を収集することができます。

解決策の概要

解決策をデモンストレーションするために、Amazon KendraインデックスAmazon KendraのAWSオンラインドキュメント、Amazon Lex、およびAmazon SageMakerのデータ)と、Amazon BedrockのLLMを使用したLangChainエージェント、およびわかりやすいStreamlitのユーザーインターフェースをセットアップしました。

前提条件

AWSアカウントでこのデモを実行するために、次の前提条件を完了してください:

  1. GitHubリポジトリをクローンし、READMEに説明されている手順に従ってください。
  2. AWSアカウントでAmazon Kendraインデックスを展開します。次のAWS CloudFormation テンプレートを使用して新しいインデックスを作成するか、既に実行中のインデックスを使用できます。新しいインデックスを展開すると、追加の料金が請求書に追加される場合があるため、不要になった場合は削除することをお勧めします。インデックス内のデータは、選択したAmazon Bedrockファウンデーションモデル(FM)に送信されます。
  3. LangChainエージェントはAmazon Bedrockで利用可能なFMに依存していますが、LangChainがサポートする他のLLMに適応することもできます。
  4. コードと共有されたサンプルフロントエンドで実験するには、Amazon SageMaker Studioを使用してStreamlitアプリケーションのローカル展開を実行できます。このデモを実行すると、追加のコストが発生します。

解決策を実装する

従来のRAGエージェントは、次のように設計されることがよくあります。エージェントは、ユーザークエリに関連するドキュメントを取得するために使用されるツールにアクセスできます。取得したドキュメントは、LLMプロンプトに挿入されるため、エージェントは取得したドキュメントスニペットに基づいて回答を提供することができます。

この記事では、KendraRetrievalToolにアクセスできるエージェントを実装し、Amazon Kendraインデックスから関連するドキュメントを取得し、取得されたコンテキストを元に回答を提供します:

# Kendra取得ツールkendra_tool = Tool(    name="KendraRetrievalTool",    func=retrieval_qa_chain,    description="人の質問に答えるためのツールです。このツールへの入力は質問です。",)# 伝統的なRAGエージェントtraditional_agent = initialize_agent(    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,    tools=[kendra_tool]    llm=llm,    early_stopping_method="generate",    memory=conversational_memory,)# ユーザの質問answer = traditional_agent.run("私のEC2インスタンスは何個のGPUを持っていますか?")

完全な実装コードについては、GitHubレポジトリを参照してください。伝統的なRAGのユースケースについては、Amazon SageMaker JumpStartでのファウンデーションモデルを用いた情報検索拡張生成を使用した質問応答に参照してください。

以下の例を考えてみましょう。ユーザが「私のEC2インスタンスは何個のGPUを持っていますか?」と質問しています。次のスクリーンショットで示されるように、エージェントはKendraRetrievalToolを利用して答えを探しています。しかし、エージェントはユーザの参照しているAmazon Elastic Compute Cloud(Amazon EC2)インスタンスタイプが分からないため、ユーザには有益な回答を提供できず、顧客体験が悪くなってしまいます。

通常のRAGの回答

この問題を解決するために、AskHumanToolという追加のカスタムツールを定義し、エージェントに提供します。このツールはLLMに指示して、ユーザの質問がKendraRetrievalToolで良い回答が得られない場合には、ユーザに追加の質問を求めるようにします。これにより、エージェントは次の二つのツールを利用できるようになります:

# 人に質問するためのツールhuman_ask_tool = CustomAskHumanTool()# 二つのツールを持つRAGエージェントimproved_agent = initialize_agent(    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,    tools=[kendra_tool, human_ask_tool],    llm=llm,    early_stopping_method="generate",    memory=conversational_memory,)# ユーザの質問answer = improved_agent.run("私のEC2インスタンスは何個のGPUを持っていますか?")

これにより、エージェントは質問を改善するか、プロンプトに必要な追加コンテキストを提供することができます。エージェントがAskHumanToolをこの目的のために使用するようにガイドするため、LLMに以下のツールの説明を提供します:

KendraRetrievalToolを使用して回答が見つからない場合は、このツールを使用して人に質問する。入力は人への質問である。

次のスクリーンショットで示されるように、AskHumanToolを使用することで、エージェントは曖昧なユーザの質問を特定し、ユーザに追加の質問をして、使用しているEC2インスタンスタイプを明確にするように求めています。

RAG追加質問

ユーザがインスタンスタイプを指定した後、エージェントは元の質問に追加された回答をコンテキストに組み込んで、正しい回答を導き出します。

RAG改善された最終回答

エージェントは今や、関連するドキュメントを取得するためにKendraRetrievalToolを使用するか、AskHumanToolを使って質問を明確にするかを決定できます。エージェントの決定は、プロンプトに挿入されたドキュメントのスニペットが最終的な回答を提供するのに十分かどうかに基づいています。この柔軟性によって、RAGシステムは、ユーザが提出するさまざまなクエリに対応することができます。それには、明確に定義された質問と曖昧な質問の両方が含まれます。

私たちの例では、フルエージェントワークフローは以下の通りです:

  1. ユーザーはRAGアプリにリクエストを行い、「EC2インスタンスは何個のGPUを持っていますか?」と尋ねます。
  2. エージェントはLLMを使用して、どのアクションを取るかを決定します:ユーザーのリクエストに答えるために関連情報を見つけるために、KendraRetrievalToolを呼び出します。
  3. エージェントはツールを使用してAmazon Kendraインデックスから情報を取得します。取得したドキュメントのスニペットはエージェントの指示に挿入されます。
  4. エージェントのLLMは、Amazon Kendraから取得したドキュメントが役に立たないか、ユーザーのリクエストに答えるための十分なコンテキストを含んでいないと推論します。
  5. エージェントはAskHumanToolを使用して追加の質問を作成します。「使用している特定のEC2インスタンスタイプは何ですか?インスタンスタイプを知ることは、それが何個のGPUを持っているかに答えるのに役立ちます。」ユーザーは「ml.g5.12xlarge」と答え、エージェントは今度はEC2インスタンスタイプを検索クエリに追加してKendraRetrievalToolを再度呼び出します。
  6. ステップ2〜4をもう一度実行した後、エージェントは有用な回答を導き出し、ユーザーに送り返します。

次の図は、このワークフローを示しています。RAG improved architecture

この投稿で説明した例は、カスタムAskHumanToolの追加により、必要な情報が足りない場合にエージェントが明確な詳細を要求できるようにすることで、顧客の信頼性と正確性を向上させ、さまざまなドメインのRAGアプリケーションでより良い顧客体験を実現できることを示しています。

クリーンアップ

不必要なコストを発生させないために、使用していない場合はAmazon Kendraインデックスを削除し、デモを実行するためにSageMaker Studioインスタンスをシャットダウンしてください。

結論

この投稿では、ユーザーのカスタマーエクスペリエンスを向上させるために、RAGシステムにカスタムツールを追加して、システムが情報の欠落部分をユーザーに質問することができる方法を示しました。この対話型の会話アプローチは、従来のRAGアーキテクチャを改善するための有望な方向を示しています。対話によって曖昧さを解消する能力は、知識ベースからより満足のいく回答を提供することにつながることに注意してください。

このアプローチはRAGのユースケースに限定されているわけではありません。カスタムAskHumanToolが追加できるエージェントを中心とする他の生成AIユースケースにも適用できます。

Amazon Kendraを生成AIと使用する詳細については、Quickly build high-accuracy Generative AI applications on enterprise data using Amazon Kendra, LangChain, and large language modelsを参照してください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

SRGANs:低解像度と高解像度画像のギャップを埋める

イントロダクション あなたが古い家族の写真アルバムをほこりっぽい屋根裏部屋で見つけるシナリオを想像してください。あなた...

機械学習

AIベースのアプリケーションテストのトップトレンドを知る必要があります

「AIアプリケーションのテストにおける最新のトレンドを把握しましょうこれらの必須のテスト方法で、AIアプリケーションの精...

AIニュース

「AIによる気候変動対策の加速」

「ボストン・コンサルティング・グループとの新しいレポートによると、AIは世界の温室効果ガス排出量の5〜10%を軽減する可能...

AIニュース

「KPMG、AIに20億ドル以上の賭けをし、120億ドルの収益を目指す」

技術革新の急速なペースを強調する大胆な動きとして、主要なプロフェッショナルサービス企業であるKPMGは、生成型AIへの大幅...

機械学習

光ニューラルネットワークとトランスフォーマーモデルを実行した場合、どのようなことが起こるのでしょうか?

ディープラーニングモデルの指数関数的な拡大スケールは、最先端の進化と巨大スケールのディープラーニングのエネルギー消費...

AIテクノロジー

2023年に使用するための11つのAIビデオジェネレータ:テキストからビデオへの変換

AIの最も注目すべき表現の一つは、AIビデオジェネレーターの登場です。これにより、テキストとビジュアルの間の隔たりをなく...