見出し画像

社内マニュアルの迷子を解消するAIチャットボット:開発からテストまでの道のり

はじめに

業務効率を改善するために、生成AIを導入する企業が増えていますが、皆さんの会社ではどのように取り組んでいますか?業務が複雑化する中で、手作業での対応に限界を感じていませんか?生成AIは、そのような課題を解決する強力なツールです。生成AIはさまざまな業務で有効に活用されています。

  • プログラムのソースコード生成や修正

  • 売り上げデータやログファイルなどのデータ解析

  • 打ち合わせなどの音声データの文字起こし

  • 請求書など帳票の読み取りなど

使いこなすには少し工夫が必要ですが、私たちもさまざまな用途で活用する中で、生成AIが業務に貢献できることを実感しています。

この記事では、専門用語をできるだけ避けながら、生成AIを活用した社内業務の改善事例をご紹介します。もし、社内のマニュアルやFAQ(よくある質問)が多く、情報の検索に時間がかかっているようでしたら、この記事が何かのヒントになるかもしれません。少しでも参考にしていただければ幸いです。

AIチャットボットの導入のきっかけ

皆さんの会社にも、膨大な数の社内マニュアルやFAQなどの資料がありませんか?また、情報検索にどれくらいの時間を費やしていますか?弊社のある部門では数千ページもあり、必要な情報を探すのに多くの時間を費やしていました。また、マニュアルの内容が古くなっていたり最新の情報が反映されていなかったりすることも課題でした。

こうした課題を解決するために、生成AIを活用したチャットボットの開発に取り組みました。このチャットボットは、簡単に説明するとユーザーの質問に対して生成AIが社内マニュアルを参照し、最適な回答を提供するというものです。

話の流れ

この記事では、次の内容をお話しします。

  1. 取り組んだ課題と解決策

    • 社内で抱えていた課題に触れて、それらをどのように解決したかを説明します。

  2. 課題に対する解決策としてのRAG

    • ユーザーの質問に対して最適な回答を提供するために、生成AIを用いた「Retrieval-Augmented Generation」(略してRAG)という仕組みを採用しました。このRAGは、社内マニュアルを参照し、適切な回答を生成する技術です。記事中では「RAG」と表記しますが、発音は「ラグ」と読みます。

    • RAGの仕組みとそのメリットについて具体的な例を交えて説明します。

  3. AIチャットボットのテストと評価

    • RAGを利用したチャットボットのテストや評価方法について説明します。

    • テストを効率的に進めるために、生成AIを活用しました。生成AIの活用例について具体的に説明します。

取り組んだ課題と解決策

チャットボットの開発を通して解決したい課題は2つあります。

  1. 社内マニュアルや関連文書が多くて見つけにくい

    • 課題

      • 多くの社員が必要な情報を探すのに時間を費やしていました。

    • 解決策

      • AIチャットボットは社内マニュアルを検索・参照して適切な回答をしてくれます。

  2. 社内マニュアルが古くなっている

    • 課題

      • 情報が古くなり、最新の業務に適応していないマニュアルや意図が不明瞭でわかりにくいマニュアルもあります。

    • 解決策

      • AIチャットボットのログを利用することで、どのマニュアルを更新すべきかを特定することが可能です。更新すべき情報の特定とその対応方法は次のとおりです。

        • 更新すべき情報の特定:チャットボットの回答の中から間違った回答や不十分な回答をピックアップします。

        • 対応方法:回答が間違っている原因は質問に関連するコンテンツが足りない、または社内マニュアルの記載が間違っているためです。これらの情報を追加または更新します。

課題に対する解決策としてのRAG

AIチャットボットに採用したRAGの仕組みについて説明します。ユーザーが質問文を送信すると、生成AIが関連する社内マニュアルを検索します。次に、生成AIがその情報を使って回答を生成し、ユーザーに回答文を提供します。

RAGの仕組み

このようにRAGは、生成AIが特定のデータ(例えば、社内マニュアル)を使って正確な答えを作り出す技術です。ChatGPTのような一般的な生成AIとの違いは、RAGはあらかじめ登録された社内マニュアルをもとに回答する点です。

RAGの処理の概要

基本的な処理の流れは次の5ステップです。

  1. 質問文の受領

    • まず、ユーザーが質問をします。

  2. 関連情報の検索

    • 質問に合う社内マニュアルをデータベースから探し出します。

  3. 質問文の再構成

    • 探し出した社内マニュアルをもとに、新しい質問文を作成します。新しい質問文には元の質問と探し出した社内マニュアルが含まれます。

  4. 回答の生成

    • 生成AIが新しい質問文を使って、正確な答えを作ります。

  5. 回答の提供

    • 作られた答えをユーザーに表示します。

