第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章で扱った温度などの設定を含めます。レスポンス には、モデルの応答本文に加えて、使ったトークン数などの情報が含まれるのが一般的です。次のコードは、 この往復のイメージです。会話履歴と設定を渡し、応答を受け取ります。
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という窓口を通じて、入力を送り応答を受け取る形で利用します。鍵の管理が重要です。
- やり取りはリクエストとレスポンスの往復で、履歴や温度などの設定を送れます。
- 生成されるそばから少しずつ受け取るストリーミングは、待ち時間の体感を減らせます。
- 費用は多くの場合トークン量で決まり、入力(履歴)も数えられるため、履歴の長さが費用に直結します。
- 履歴を短く保つ、最大長を設定する、用途に合うモデルを選ぶ、などが費用を抑える基本です。