第7部 LLMを使った開発の基礎

第28章LLMをアプリに組み込む

LLMをアプリケーションに組み込むときの、実際のやり取りを見ていきます。この章では、APIを通じたLLMの 呼び出しの基本と、応答の受け取り方、そして費用に直結するトークンとの関係を扱います。第7部の 締めくくりとして、開発の全体像を整理します。ここまでの知識が、一つのつながりとして見えてきます。

28.1API経由でLLMを呼び出す

クラウドLLMは、多くの場合APIという窓口を通じて呼び出します。プログラムから入力を送り、応答を受け取る、という形で利用します。

クラウドのLLMをプログラムから使うときは、APIと呼ばれる窓口を通すのが一般的です。APIとは、あるサービスの 機能を、決められた手順で外部から呼び出せるようにした窓口のことです。LLMのAPIでは、プログラムから プロンプトや会話履歴を送ると、モデルの応答が返ってきます。人がチャット画面で操作する代わりに、プログラム から同じことを頼む、と考えると分かりやすいでしょう。

利用にあたっては、本人であることを示すための鍵(APIキーなど)が必要になるのが通常です。この鍵は、 料金の請求先とも結びつくため、他人に知られないよう厳重に管理します。うっかりコードに直接書き込んで 共有してしまう、といった事故は避けなければなりません。鍵の扱いは、第9部で見るセキュリティの観点とも つながります。

28.2リクエストとレスポンスの基本

APIの利用は、入力をまとめて送るリクエストと、応答が返ってくるレスポンスの往復です。送る内容には、履歴や各種の設定を含められます。

APIを通じたやり取りは、送信(リクエスト)と応答(レスポンス)の往復として捉えられます。リクエストには、 これまで見てきた会話履歴や、使用するモデルの指定、第23章で扱った温度などの設定を含めます。レスポンス には、モデルの応答本文に加えて、使ったトークン数などの情報が含まれるのが一般的です。次のコードは、 この往復のイメージです。会話履歴と設定を渡し、応答を受け取ります。

Python(イメージ)
response = llm_api(
    model="使用するモデル名",
    messages=history,      # これまでの会話履歴
    temperature=0.7,       # 出力のばらつきの設定
)

print(response.text)          # 応答の本文
print(response.used_tokens)   # 使ったトークン数

ここで、第26章で見た会話履歴の管理が効いてきます。messages にこれまでの履歴を入れて渡す ことで、ステートレスなモデルにも文脈を踏まえた応答をさせられるのです。第7部で見てきた話が、この一つの 呼び出しの中でつながっているのが分かります。

28.3ストリーミング出力

応答をすべて待ってから受け取るのではなく、生成されるそばから少しずつ受け取る方式をストリーミングと呼びます。待ち時間の体感を減らせます。

第15章で見たとおり、LLMは文章を一トークンずつ生成します。この性質を活かし、応答が全部でき上がるのを 待つのではなく、生成されたそばから少しずつ受け取る方式があります。これをストリーミングと呼びます。 チャットで、応答が少しずつ画面に流れて表示されるのは、この方式によるものです。

長い応答でも、最初の部分をすぐ見せられるため、利用者の待ち時間の体感を大きく減らせます。全部でき 上がるまで真っ白な画面で待たされるより、少しずつでも出てくるほうが、はるかに快適です。対話的な アプリケーションでは、よく使われる方式です。中身の計算は変わりませんが、見せ方を工夫することで、 使い心地が大きく変わる好例だといえます。

28.4コストとトークンの関係

クラウドLLMの費用は、多くの場合やり取りするトークンの量で決まります。入力と出力の両方が数えられるため、履歴の長さが費用に直結します。

クラウドLLMの利用費用は、多くの場合、やり取りするトークンの量に応じて決まります。ここで注意したいのは、 費用の対象になるのは出力だけではない、という点です。送信する入力、すなわちプロンプトや会話履歴も トークンとして数えられます。第26章で見たとおり、会話が長くなるほど毎回渡す履歴も長くなるため、 やり取りを重ねるほど一回あたりのトークンが増え、費用もかさみます。

実務メモ:費用を抑える基本の手

トークン量を抑える工夫は、そのまま費用の節約になります。第26章で見た履歴の要約や取捨選択で入力を 短く保つ、出力の最大長を適切に設定して長すぎる応答を防ぐ、簡単な処理には小さめのモデルを使う、と いった手が基本です。また、同じ質問が繰り返し来るなら、前の結果を再利用するしくみを入れる方法も あります。性能・速さ・費用は互いに引っ張り合うので、用途にとって何が重要かを決め、そこに合わせて 調整するのが現実的です。すべてを最高にはできない、という前提で選ぶことが大切です。

第7部で見てきた、ステートレスであること、会話をプログラム側で管理すること、動かす場所を選べること、 そしてトークンが費用に直結すること。これらは、LLMを使ったアプリケーションを作るうえでの土台になります。 一つの呼び出しの裏側で、これだけのことが関わっているのです。次の第8部では、LLMに外部の知識やツールを 組み合わせて、その力を広げる方法を見ていきます。

この章の要点

  • クラウドLLMは、APIという窓口を通じて、入力を送り応答を受け取る形で利用します。鍵の管理が重要です。
  • やり取りはリクエストとレスポンスの往復で、履歴や温度などの設定を送れます。
  • 生成されるそばから少しずつ受け取るストリーミングは、待ち時間の体感を減らせます。
  • 費用は多くの場合トークン量で決まり、入力(履歴)も数えられるため、履歴の長さが費用に直結します。
  • 履歴を短く保つ、最大長を設定する、用途に合うモデルを選ぶ、などが費用を抑える基本です。