SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

LLMアプリケーションのアーキテクチャ入門

LLMアプリケーションのベストアーキテクチャを探る──トークンの過剰利用や複雑な構成、入出力の制御をどう解決するか


 本連載では、APIコールの遅延やトークンの過剰利用、出力内容の制御など、LLMアプリケーションを開発・運用する課題に焦点をあて、ライブラリやAPI Gatewayを用いたその解決方法について解説します。

LLMを活用したアプリケーションの典型的なアーキテクチャ

はじめに

 本記事では、個人や組織で複数のLLMアプリケーションの開発や運用をする際に共通する課題へのアプローチを探ります。全2回の連載を予定しており、第1回目が机上での整理、第2回目がそれを基にしたOSS(Kong Gateway)を用いたハンズオンとなります。通読することで、LLMアプリケーションに共通する課題へのアプローチのヒントを学び、それを実際に体験することが可能です。

LLM とは

 LLM(Large Language Model | 大規模言語モデル)とは、大量の学習データとディープラーニング[1]技術によって構築された言語モデルのことです。ここで出てきた言語モデルとは、文章や単語の出現確率を用いて、統計的手法によってモデル化したものであり、文章の作成や感情分析、固有表現の抽出などの自然言語処理で用いられます。定量的な定義があるわけではありませんが、LLM出現以前の言語モデルとの大きな違いは、学習に使用されるデータ量、計算量、パラメータ量が大幅に増加していることです。また、あるタスクに特化し、学習されていた従来の言語モデルと比較し、一つのモデルが汎用的にタスクを行うことができることも特徴です。具体的には、以下のようなタスクを行うことができます。

  • 文章の作成
  • 文章の要約
  • 文章の翻訳
  • 感情の分析
  • 固有表現の抽出
  • 文章の意味空間への埋め込み
言語モデルと大規模言語モデルのイメージ
言語モデルと大規模言語モデルのイメージ

 このような背景から、ChatGPTGitHub Copilotに代表されるサービスが急速に広まり、身近なところからビジネスシーンに至るまで活用が進んでいます。

[1] 大量のデータを使って複雑なパターンを自動的に学習し、画像や音声などのデータを正確に認識・分類できるAI技術で、人間の脳の働きを模倣した計算モデルを使用している

LLMを活用したアプリケーションの典型的なアーキテクチャ

 次にLLMを活用したアプリケーションを作ることを考えてみます。ここでは、社内のバックオフィスに対する就業規程や福利厚生などの問い合わせ負荷を減らすために、チャットボットを導入するケースを思い浮かべてみましょう。

 まずは、LLMから適切な出力を得るためにプロンプトを記述する必要があります。例えば、以下の通りです。

プロンプトの記述例
あなたは、バックオフィスの業務サポートを的確に行います。
ユーザーの質問に対して、検索によって得られた情報に”のみ”基づいて回答を作成してください。
検索によって適切な情報が取得できなかった場合は、「申し訳ございませんが、その質問には回答することができません。xxxまでお問い合わせください。」と回答してください。

 最も簡単に実装する場合は、これをアプリケーションのコードの中に直接埋め込むことが考えられますが、そうするとプロンプトを差し替える場合にアプリケーションを再度パッケージングし、環境へデプロイする必要があります。通常、アプリケーションの変更サイクルよりもプロンプトの変更サイクルの方が短いため、そこを分離するような工夫が必要です。

プロンプトをアプリケーションコードから分離するイメージ
プロンプトをアプリケーションコードから分離するイメージ

 次に、LLMは膨大な学習データを基に作成されるため、その学習データに含まれていないような知識に関しては正しく出力することができません。社内にしか存在しない情報や、モデルが学習された時点より後の最新情報を正しく出力することができないのはそのためです。これを補うための方法はいくつか存在します[2]が、導入のしやすさ、時間、コストなどの観点から、外部のツール(検索システムやツールなど)を利用し、それを基にプロンプト拡張を行う方法がよく採用されています。

LLMへ入力する前に知識補完のために追加コンテキストを取得するイメージ
LLMへ入力する前に知識補完のために追加コンテキストを取得するイメージ

次のページ
APIコールの遅延、トークンの過剰利用、出力内容の制御──LLMOpsを考える

この記事は参考になりましたか?

この記事の著者

川村 修平(カワムラ シュウヘイ)

SIerやクラウドベンダーを経て、Kong株式会社でポストセールスエンジニアを務める。コミュニティ活動では、CloudNative Daysというコミュニティでオブザーバビリティチームに所属。著書:Web API開発実践ガイド、OCIで学ぶクラウドネイティブ 実践×理論ガイド、その他技術同人誌

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22313 2025/12/02 17:03

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング