LLMアプリの全体構成
LLMアプリはフロントエンド・バックエンド・LLM APIの3層で構成されます。
3層アーキテクチャの概要
LLMを使ったアプリケーションは基本的に「ユーザーが操作する画面(フロントエンド)」「処理を担うサーバー(バックエンド)」「言語処理を担うLLM API」の3層で構成されます。フロントエンドはWebブラウザやモバイルアプリ、Slackのようなチャットツールの場合もあります。バックエンドはユーザーの入力を受け取り、必要な処理(RAG検索・ツール呼び出し・履歴管理)を行ってからLLM APIにリクエストを送り、レスポンスを加工してフロントエンドに返します。
システムプロンプトとセッション管理
システムプロンプトはアプリケーション全体の振る舞いを定義する設定です。「あなたは〇〇社のカスタマーサポートアシスタントです。社内規程に基づいて回答し、わからないことは担当者に転送すると伝えてください」のような指示をバックエンドが自動的に付与します。また、複数回のやり取りを記憶するために、過去の会話履歴(ユーザー発言とAI応答のペア)をAPI呼び出しのたびに含めて送信します。
ストリーミングレスポンス
ChatGPTのように「文字が少しずつ表示される」動作はストリーミングレスポンスで実現しています。LLM APIはトークンを1つずつ生成しながら送信する仕組みに対応しており、バックエンドはこれをリアルタイムでフロントエンドに転送します。長い回答でもユーザーが待たずに読み始められるため、体感的な速度が向上します。
コンテキスト管理
会話履歴の管理方法がアプリの品質とコストを大きく左右します。
コンテキストウィンドウの制限と対策
LLMが参照できるテキスト量(コンテキストウィンドウ)には上限があります。会話が長くなると古い履歴がウィンドウからあふれ、AIが「以前話した内容」を参照できなくなります。対策として①古い会話を要約して保持する「会話要約」、②重要な情報のみを抽出して保持する「エピソードメモリ」、③すべての履歴をデータベースに保存し必要時に検索する「外部メモリ」などの手法が使われます。
メモリの種類と設計
LLMアプリのメモリは3種類に分類されます。短期メモリは現在のセッション内の会話履歴で、コンテキストウィンドウに直接含まれます。長期メモリはユーザーのプロフィール・設定・過去の重要情報をデータベースに保存し、必要時に検索して取り出します。外部知識はRAGで社内文書などを検索する仕組みです。3種類を適切に組み合わせた設計が重要です。
マルチターン会話の設計
ユーザーが「それについてもっと詳しく」「さっきの例で言うと」のような代名詞・省略を使う会話を適切に処理するには、前後の文脈を正しくLLMに渡す設計が必要です。特にユーザーが話題を切り替えた際に、古い文脈を引きずらないようクリア処理を組み込むかどうかはUX設計の重要な判断ポイントです。
ツール統合とFunction Calling
LLMに外部のツールやデータを使わせる仕組みがFunction Callingです。
Function Callingとは
Function Callingは、LLMが「この質問に答えるには外部ツールを使う必要がある」と判断したとき、ツール名と引数をJSON形式で出力する機能です。バックエンドがそのJSON出力を受け取り実際のツール(API・データベース・計算など)を実行し、結果をLLMに返すことで、LLMは最終的な回答を生成します。「現在の株価を調べて」という質問なら、株価APIを呼び出して最新データを取得し回答できます。
ツール統合の代表例
- 計算ツール:Pythonインタープリタを呼び出して複雑な計算を正確に実行
- 検索ツール:Web検索APIやRAGシステムで最新・社内情報を取得
- データベース:自然言語からSQLを生成してDBに問い合わせ
- 外部API:カレンダー・CRM・在庫システムと連携して業務を自動化
本番環境での考慮事項
コスト・速度・安全性の3要素が本番LLMアプリの品質を決めます。
コストとレイテンシの最適化
LLM APIの利用コストはトークン数に比例します。コスト削減の主な手法は「用途に応じたモデルの使い分け(簡単なタスクは安価なモデル)」「プロンプトの最適化(不要な冗長表現の削除)」「キャッシング(同一プロンプトへの回答を再利用)」です。レイテンシ改善にはストリーミング・並列処理・モデルサイズの適正化が有効です。
監視と品質管理
本番環境では「ハルシネーション検知」「コスト監視」「ユーザー満足度」の3つを継続的に計測します。LLMの出力を別のLLMで事実確認するLLM-as-a-Judgeの手法も普及しています。また、不適切な出力(差別的・有害なコンテンツ)を防ぐガードレールの設計も重要で、NVIDIAの NeMo Guardrails や独自フィルタリングが使われます。
まとめ
この記事では、LLMアプリの基本アーキテクチャをフロントエンド・バックエンド・コンテキスト管理・ツール統合の観点から解説しました。
- LLMアプリはフロントエンド・バックエンド・LLM APIの3層で構成し、バックエンドがプロンプト管理・RAG・ツール呼び出しを担う
- コンテキスト管理では短期・長期・外部知識の3種類のメモリを組み合わせ、会話の一貫性を保つ
- Function Callingにより計算・検索・DB問い合わせなど外部ツールをLLMが活用できる
- 本番では用途別モデル選定・キャッシング・LLM-as-a-Judgeによる品質監視が重要
これらを理解することで、社内AIツールの導入提案を技術的に評価し、ベンダーとの設計議論に参加できるようになります。


コメント