例えば、ユーザーが「最新のマニュアルはどこですか?」と質問した場合、RAGはその質問に関連する情報を探し、すぐに「最新のマニュアルは以下のリンクからアクセスできます。(リンクは省略)」と回答します。以下は、再構成された質問文と回答文の例です。

再構成された質問文の例

## 指示
次の質問を検索結果を踏まえて回答してください。

### 質問
最新のマニュアルはどこですか?

### 検索結果
-最新のマニュアルはこちらのリンクでアクセスできます。https://社内マニュアルのURL/all
-マニュアルは基本的に毎月月初に更新されます。
-マニュアルと合わせて、よくあるご質問「最初に知るべき内容を教えてください」を合わせてご覧ください。

回答文の例

最新のマニュアルは以下のリンクからアクセスできます。

https://社内マニュアルのURL/all

なお、マニュアルは毎月月初に更新されるため、最新情報を確認する際は月初以降にアクセスすると良いでしょう。また、よくある質問「最初に知るべき内容を教えてください」も併せて確認すると、よりスムーズに理解できるかと思います。

AIチャットボットのテストと評価

RAGの仕組みについて説明をしてきました。後半は、RAGを利用したチャットボットのテストと評価方法について説明します。

テストデータの作成

テストと評価の最初のステップは、多くのテストデータを準備することです。テストデータは質問文と、その質問に対する理想の回答文(ground truth answerと呼ばれます)のペアで構成されます。テストデータを利用してチャットボットの性能を評価します。

例えば、質問文として「バージョンアップ申請方法を知りたい」が与えられた場合、理想の回答文としては「保守契約を締結いただいているお客様が申請可能です。具体的な手順は次の通りです。(手順省略)」といった内容です。このようなテストデータをたくさん用意します。以下はテストデータの例です。

{
  "質問文": "バージョンアップ申請方法を知りたい",
  "理想の回答文": "無償バージョンアップ申請は保守契約を締結いただいているお客様が申請することができます。対象製品のバージョンアップ申請方法について説明します。以下の手順にしたがってください。1.カスタマーサクセスサイト(https://cs.wingarc.com/ja)にログインします。(以下、省略)"
}

テストデータの種類については後述します。

テストと評価の進め方

テストと評価では、理想の回答文とチャットボットの回答文を比較して、回答がどれだけ正確で、質問の意図をどれだけしっかりと捉えているかを評価していきます。具体的には、次のステップで進めます。

  1. チャットの実行

    • 作業内容:チャットボットにテスト用の質問を投げかけ、回答を得ます。精度を確認するために、1つの質問に対して複数回テストを実施します(生成AIを活用したチャットボットの回答にばらつきがあるためです)。

    • 実施方法:テストの自動化には、弊社のサービスdejirenを活用しました。dejirenは本来テストツールではありませんが、このような効率化にも応用できます。

  2. 回答の評価

    • 作業内容:チャットボットの回答を理想の回答と比較し、回答精度を評価します。

    • 実施方法:この比較と評価の作業は生成AIとdejiren組み合わせて自動化しました。この時に利用したプロンプト(生成AIへの指示文章)を示します。

  3. 評価結果の合否判定

    • 作業内容:評価結果にもとづいて、チャットボットの回答が正確かどうかを判定します。

    • 実施方法:判定は自動化しないで人間が行います。

生成AIの活用のポイント

  • ステップ1や2のような手順が明確な作業は自動化しやすいです。いきなり自動化を目指すことはしないで、まずは手順などを明確化することから始めます。

  • さらに自動化しやすい作業は生成AIを活用することでさらに効率化できることが多いです。

  • 一方、ステップ3のように、判断が必要な作業や手順が曖昧な作業は人間が行った方が効率的に進めることができます。

ステップ2のチャットボット回答内容を評価するためのプロンプト例

以下の質問に対するAIチャットボットの回答と、それに期待する理想的な回答を確認してください。
-質問の意図をどれだけ正確に捉えているかを評価基準にもとづいて評価してください。
-またフィードバックガイドラインにしたがって具体的なフィードバックを提供してください。
 -回答フォーマットの形式で回答してください。

