- HOME
- LLMのビジネス活用 ~OpenAI APIによるQAアプリ作成事例~
2023年7月24日 13:00
本記事でご紹介したQAアプリケーションをWEB公開しています。
https://www.s4-chat-msi.com/
あわせてご覧ください。
この記事では、大規模言語モデル(LLM) のビジネス利用について、当社の取り組みの中から、ドキュメント参照QAアプリケーションを例にとり解説します。
特に、 実際に自社製品のマニュアルを用いてQAアプリを作成し、情報の与え方によってQAアプリの回答の質に大きな差があることを確認しました。 つまり、LLMと外部ソースと連携する場合は、LLMが行っていることを理解して、適切な方法で情報を与える必要があり、それがサービスの差別化要因になる 、ということになります。
後半にて具体例も交えつつQAアプリの出力を紹介するので、最後まで読んでいただけると幸いです。
著者:NTTデータ数理システム シミュレーション&マイニング部
Profile:近藤 寛記入社2年目。入社以来 S4 Simulation System の開発及び言語モデル系の調査案件に従事。
Profile:米田 竜也
入社3年目。入社以来、自動運転に関する画像処理の調査案件に従事。
Profile:藤内 亮
入社3年目。入社以来、小売業における機械学習を用いた需要予測モデルの開発案件に従事。
Profile:伊藤 孝太朗
DeepLearning を含む機械学習、数理最適化やシミュレーションなど幅広い業務に取り組む。
大まかな内容は以下のようになっています。
- LLM のビジネス活用・アプリケーション開発
- S4 Simulation System の質疑応答アプリケーションの開発
- アプリケーションにおける工夫
- 出力比較
LLM のビジネス活用・アプリケーション開発
2022年11月に OpenAI によって ChatGPT が公開されてから、LLM の活用に関する様々な模索がなされています。
現状LLM自体の開発はきわめてリソース面で難易度が高く、OpenAI等が公開しているwebAPIを経由してLLMを利用する方法が主流となっています。公開されている比較的"小さな"LLMを自社環境にデプロイして利用する方法も考えられますが、小さいモデルはどれも(日本語の)性能が芳しくないというのが現状です(こちらに関しては今後改善していくものと思われます)。
サービス提供側がwebAPIで同じようなLLMを利用する以上、LLMを利用したビジネス活用・アプリケーション開発の差別化要因は、おもしろい応用方法を創出できるかどうかという点に加えて、現実的には 外部ソースとの連携方法、プロンプトの工夫 となると考えています。
S4 Simulation System の質疑応答アプリケーションの開発
実際に 外部ソースとの連携方法やプロンプトの工夫 がどれほどサービスレベルを向上させるか、弊社のパッケージ製品のひとつである S4 Simulation System に対する質疑応答アプリケーション(下図)を例にして紹介したいと思います。
本アプリケーションはS4 Simulation SystemのマニュアルをLLMに取り込み、S4の機能に関するユーザの質問にチャット形式で応答するアプリです。ユーザがパッケージの使い方を調べる際のUXの向上、弊社メンバのサポート工数削減を目指します。
S4 Simulation System について
S4 Simulation System は当社が開発した 汎用シミュレーションソフトウェア であり、GUI 操作を通じて様々なシミュレーションを行うことができます。 コールセンターや店舗の要員計画、製造ライン設計や、配送・物流の効率化、都市における災害対策や、イベント会場や観光地での人の流れ、新たな都市交通システムの効果検証等のシーンで活用可能で、大学の授業や研究でも利用多数のソフトウェアです。
システムの概略
アプリケーション内で動作するシステムの概略を以下の図に示します。
ここでは以下のような処理を行っています。
- まず、S4 Simulation System のマニュアルを読み込み、文章全体を複数のチャンクに分割します。
- 分割したチャンクごとにOpenAI の埋め込み API に渡し、ベクトル化して保存しておきます。
- ユーザーが入力した質問も埋め込み API によってベクトル化します。
- ユーザーが入力した質問のベクトルとマニュアルの各チャンクのベクトルの類似度を計算し、類似度が大きいチャンクいくつかと質問文をプロンプトとして LLM のAPIに渡します。
- 最後に、LLM から生成された出力を UI に表示します。
この構成はきわめて標準的なものであり、LLMの入出力・連携をサポートするOSSであるLangChainのチュートリアルにも記載されているものです。
このサンプルアプリに対して、外部ソース(マニュアル)との連携やプロンプトの工夫を追加し、どれほど応答品質が向上するか、類似サービスとも比較しながら紹介していきたいと思います。
アプリケーションにおける工夫の例
今回は外部ソースである S4 のマニュアルの扱いについて、主に以下のような工夫を行っています。
- チャンクへの分割:
下の図のように、S4 Simulation System の利用マニュアルは「章 → 節」という単位で、内容に従って構造化されています。
この構造を利用してマニュアルを意味あるまとまりごとにチャンクへ分割しています。 - チャンクへのタイトルの付与
以下の例のように、下位の節に分割した場合に上位の節のタイトルを付けています。
例 : 「4.4.4 型・名前指定」 → 「4 プロジェクト 4.4 データのインポート 4.4.4 型・名前指定」 - 小さい節の統合:
意味的に近く、文字数の少ない節を統合してひとつのチャンクとしています。
この他にも、事前知識ではなくcontextとして与えたマニュアルを優先利用して回答を生成すること、等の指示をプロンプト内に追加しています。
出力比較
開発したアプリケーションの性能を見るために、いくつかの質問を用意しました。 上記の工夫を行った本アプリケーションによる回答と、本アプリケーションと同様のシステムで工夫を行わなかった場合の回答、そして既存のドキュメントチャットサービスに S4 Simulation System の利用マニュアルを読み込ませた場合の回答を比較します。
Q1: S4の特徴をすべて教えてください。参考箇所も教えてください。
本アプリケーション(工夫前)の回答:
S4 Simulation System の特徴は、汎用的なシミュレーションシステムであり、工場やサプライチェーン、銀行、通信、交通、コールセンターなど、確率的な振る舞いをするものを対象とすることができることです。また、シミュレーションモデルの作成と分析が簡単にできる操作性と、自由度が高いことが特徴です。参照箇所は、第1章のはじめにと1.1シミュレーションについての項目です。
過度に要約してしまっています。S4 Simulation System の特徴は 1.2 節にまとめられているにもかかわらず、1.1 節を参照しています。
既存サービス A の回答:
S 4 Simulation Systemの特徴は以下の通りです。 1. グラフィカルなモデル記述: 部品を配置しリンクを貼ることでモデルを表現することができます。詳細は、第1.2.1節の「グラフィカルなモデル記述」で説明されています。 2. 部品編集によるカスタマイズ: 各部品は様々なパラメータを持ち、それらを修正することで個々の部品をモデル化することができます。詳細は、第1.2.2節の「部品編集によるカスタマイズ」で説明されています。 その他の特徴については、提供されたテキストには明示的な情報がありません。ただし、S 4 Simulation Systemは汎用的なシミュレーションシステムであり、様々な領域のシミュレーションを行うことができると述べられています()。また、PDFファイル全体を通じて、操作性と自由度が強調されています。 ご質問にお答えするためには、さらなる詳細情報が必要です。お手数ですが、具体的な特徴についてお知らせいただければ幸いです。
こちらの回答ではマニュアルにおいて特徴一覧を記述している1.2節を適切に引用することはできています。ただし、GUI に関する機能以外の記述を拾いきれていません。また、「部品をモデル化」というS4の用語として不自然な文言が含まれています。
既存サービス B の回答:
申し訳ありませんが、現在のウェブページの文脈には「S4」に関する情報はありません。他にお手伝いできることはありますか?
こちらの回答では S4 Simulation System の情報の参照自体に失敗しています。
本アプリケーション(工夫後)の回答:
S4 Simulation Systemの特徴は以下のようになります。 1. グラフィカルなモデル記述: 部品を配置しリンクを貼る手順でモデルを表現します。 (参照箇所: 1.2.1) 2. 部品編集によるカスタマイズ: 各部品は様々なパラメータを持ち、修正することで個々の部品をモデル化できます。 (参照箇所: 1.2.2) 3. より高度な部品のカスタマイズ: 部品の動作を正確に記述できない場合は、自由に部品コードを編集することができます。 (参照箇所: 1.2.3) 4. 可視化機能: データ表示やヒストグラム、時系列プロットなどの様々なデータの可視化が可能です。 (参照箇所: 1.2.4) 5. 分析機能: 各部品で観測された結果から、様々な基本統計量を得ることができます。また、独自の統計量を定義したり、回帰や分散分析などの分析を行うことも可能です。 (参照箇所: 1.2.5) 6. 多様な実行モード: 目的関数の最大化や最小化など、様々な実行モードを選択することができます。また、並列実行や感度分析実行などもサポートしています。 (参照箇所: 1.2.6) 7. スケーラブルで汎用的なpsim言語: Python言語上に実装されたシミュレーション記述言語であり、より複雑なモデルも記述することができます。 (参照箇所: 1.2.7) 8. ハイブリッドモデリング: 離散イベントシミュレーションだけでなく、連続的に変化する状態量を扱うシステムダイナミクスモデルや、離散と連続の組み合わせたハイブリッドモデルも扱うことができます。 (参照箇所: 1.2.8) 9. エージェントシミュレーション: 多数の自律的に行動するエージェントの挙動から全体の挙動をシミュレートすることができます。 (参照箇所: 1.2.9) 以上がS4 Simulation Systemの特徴です。参照箇所はそれぞれの特徴の後に記載しています。
正しい箇所を参照し、バランスよく特徴を列挙できています。
Q2:銀行の窓口にお客さんが並んでいる状況をモデル化したいのですが、どのような部品を使用すればよいですか?参照箇所も教えてください。
本アプリケーション(工夫前)の回答:
窓口業務用部品の中にある「窓口選択部品:レジ」や「窓口選択部品:切符購入窓口」、そして「窓口利用部品:レジ」や「窓口利用部品:切符購入窓口」を使用することで、銀行の窓口にお客さんが並んでいる状況をモデル化することができます。参照箇所は、18 窓口業務用部品の中にあります。
記述は正しいですが、部品の列挙が不十分です。
既存サービス A の回答:
銀行の窓口にお客さんが並んでいる状況をモデル化するためには、以下のような部品を使用することができます。 1. ファシリティ: 銀行の窓口を表すファシリティを作成します。 2. イベント: お客さんが到着するイベントを作成します。 3. フローアイテム: お客さんを表すフローアイテムを作成します。 4. セレクタ: お客さんがどの窓口に並ぶかを決定するためのセレクタを作成します。 5. キュー: 窓口に並んでいるお客さんを管理するためのキューを作成します。 6. プロセス: 窓口でのサービスを表すプロセスを作成します。 具体的な部品の設定方法やパラメータについては、第8章の「部品」で説明されています。また、銀行の窓口にお客さんが並んでいる状況をモデル化するための一般的な手順については、第8.3節の「キュー」や第8.4節の「プロセス」で説明されています。 詳細な情報については、提供されたテキストには明示的な情報がありません。ただし、銀行の窓口にお客さんが並んでいる状況をモデル化するための一般的な手順については、第8章で説明されています。
一見正しそうに見えますが、一部存在しない部品名もしくはS4マニュアル内の別の用語を部品名として列挙してしまっています。また、後半の引用箇所と内容が実際のマニュアルとは異なっています。
既存サービス B の回答:
現在のウェブページのコンテキストによると、銀行の窓口にお客さんが並んでいる状況をモデル化するために、ファシリティ(Facility)部品を使用することができます。詳細については、第8章の8.3節「ファシリティ(Facility)」を参照してください。
必要な要素の列挙が不十分となっています。
本アプリケーション(工夫後)の回答:
お客さんが並んでいる状況をモデル化するためには、以下の部品を使用することができます。 1. 窓口業務用部品 (部品番号: 18) - 資源「窓口(CounterService)」(部品番号: 18.1.1):受付窓口を表す部品です。窓口のスケジュールや開閉状態を設定することができます。 - 部品「お客(CounterServiceCustomer)」(部品番号: 18.2.1):窓口を利用するお客を表す部品です。お客の属性や対応時間などを設定することができます。 - 部品「窓口到着(EnterCounterService)」(部品番号: 18.3.1):お客を窓口に到着させる部品です。お客の到着間隔や来店開始時間などを設定することができます。 - 部品「対応終了(LeaveCounterService)」(部品番号: 18.3.2):フローの終端を表す部品です。お客の属性リストを出力することができます。 - 部品「窓口選択部品:レジ(SelectCounterServiceMultipleLines)」(部品番号: 18.3.3):お客を窓口に分岐させる部品です。最もお客が並んでいない窓口にお客を並ばせることができます。 - 部品「窓口選択部品:切符購入窓口(SelectCounterServiceSingleLine)」(部品番号: 18.3.4):お客を指定の窓口に送信する部品です。窓口が利用可能になると、このポートに留まっているお客を窓口に送ります。 - 部品「窓口利用部品:レジ(UseCounterServiceMultipleLines)」(部品番号: 18.3.5):指定した時間だけ窓口を利用する部品です。窓口の利用時間を設定することができます。 - 部品「窓口利用部品:切符購入窓口(UseCounterServiceSingleLine)」(部品番号: 18.3.6):指定した時間だけ窓口を利用する部品です。窓口の利用時間を設定することができます。 これらの部品を組み合わせて、銀行の窓口にお客さんが並んでいる状況をモデル化することができます。 参照箇所: - 18 窓口業務用部品 - 18.1 資源 (以下略)実際には各部品の参照箇所が並ぶ。
マニュアルの中で銀行の窓口をモデル化する場合に参照すべき箇所から適切に答えています。
QAアプリケーション公開中
この記事でご紹介したアプリケーションをWEBで公開しています。
https://www.s4-chat-msi.com/
実際に操作をお試しいただけますので、ぜひご覧ください。
まとめ
この記事では、S4 Simulation System の利用マニュアルの内容に即したチャットを行うアプリケーションを例に、LLMを利用したサービスにおいて 外部ソースとの連携方法やプロンプトの工夫 がどれほどサービスレベルに影響を与えるか、サービスの差別化要因になり得るか紹介しました。
NTTデータ数理システムでは、LLM関連技術の調査・検証とともに、自社の業務や製品自身をLLMを利用して実際に効率化する試みを実施中です。さらに、その過程で得られたノウハウをクライアント様へ展開することを目指しています。
http://www.msi.co.jp NTTデータ数理システムができること