「ユーザーとの対話により、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

AI研究

2023年にフォローすべきトップ10のAIインフルエンサー

イントロダクション 先端技術と驚くべき可能性によって駆動される世界で、AIの絶えず進化する領域に遅れをとらないことは、ス...

データサイエンス

「すべてのオンライン投稿は、AIの所有物です」とGoogleが発表

Googleは最近のプライバシーポリシーの更新において、その強力なAIツールでよく知られていることから注目される注目すべき変...

データサイエンス

新しいLAMPスタック:生成AI開発の革新を照らす

LAMPスタックは、さまざまなドメインでの生成型AIの開発と展開において必須となってきています

AIニュース

「オルトマンの退任につながった手紙?」

人工知能の進化する世界において、OpenAIはイノベーションの光として際立ってきました。しかし、最近、同社はCEOのサム・アル...

機械学習

ディープラーニング実験の十のパターンとアンチパターン

この記事では、深層学習エンジニアとしての10年の経験から収集したパターンとアンチパターンのリストを紹介します深層学習エ...

データサイエンス

データから洞察へ:データ分析のための生成AIの活用

「生成AIはデータ分析を革新し、生成AIのデータ分析への影響を探求し、組織が情報に基づいた意思決定にデータを活用する方法...