LLMを活用したアプリケーションの典型的なアーキテクチャ
はじめに
本記事では、個人や組織で複数のLLMアプリケーションの開発や運用をする際に共通する課題へのアプローチを探ります。全2回の連載を予定しており、第1回目が机上での整理、第2回目がそれを基にしたOSS(Kong Gateway)を用いたハンズオンとなります。通読することで、LLMアプリケーションに共通する課題へのアプローチのヒントを学び、それを実際に体験することが可能です。
LLM とは
LLM(Large Language Model | 大規模言語モデル)とは、大量の学習データとディープラーニング[1]技術によって構築された言語モデルのことです。ここで出てきた言語モデルとは、文章や単語の出現確率を用いて、統計的手法によってモデル化したものであり、文章の作成や感情分析、固有表現の抽出などの自然言語処理で用いられます。定量的な定義があるわけではありませんが、LLM出現以前の言語モデルとの大きな違いは、学習に使用されるデータ量、計算量、パラメータ量が大幅に増加していることです。また、あるタスクに特化し、学習されていた従来の言語モデルと比較し、一つのモデルが汎用的にタスクを行うことができることも特徴です。具体的には、以下のようなタスクを行うことができます。
- 文章の作成
- 文章の要約
- 文章の翻訳
- 感情の分析
- 固有表現の抽出
- 文章の意味空間への埋め込み
このような背景から、ChatGPT,GitHub Copilotに代表されるサービスが急速に広まり、身近なところからビジネスシーンに至るまで活用が進んでいます。
[1] 大量のデータを使って複雑なパターンを自動的に学習し、画像や音声などのデータを正確に認識・分類できるAI技術で、人間の脳の働きを模倣した計算モデルを使用している
LLMを活用したアプリケーションの典型的なアーキテクチャ
次にLLMを活用したアプリケーションを作ることを考えてみます。ここでは、社内のバックオフィスに対する就業規程や福利厚生などの問い合わせ負荷を減らすために、チャットボットを導入するケースを思い浮かべてみましょう。
まずは、LLMから適切な出力を得るためにプロンプトを記述する必要があります。例えば、以下の通りです。
あなたは、バックオフィスの業務サポートを的確に行います。 ユーザーの質問に対して、検索によって得られた情報に”のみ”基づいて回答を作成してください。 検索によって適切な情報が取得できなかった場合は、「申し訳ございませんが、その質問には回答することができません。xxxまでお問い合わせください。」と回答してください。
最も簡単に実装する場合は、これをアプリケーションのコードの中に直接埋め込むことが考えられますが、そうするとプロンプトを差し替える場合にアプリケーションを再度パッケージングし、環境へデプロイする必要があります。通常、アプリケーションの変更サイクルよりもプロンプトの変更サイクルの方が短いため、そこを分離するような工夫が必要です。
次に、LLMは膨大な学習データを基に作成されるため、その学習データに含まれていないような知識に関しては正しく出力することができません。社内にしか存在しない情報や、モデルが学習された時点より後の最新情報を正しく出力することができないのはそのためです。これを補うための方法はいくつか存在します[2]が、導入のしやすさ、時間、コストなどの観点から、外部のツール(検索システムやツールなど)を利用し、それを基にプロンプト拡張を行う方法がよく採用されています。
