Gunosy Tech Blog

Gunosy Tech Blogは株式会社Gunosyのエンジニアが知見を共有する技術ブログです。

LLMでWeb検索を効率化!- Web検索エージェントとブラウザ拡張によるアプローチ

はじめに

こんにちは。新規事業開発室の上村 id:muemura です。

本記事は、Gunosy Advent Calendar 2024 23日目の記事です。 昨日の記事は、 imai さんの「まとめ記事の不適切表現を検出するためにLLMを活用した話」でした。

tech.gunosy.io

今回は、新規事業開発室で開発した「ウデキキ」という業務支援ツールで開発した、Web検索を効率化するための取り組みについて紹介します。

ウデキキのWeb検索支援機能について

ウデキキは、以前の記事「ChatGPTを活用した業務支援ツール「ウデキキ」のチャット実装」や「LLM を用いた PDF を元にした回答と、該当箇所のハイライト」でも紹介していますが、LLMを活用した業務支援特化の生成AIサービスです。自分の業務に合わせて、事前にプロンプトがセットされたスキルを選択することで、目的に応じたサポートを受けることができます。

ウデキキでは、ユーザーが効率的に情報収集を行えるように、Web検索の支援に特化したスキルを提供しています。 今回はその中でも、「Web検索エージェントスキル」と「ブラウザ拡張による検索支援」のアプローチについて紹介します。

Web検索エージェントスキル

ウデキキのWeb検索エージェントスキルは、LLMを活用して、ユーザーが入力したキーワードに関連する情報に対して、ウデキキがWeb検索を行い、その要約結果を返すスキルです。先日、本家のChatGPTでもテスト版からついに「ChatGPT Search」として正式リリース*1されましたが、それと同じような機能をウデキキでも提供しています。下記は、実際のWeb検索エージェントスキルの画面です。

Web調査エージェントスキル

実装例はインターネット上に多くの記事が公開されているので、今回は省略させていただいて、特にアプローチの概要についての紹介しようと思います。 以下のフローチャートは、Web検索エージェントスキルのアプローチを示しています。

Web調査エージェントのフローチャート

簡単にポイントを説明していきます。

まず初めに、ユーザーの入力から検索キーワードの抽出を行うのですが、ここで気を付けなければいけないのは、ユーザーが入力した最新の文章だけでなく、それまでの会話の文脈を考慮してあげる必要があります。やりとりを通じて発生した新たな疑問等、真にユーザーが求めている回答を提供するためには、これらの情報も考慮する必要があります。そのため、過去のやりとりも入力にいれつつ、 ChatGPT の Function calling 機能を用いて検索キーワードの抽出を行っています。

その後、検索キーワードを用いてWeb検索を行います。今回は Azure の Bing Search API を利用しています。Bing Search API は、キーワードに関連するWebページのタイトルとURLと概要(snippet)を返すため、この情報を用いてユーザーに回答を生成することが可能になります。

しかし一方で、概要だけでは回答には情報が不十分な場合が多いため、特に上位3件については、Webページの内容を取得して、それを元にユーザーに情報を提供するようにしています。ただし、Webページの内容を、そのままユーザーに提供するのではなく、ページ毎に抽出型要約を行っています。これにより、Webページの内容自体が、雑多で不要な情報があった場合でも本質を漏らさず、最終的な回答に繋げることができるようになりました(もしかしたら、最新のLLMを利用すると抽出型要約等のステップは必要がないかもしれませんが、実験を行っていたのが少し前の話なので、最新のモデルを使うとまた異なるアプローチが良いかもしれません)。

またその他のポイントとして、LLMに要約を生成させる際に、ユーザーの元の質問文や、検索クエリ等の前段の情報を一緒にプロンプトに含めてあげることで、より良い回答を生成することができるようになりました。やはり、どんなモデルを使っていたとしても、プロンプトの設定は重要になってくるため、この辺りは試行錯誤が必要だと感じています。

ブラウザ拡張による検索支援

ウデキキは、Webアプリケーションとは別に、ブラウザでの業務支援を行うために、ブラウザの拡張機能を用いたサポート機能を提供しています。具体的には下記の画像のように、任意のWebページ上にサイドバーとしてウデキキの機能を表示することができ、目的に応じたサポートを受けることができるようになっています。その中で提供する機能の一つとして、Web検索支援のための機能があります。

ウデキキのブラウザ拡張機能

ブラウザ拡張のWeb検索支援機能では、ユーザーが閲覧しているWebページから、その内容を元にユーザーに要約を行ったり、内容についての質問を受け付けたりすることができるようになっています。

例えば、インターネットで調べ物をするとき、Web検索を行うことになると思いますが、その際には、検索結果から自分の求める情報が書かれていそうなページを探して、その内容を確認するという手順を踏むことが一般的です。しかし、ウデキキのブラウザ拡張では、Web検索の要約を用いることで、ユーザーは検索を行ったページに逐一アクセスすることなく、検索したキーワードに関連する情報を取得することができるようになります。これにより、ユーザーが効率的に情報収集を行うことができるようになることを目指しています。

実際の画面としては、下記の画像になります。

ブラウザ拡張でのWeb検索支援機能の例

このように要約結果とともに、検索キーワードについて理解を手助けするような質問を提示することで、必要に応じてユーザーがより詳しく情報を調べることができるようになっています。

機能の裏側では、LLMにインプットする情報として、URLから抽出した検索クエリと、検索結果であるページ上のHTMLの内容を渡すことで、キーワードに基づいた情報を主体とした要約を行っています。また同時に、フォローアップの質問を生成して表示しているのですが、ユーザーはこの質問をクリックすることで、ページの情報を引き継いだままチャットを続けることができ、より深い理解を得る手助けをすることができるようになっています。

補足

今回は割愛していますが、Webページ上のコンテンツを扱ったLLMの機能開発には注意が必要です。特に、検索結果を入力としてLLMに与えたとして、それが著作権侵害を行っていたページだった場合、その情報を用いて文章生成をしたとして、著作権侵害となってしまうことがあり得ます。

そのため、Webの情報を用いた回答生成サービスを作成するにあたっては、著作権に配慮した実装・プロンプトチューニングを行うことが重要です。LLMのプロバイダーによっては、著作権に関するガイドライン等*2*3があるため、それを参考にしながら実験・実装を行うことをお勧めします。

おわりに

今回は、新規事業開発室で開発した「ウデキキ」で取り組んだ、Web検索エージェントスキルとブラウザ拡張によるWeb検索支援のアプローチについてご紹介しました。

個人的にも、今後は業務の中でいかにLLMを活用しつつ、効率化を図るかが重要になってくると考えています。 特にエンジニアであれば Copilot のようなコーディングのサポートも重要ですが、設計や調査などの業務においても、LLMを活用することで、より効率的に業務を進めることが重要になると感じています。 その中でも、今回紹介したようなLLMによるWeb検索支援のアプローチが誰かの役に立てば幸いです。

明日の記事は id:skozawa さんの「テックリードの役割を定義しました」です!アドベントカレンダーも残す所もう僅か残り2日ですが、最後まで張り切っていきましょう!