サイト内検索のアップグレード: 生成 AI によるコンテキストに応じた回答

生成 AI とは、AI を使用して、テキスト、画像、音楽、音声、動画などの新しいコンテンツを作成することです。生成 AI は、機械学習(ML)モデルを使用して、人間が作成したコンテンツのデータセット内のパターンと関係を学習します。

このテクノロジーは、Gemini などのアプリケーションを通じて驚くべき能力を示しています。生成 AI ツールをウェブプロダクトに 実装するにはどうすればよいでしょうか

一般的なユースケースの 1 つは、ウェブサイトのコンテンツについて質問するための優れたインターフェースをユーザーに提供することです。機械学習を活用することで 検索結果を大幅に改善できます

ユーザーが質問を記述するインターフェースを作成して、その質問が Gemini などの大規模言語モデル(LLM)に送信され、ユーザーに回答を表示できます。

そのような機能がこのサイトに存在するとします。相互運用 2024 に含まれる API を知りたいユーザーが、次のクエリを入力します。

What are the features included in Interop 24?

残念ながら、出力が正しくない可能性があります。理由は次のとおりです。

  • ユーザーは質問のコンテキストを LLM にほとんど与えていないため、LLM は間違った回答やハルシネーションを返す可能性が高くなります。
  • LLM は、Interop 2024 が作成される前にトレーニングされたか、機能が決定された可能性があるため、その情報は認識されていません。

LLM が最新の情報を見つけることは可能ですが、LLM トレーニング データセットは本質的に古くなっています。最新の結果を維持するには 多大な時間と費用がかかります

プロンプト エンジニアリングを使用する

プロンプト エンジニアリングは、LLM から最良の出力を得るための一連の手法です。

1 つの手法は、プロンプトに追加のコンテキストを提供して、LLM がコンテキストに関連するコンテンツを出力する可能性を高めることです。

相互運用の例を続けると、最初のステップは、記事の全コンテンツをコンテキストとして提供することです。次に、LLM が回答する入力として質問を追加します。次に例を示します。

Context:
Following on from the success of Interop 2022 and Interop 2023, we
are excited about the opportunity to collaborate once again with
all key browser vendors and other relevant stakeholders...
(trimmed to fit in this article)

Input:
What are the features included in Interop 2024?

Gemini の出力は次のようになります。

The features included in Interop 24 are Accessibility, CSS Nesting, Custom
Properties, Declarative Shadow DOM, font-size-adjust, HTTPS URLs for
WebSocket, IndexedDB, Layout, Pointer and Mouse Events, Popover, Relative
Color Syntax, requestVideoFrameCallback, Scrollbar Styling, @starting-style
and, transition-behavior, Text Directionality, text-wrap: balance,URL

回答は提供されたコンテキストに基づいているため、この回答はコンテキストのないプロンプトを使用する場合よりもはるかに優れた可能性があります。

RAG を使用してスケールアップする

たとえば、1 つの記事に関する質問に回答するのではなく、任意の記事を追加コンテキストとして使用して、web.dev に関するより多くの質問に回答するように LLM に指示します。Gemini 1.5 のコンテキスト ウィンドウは 100 万トークンなので、小規模なサイトでは可能ですが、プロンプトが大きいほど実行速度が遅くなり、実行コストも高くなります

LLM の入出力長は、テキスト入力で見つかった一般的な文字シーケンスを表す方法であるトークンで測定され、課金されます。通常、トークンの数は単語の数より大きくなります。たとえば、最初の例の入力は 775 語で、1, 097 個のトークンで表現されました。LLM によってトークンの計算方法が異なる場合があります。ほとんどの場合、テキスト入力用のトークンの数を計算するための API またはエンドポイントが用意されています。

一つの解決策は、LLM プロンプトに関連する記事を提供することです。このタスクは、次の 2 つのパートに分かれています。

  1. LLM にプロンプトを作成するときに、上位の記事の内容をコンテキストとして追加します。
  2. 「相互運用 2024 に含まれる機能」に関連する記事のコンテンツを検索します。

Gemini の結果には、以下の記事に基づくコンテンツを返す必要があります。

入力は次のようになります。

Context:
Article 1:
Over the past two years... (trimmed)

Article 2:
At the end of last year Interop 2023 wrapped up. This effort... (trimmed)

Article 3:
Following on from the success of Interop 2022... (trimmed)

Input:
What are the features included in Interop 2024?

このコンテキストから、期待される出力が生成されます。

* Accessibility * CSS Nesting * Custom Properties
* Declarative Shadow DOM * font-size-adjust
* HTTPS URLs for WebSocket * IndexedDB * Layout
* Pointer and Mouse Events * Popover * Relative Color Syntax
* requestVideoFrameCallback * Scrollbar Styling
* @starting-style and transition-behavior * Text Directionality
* text-wrap: balance * URL

AI の手法に精通している場合、このアプローチでは RAG を使用します。RAG は、生成 AI ツールから実際の回答が得られる可能性を高めるための一般的な手法です。

RAG 手法は通常の全文検索で機能しますが、この方法には欠点があります。

  • 全文検索では、AI が完全一致キーワードを見つけることができます。しかし、LLM はユーザーのクエリの背後にある意図する意味を判断できません。これにより、出力が不完全であったり、不正確になったりする可能性があります。
  • 単語に複数の意味がある場合や、クエリで類義語を使用する場合は、問題が発生することがあります。たとえば、「銀行」(金融機関と川岸)では無関係な結果になる可能性があります。
  • 全文検索では、たまたまキーワードが含まれていても、ユーザーの目的に沿わない結果が出力される場合があります。

セマンティック検索は、次の重要な側面に焦点を当てることで検索精度を向上させる手法です。

  • 検索者の意図: ユーザーが何かを検索している理由を把握しようとします。何を見つけようとしているのか、何を達成しようとしているのか?
  • 文脈的意味: 単語やフレーズを、周囲のテキストや、ユーザーの位置情報や検索履歴などの要因に基づいて解釈します。
  • コンセプト間の関係: セマンティック検索では、ナレッジグラフ(関連するエンティティの大規模なネットワーク)と自然言語処理を使用して、単語とアイデアがどのようにつながっているかを理解します。

そのため、セマンティック検索を備えたツールを構築すると、検索結果はキーワードではなく、クエリの全体的な目的に依存します。つまり、完全に一致するキーワードがなくても、ツールによって関連ドキュメントを特定できます。また、その単語は存在していても意味が異なる結果を除外することもできます。

現時点では、セマンティック検索を使用する 2 つの検索ツール(Vertex AI SearchAlgolia AI Search)を実装できます。

公開済みコンテンツから回答を引き出す

プロンプト エンジニアリングを使用して、プロンプトにコンテキストを追加することで、LLM が見たことのないコンテンツに関連する回答を提供できるようにする方法を学びました。また、検索拡張生成(RAG)手法を使用して、このアプローチを個々の記事からコンテンツのコーパス全体にスケーリングする方法も学びました。セマンティック検索によってユーザーの検索クエリの結果をさらに改善し、プロダクトへの RAG の実装を改善する方法を学びました。

生成 AI ツールが「ハルシネーション」を起こす可能性があることは既知の問題です。これは、よく見積もっても信頼性が低く、最悪の場合はビジネスに積極的に有害なものになります。これらの手法により、ユーザーとデベロッパーのどちらも信頼性が向上し、おそらくはアプリケーションからの出力の信頼性も築くことができます。