## 評価基準
- **完全性**: AIチャットボットの回答が質問の全ての要素に対して答えているかを評価してスコアを出力してください
  - 5:AIチャットボットの回答は質問の要素について全て答えている
  - 4:AIチャットボットの回答は質問の要素について大部分答えている
  - 3:AIチャットボットの回答は質問の要素について一部だけ答えている
  - 2:AIチャットボットの回答は質問の要素についてわずかにこ答えている
  - 1:AIチャットボットの回答は質問の要素についてほとんど答えていない
- **理解度**: AIチャットボットの回答が質問の意図をどれだけ理解しているかを評価してスコアを出力してください
  - 5:AIチャットボットの回答は質問の意図を完全に理解している
  - 4:AIチャットボットの回答は質問の意図を大部分理解している
  - 3:AIチャットボットの回答は質問の意図を部分的に理解している
  - 2:AIチャットボットの回答は質問の意図をわずかに理解している
  - 1:AIチャットボットの回答は質問の意図を理解していない

## 評価する質問と回答
- **質問**: 
<テストデータの質問文>
- **AIチャットボットの回答**: 
<AIチャットボットの回答文>
- **理想の回答**: 
<テストデータの理想の回答文>


## 評価結果とフィードバック
- **完全性**: [完全性の評価結果のスコア]
- **理解度**: [理解度の評価結果のスコア]
- **具体的なフィードバック**: 実際の回答に何が足りない、または不要だったか、どのような点が良かったか、どう改善できるかについての具体的な提案を記述してください。

## フィードバックガイドライン
1. **不足している要素**: AIの回答に不足している情報や要素を具体的に指摘してください。
2. **不要な要素**: AIの回答に不要な情報や要素が含まれている場合、それを指摘してください。
3. **改善提案**: AIの回答を改善するための具体的な提案を提供してください。

## 回答フォーマット
次の内容のJSONフォーマットでで回答してください。
### AIによる評価
    "完全性(回答が質問の全ての要素に対して答えているか)": "完全性の評価結果のスコア",
    "理解度(回答が質問の意図をどれだけ理解しているか)": "理解度の評価結果のスコア",
    "具体的なフィードバック": 
      "不足している要素": "具体的な不足要素を記述してください"
      "不要な要素": "具体的な不要要素を記述してください"
      "改善提案": "具体的な改善提案を記述してください"

テストデータの種類

テストの進め方を説明しました。最後にテストデータの種類、つまり、とんな内容のテストを行ったのか(さらに除外したテスト)について、一部をご紹介します。

  1. 社内マニュアルにもとづくシンプルな質問

  2. 複数の情報源を必要とする高度な質問

  3. LLM一般知識に関する質問(除外)

  4. 質問の揺らぎ(除外)

社内マニュアルにもとづくシンプルな質問

  • 目的

    • 質問に対して社内マニュアルにもとづいた回答になっているかを検証します。つまり、社内マニュアルが期待どうりに回答に利用されていることを確認します。生成AIを活用してテストデータを作成します。

  • 方法

    • 社内マニュアルをもとに質問と理想の回答文を作ります。多くのテストデータを必要とするため、生成AIを利用して作業を効率化します。

    • この効率化は苦労しました。社内マニュアルから質問文や理想の回答文を作ってくださいというようなプロンプトでは、意味がわからない質問文や回答文を生成することが多かったです。まだまだ改善の余地があるのですがうまくいった方法の中から1つをご紹介します。

      • 理想の回答文の生成:社内マニュアルのコンテンツを生成AIに与えて要約します。ただし、「要約しなさい」という漠然とした指示ではなく「関心事を200文字程度にまとめてください」といった感じで、要約の方法や文字数を具体的に指示することが重要です。これが理想の回答文になります。

      • 質問文の生成:次に、理想の回答文にもとづいて質問文を生成します。

理想の回答文を生成するためのプロンプト例

以下のタイトルとコンテンツは社内マニュアル情報に関するものです。これをもとに、一貫性があり重要なポイントを含んだ200文字の日本語文章を生成してください。
##タイトル
<マニュアルのタイトルを貼り付けます>
##コンテンツ
<マニュアルの本文を貼り付けます>

質問文を生成するためのプロンプト例

以下の要約は社内マニュアル情報にもとづいています。さらに詳細な情報を求める具体的な逆質問を一つ生成してください。
##要約
<理想の回答文を貼り付けます>

