はじめに
弊社のITヘルプデスクは、約50のサービス・システムを取り扱っており、Q&Aの数は1,500個以上に及ぶ。
このたびQ&Aの検索性を高めるため、FAQシステムにおいて、従来の全文検索に加え、Azure OpenAIを使ったRAG(Retrieval-Augmented Generation)を併用できるよう拡張した。
この取り組みによって得られた知見を紹介する。
まとめ
知見
- HTMLデータやMarkdownデータは、見出し情報によりデータ分割が容易で、検索データベースとの相性がいい。
- OpenAIをデータの前処理に利用することで、キーワード抽出が手軽に精度高く行える。
- 全文検索とRAGにはそれぞれに長短あり、併用するのが良い。特に、キーワードが明確な場合には全文検索のほうが早く結果を得られる。
メリットとデメリット(今後の課題)
- RAGのインターフェースをモーダルで配置したことで、使用感が向上した。これにより、ユーザーの既存の操作フローを変えることなく、RAGの選択肢を提供でき、検索結果の参照先も同じページ内にあるため、画面遷移が非常にスムーズになった。
- 一方で、管理対象のDBが2つになったことで、ユーザー利便性向上の半面、運用効率の点では課題が残った。(将来的にはDBを1つにまとめたい)
詳細
作ったシステム
FAQシステムのトップページにモーダルダイアログを追加し、そこからRAGを使った検索を可能にした。
アーキテクチャ
工夫したポイント
1. HTMLデータの利用と見出し情報によるドキュメントの分割
- RAGの検索対象のドキュメントとして、FAQデータのみに絞ってローンチした。
- RAGの導入当初、ITヘルプデスクのホームページコンテンツ(マニュアルやルールなど)をすべてRAGの検索対象にしようと試みたが、ドキュメントの作成者によってドキュメント種別がHTML、PDF、PPTなどバラバラであったこと、またFAQとマニュアルを混在させてしまうことで検索精度が下がってしまったためである。
- FAQに関しては、ドキュメント種別がHTMLに統一なされていた、という環境背景もある。
見出しによるドキュメント分割
- OpenAIで一度に扱える文章量に制限があるため、ドキュメントは必要に応じ分割(チャンク化)しなければいけない。
- HTMLデータを利用することで、見出し(H1タグ)を元にあらかじめ分割し、細かく分割が必要な場合でも、タイトルをメタデータとして別管理することで、ドキュメントのテーマを維持するよう工夫を行なった。
- 内部的には、LangChainのMarkdownHeaderTextSplitterを利用して分割を行なっており、HTMLはMarkdownに変換を行ったうえで処理をしている。
2. データ取り込み時のChatGPTによるキーワード抽出
- 今回利用した検索データベース(Azure AI Search)には、セマンティック検索という機能が用意されており、コンテンツと別にキーワードを与えることで、高い精度の検索性を出すことができる。
- ドキュメントの取り込み(Import)時に、元のFAQコンテンツからOpenAIのChat APIを使いキーワード抽出を行なうことで、手軽に高い精度で、必要なキーワードの抽出ができた。
- なおAzure AI Searchには、ベクター検索・セマンティック検索・ハイブリッド検索の3方式が利用できるが、50問の想定質問で比較をしたところ、ハイブリッド検索が最も正答率が高かったため、ハイブリッド検索を採用している。
キーワード抽出のプロンプト例
- 元データのタイトル(original_title)とコンテンツ(doc)を元に、キーワードを抽出している。
- 「見出しによるドキュメント分割」のとおり、元データのタイトルは、チャンク分割されたデータに対しても保持されているため、セマンティック検索と相性が良いと言える。
CONTEXT:
- Answer must be in Japanese.
- Answer only outputs tags which is comma separated CSV.
- Choose the most appropriate tag within 10.
- A tag must be within 3 words.
- Avoid words that are too general or ambiguous.
Follow the CONTEXT above and add multiple tags that best represent the content below.
the title of original content: {original_title}
a chunk of original content: {doc}
3. FAQシステムのデータを一括でインポートする仕組み
- FAQの数は1,500にも及ぶため、URLリストを作るのも大変である。
- XMLでエクスポートされたデータから、タイトル・コンテンツ・URLをそのまま取り出し、検索DBにインポートすることができるインポーターを実装した。
- 社内に大量のコンテンツがある場合は、なんらかの形で一括でデータを取り扱える仕組みは不可欠である。
今後の改善の取り組み予定
- 今回対象外とした他のコンテンツ(マニュアルやルールなど)への拡張を行なっていく。
- 検索精度の向上は継続的に必要だ。フィードバックを得られる仕組みを取り入れ、チューニングを行なっていく。