【ChatGPT】LLMにおけるRAG(外部情報の利用)の流れとPrompt例

はじめに

AIの進化に伴い、RAG(Retrieval-Augmented Generation)のような外部情報を活用したAIの利用が注目されています。
今回はRAGを活用した汎用的なBotの作成方法について説明します。

LLMの情報

LLM(大規模言語モデル)は、自然言語を扱うAIであり、ChatGPTやGeminiがその代表例です。
一般的に、社内BotなどのシステムはこのLLMをベースに構築されます。
しかし、LLMは固定された時期までの知識しか持っておらず、社内の特定情報やルールには対応していません。

APIを使ったLLM制御

APIを介したLLMの制御では、ネット検索や画像生成などを1つの機能で行うことはできません。
そのため、持ち得る知識での会話しかできないという制約があります。

もし検索や質問以外の事を行う場合は自前でそれぞれの機能との連携処理を実装する必要があります。

RAG(ネット検索)対応の実装手順

RAGを利用したネット検索をAPIで行うためには、以下の手順が必要です。

  1. 受け取った質問に対してネット検索が必要かを判断す
  2. 質問が必要な場合に検索に使うキーワードを抽出
  3. キーワードを元にGoogle等のAPIを使って検索
  4. 検索結果から質問内容と関係のある内容のみを抽出して要約してプロンプトに追加
  5. 質問の返答を生成

これらの手順を踏むことで、ネット検索を含めた情報の取得が可能となります。

実装の流れ

1-2. ネットの検索の有無とキーワード抽出

今回はネット検索の必要性とキーワードの抽出を同時に行います。
LLMを用いて、検索の必要性を判断する仕組みを構築してみましょう!

# Search Support Tool
Respond as follows:
Return 'Y' if external searching is necessary.
Return 'N' if searching is unnecessary.
For responses other than 'N,' include:
Search keywords as single words.
Use "Q" in the "type" field for questions with definitive answers, or "I" for information retrieval.
Response Format
{ "result": "Y", "type":"Q", "keywords"="A B C etc" }

LLM(API)へのプロンプトとして、jsonで以下のレスポンスを求めています。

  • 検索が必要な質問か?
    • 必用なら『Y』、不要なら『N』
  • 質問が答えのある質問か?
    • 答えのある場合は『Q』、情報の要求なら『I』
  • 検索する際のキーワード一覧

と検索に必要な情報を返すようにしています。

このjsonを元に次のフローの分岐と検索処理の調整を行っていきます。

3. キーワードを元にGoogle等のAPIを使って検索

Google Custom Search API等を使って、抽出したキーワードを基に検索を行います。

検索APIは複数の選択肢がありますが、低コストで行うにはGoogle Custom Search APIがお勧めです。
1日100クエリーの無料枠があり、個人や小規模な企業向けでは十分無料枠でも活用可能です。
詳細はこちら

検索自体は1-2で出力したjsonのkeywordsを元に行います。

4. 検索結果から質問内容と関係のある内容のみを抽出して要約

次に検索結果から必要な情報を抽出します。
答えのある質問か、情報を求める質問かによって要約方法を変え、関連情報を出力します。

【答えのある質問】

Provide a concise answer based on the provided keywords and input content. Respond using the following format:[Search Content]:[Answer]

キーワードに紐づく情報を簡潔に返答する。

【情報を求める質問】

Summarize the input information based on the provided keywords. Respond using the following format:[Search Content]:[Summary]

キーワードと検索結果を元に内容を要約する。

これで必用に応じた検索結果の返答を取得しています。
検索結果をそのまま質問に利用しても良いのですが、不要な情報が入る事を避けるために要約をしています。

5. 質問の返答を生成

検索APIで得た情報を元に、質問者に対して実際の返答を生成します。

Provide an answer referencing the information obtained from a search. The search results are as follows: [{summary.content}].

※{summary.content}には4の要約結果を代入します。

返答時のPromptに質問内容と合わせて追加のPromptとしてこちらを代入します。

これにより、質問に対して検索等も含めて自動で返答を行い、一度に結果を返すことが可能になります。

社内情報を用いたRAGの構想

社内情報を用いたRAGの構築には、社内ルールを検索する仕組みが求められます。

  • 社内Wiki等のAPIを活用してキーワード検索
    • 現行の仕組みの延長線上
  • 事前に社内資料 からVectorデータによるデータセットを作成してVector検索
    • 中規模以降の環境で主流な方法
  • 事前にFineTuningして学習させることで検索を不要にする
    • 学習後の運用は楽になるが精度を高める為に多くのデータと検証が必要

今後はこれらの手法を検証し、DX化を進めていく事が考えられます。

おわりに

AIを活用したRAGの実装は、ネット検索や社内情報の活用を含め多くの可能性を秘めています。
実際の業務への適用に向け、さらなる検証と改善を重ねていくことが重要です。

ただ実際に自分達だけで精度を高めていく事は知識と試行錯誤が必要となります。
もしAI導入によるDX対応等お考えの方は導入のご依頼も受け付けております!

お問い合わせはこちら