複数の情報源を必要とする高度な質問

  • 目的

    • チャットボットが複数の情報源を統合して回答できるかといった利用者を想定した検証です。

  • 方法

    • 社内マニュアルについて詳しい担当者に、チャットボットに答えて欲しい質問と回答ないし珍しい手続きに関する質問と回答などを作ってもらいます。これにより、シナリオベースの質問など業務知識を踏まえた検証ができるようになります。

ただし、このテストデータを利用した検証はある時点でやめました。理由は2つあります。

  • 担当者のテストデータ作成負荷が大きいためです。

  • 担当者にテストデータを作成してもらう代わりに、利用者にたくさんチャットしてもらいました。これにより、チャットボットの回答の問題点が洗い出せるためです。

LLM一般知識に関する質問(除外)

  • テストから除外した理由

    • LLM(OpenAI社gpt-4oなどの大規模言語モデル)に依存するため、この検証はLLM供給元に任せるタスクとして割り切り除外しました。

質問の揺らぎ(除外)

  • テストから除外した理由

    • 社内マニュアルは十分に洗練された情報ではないため、質問文の表現の揺らぎやブレがどこまで許容されるのか?といった質問のブレ幅への耐性は測定しないことにしました。

    • その代わり、期待通りではないチャットボットの回答を見つけて社内マニュアルの追加や修正を行うことで、回答精度の向上と社内マニュアルの整備・洗練を進めています(冒頭の「社内マニュアルが古くなっている問題」で触れた取り組みです)。

  • ブレの質問の例

    • 質問「顧客から強い値引きを求められています。どのような点に注意して対応を進めたらいいですか?」をノイズを加えたり少し表現をかえたりします。

      • ノイズを加えた質問: 「えーとぉ、客からぁ、すごい値引きしてほしいって頼まれちゃったんだけどぉ、どうすればいいスカ?」

      • 少し表現を変えた質問: 「お客様が大幅な値引きを要求しています。困っています。」

おわりに

「社内マニュアルやFAQが見つからない」、「せっかく作成した業務の手順書が利用されていない」と感じている方は少なくないと思います。この記事では、このような課題に対する解決策として、RAGを活用したチャットボットの開発とテスト方法についてご紹介しました。
私たちが取り組んだ具体的なアプローチを共有しましたが、皆さんの課題や環境に応じて適した方法は異なるかもしれません。この記事が、皆さんの状況に合わせた改善のヒントとなり、少しでも日々の業務や考え方のお役に立てれば幸いです。


補足情報

「課題に対する解決策としてのRAG」では、RAGの基本的な仕組みについて説明しました。RAGについてさらに詳しく知りたい人向けの補足情報を4つ挙げます。難しいと感じた方は読み飛ばしてください。

1.体験談:RAGチューニングの課題とSaaSによる効率化へのシフト

RAGの精度を高めるためには、データベースのチューニングが重要ですが、この作業は容易ではなく、慎重な対応が求められます。

例えば、ユーザーの質問文にもとづいて社内マニュアルを検索する際、検索された関連情報が質問文の内容に適合していれば、RAGの回答精度は高くなります。つまり、「関連情報の検索」の精度がRAGの回答精度に直結するのです。

一方で、質問文と完全に関連するマニュアルがデータベースに登録されていない、またはわずかに関連するマニュアルしかない場合、データベースのチューニングだけでは不十分です。このような場合には、関連する学習ソースを新たに追加登録する必要があります。このようにして、RAGのチューニングを進めていくのです。

少し話がそれますが、このチューニングのプロセスを効率化するために、私たちはRAGエンジンとしてDocsBotというSaaSを採用しました。開発当初、RAGのデータベースとして、Pinecornの採用を検討しました。Pinecornは高性能なベクトル検索エンジンであり、RAGに適していると考えたからです。プロトタイプの作成は順調でした。しかし、設定や運用には高度な技術が必要であり、チューニングには多くの時間がかかるという課題が浮上しました。

さらに、学習ソースは多岐にわたり、Webページ、PDF、PPTなどの異なる形式のデータを統一して処理し、データベースに登録する必要があります。特に長文の文章はチャンクに分割して登録する(チャンク戦略)など、手間がかかる作業が要求されました。このチューニングのプロセスを効率化するために、最終的にはDocsBotを採用しました。こうして、RAGのチューニングをより効率的に進めることができました。

2.社内マニュアルのメンテナンスの課題と対応案

これまで説明してきたように、RAGを活用したチャットボットは、データベースに登録したコンテンツが重要です。質問文と関連があるコンテンツが登録されていない場合チャットボットの回答精度は低くなります。

このパターンの典型例があります。「見積書の作成時にチェックしなくても良いケースはありますか?」や「見積書の作成時に避けるべき事例はありますか?」のような質問です。この質問に対しては正確な回答をするのが難しいです。関連する社内マニュアルが存在しないためです。

通常、社内マニュアルには見積書作成の注意点や推奨される方法が記載されていますが、アンチパターン(避けるべき事例)については記載が少ないかもしれません。そのため、チャットボットがこのような質問に対応するのが苦手になるのです。

これに対して、チャットボットの回答精度を高めたいのであれば、アンチパターンの情報を社内マニュアルに追加するのが効果的です。ただし、アンチパターンを追加しすぎると、マニュアルが膨大になり、読みづらくなる危険があります。また、メンテナンスも複雑化します。このようなトレードオフを慎重に考慮する必要があります。

アンチパターンを追加する場合は、重要度の高いアンチパターンのみを優先的に追加し、定期的に見直し(見直し時に、不要になった情報を整理する)を行うことを検討すると良いでしょう。

3.ヒットしやすい学習ソースのフォーマット例

RAG検索の精度をさらに向上させるためには、学習ソースのフォーマットにも工夫が必要です。特に、ユーザーの質問文にはブレが生じやすく、これを吸収するためにフォーマット化された書き方が効果的です。以下に、質問文のバリエーションに対応するための学習ソースの書き方の例を示します。

このコンテンツは次の質問に対する回答文です。

##質問
	•	最新のマニュアルはどこにありますか?
	•	最新のマニュアルは?
	•	最新のマニュアルはどこ?
	•	最新のマニュアルが見つからない
	•	最新のマニュアル
	•	あのマニュアルどこだっけ?
	•	マニュアルのアクセス方法は?
	•	マニュアルのアクセスURLを知りたい

##回答
社内マニュアルはこちらのリンクでアクセスできます。
https://社内マニュアルのURL/all

もし異なるマニュアルをお探しの場合は、こちらのリンクから探してみてください。
https://社内マニュアルのURL/serach

このフォーマットでは、ユーザーがどのような質問をするか、バリエーションを想定し、それらに対応する回答を簡潔にまとめています。さらに、類似する質問への対応や誤認識の可能性に対しても、適切にフォローすることで、RAGの検索精度を高めることが可能です。

このフォーマットを活用することで、より幅広い質問に対して的確な回答が得られます。このフォーマットは他の質問にも簡単に応用できるため、学習ソース全般で活用することが可能です。
例えば、本文の「質問の揺らぎ(除外)」で触れた質問文のブレ幅への耐性を向上させたい場合に有効な記述方法です。

このフォーマットは、ベクトルDB(意図検索)を使用する場合に特に効果的です。ベクトルDBでは、ユーザーの質問文のバリエーションやブレに対して高い耐性を持ち、意図を理解して検索結果を返すため、質問の表現が異なっても適切な回答が得られます。

一方、RDB(リレーショナルデータベース)ではキーワード検索が基本となるため、質問文に含まれるキーワードをリストアップすることで対応可能です。具体的には、上記の質問文の代わりにユーザーが検索しそうなキーワードをリストアップする方法が考えられます。この方法により、ブレのある質問にも対応しやすくなります。ただし、キーワードの選定が検索結果に直接影響するため、リストアップの際には多様な表現を網羅することが重要です。

4.RAGの評価方法の種類

RAGの精度や有用性を評価するために、本記事ではLLMを活用した独自の評価方法を紹介しました。他にも、RAGを評価するための便利な方法がいくつかあります。
例えば、こんな評価フレームワークがあります。

RAGAS:RAGのパフォーマンスを評価するためのツールセットで、正確性や関連性など、様々な観点から定量的に評価できます。
LangSmith:LangChainプラットフォームを活用した評価ツールで、チャットボットや生成AIの全体的なパフォーマンスを分析できます。

それぞれの詳細はここでは省略しますが、どの評価方法を使うかは非常に重要です。評価方法はRAGの品質を左右するため、自分たちのプロジェクトに合ったものを選ぶことが大切です。

独自の評価方法を採用するのも良いですが、既存のツールを使うことで評価作業を効率化できる場合もあります。自分たちのニーズに合った方法を選ぶと良いでしょう。

この記事が気に入ったらサポートをしてみませんか?