APIは、アプリケーションからモデルを利用する入口
APIは、プログラム同士が決まった形式で情報をやり取りするための入口です。生成AIのAPIでは、アプリケーションが指示や質問を送り、モデルが生成した応答を受け取ります。チャット画面で手入力する代わりに、アプリケーションの処理から利用できるようにしたもの、と考えると分かりやすくなります。
APIという言葉は、外部のサービスを呼ぶ窓口にも、ライブラリの部品を使う窓口にも使われます。たとえばLangChainの部品へ「質問を渡す」操作と、その部品が外部の生成サービスへ通信することは、別の段階です。部品を使うたびに、必ず外部へ通信するわけではありません。
モデルへの一回の呼び出しには、入力となるメッセージ、利用するモデル、生成に関する設定などが含まれます。返ってくるのは文章だけとは限りません。ツールを呼び出す要求や、項目ごとに整理されたデータ、利用量などの付随情報が含まれることもあります。LangChainでは、こうした入出力をモデルやメッセージの部品として扱います。
社内規程について回答させたい場合、質問文を送るだけでは、未公開の規程はモデルの入力に入りません。「モデルが社内のことを分かっているはず」と考えず、必要な情報をアプリケーションから渡すことが出発点です。
トークンは、入力と出力の量を数える単位
モデルは文章を内部で細かな単位へ分けて扱います。この単位をトークンと呼びます。トークン数は文字数や単語数と同じではなく、言語やモデルの分割方法によって変わります。「日本語一文字が必ず一トークン」のような換算はできません。
入力には、利用者の今回の質問だけでなく、回答方針、過去の会話、参照資料、ツールの説明や結果なども含まれます。質問が一行でも、そのほかに長い資料を渡せば、入力全体のトークン数は大きくなります。出力も利用量の対象になり、提供会社やモデルによって数え方や料金体系が異なります。
コンテキストウィンドウは、モデルが一度の処理で扱える情報量の上限です。入力と出力にそれぞれ制約があるため、「大きな資料を渡せるモデルなら、いくらでも長く回答させられる」とは限りません。会話や資料の量を管理する理由は、費用だけでなく、この上限にもあります。
コンテキストは、モデルがその呼び出しで参照する指示や情報の全体を指します。今回の質問に加えて、方針・履歴・資料などがその中身です。コンテキストウィンドウは、それらを扱う量の上限です。入力と出力で枠を共有するモデルでは、入力を増やすと出力に残せる枠も変わります。具体的な上限と数え方は、使うモデルで確認します。
同じ指示でも応答が変わることがある
生成モデルの応答は、一般的な計算機の四則演算のように、いつでも同じ結果になるものではありません。同じ質問でも表現が変わったり、含まれる項目が変わったりすることがあります。生成の設定を調整して変動を抑えられる場合もありますが、それだけで内容の正しさが保証されるわけではありません。
このため、アプリケーションでは「文章として自然か」と「必要な条件を満たすか」を分けて考えます。規程の回答なら、読める日本語であることに加え、根拠の資料が合っているか、適用条件を落としていないかが必要です。LangChainの構造化出力や評価は、このような確認を組み立てるために使えます。
Function Callingで返るのは、実行の要求
プログラムの中で、名前を付けてまとめた処理を関数と呼びます。関数へ渡す条件や材料が引数、処理から受け取る結果が戻り値です。「規程を検索する」という関数へ「交通費」という引数を渡し、該当する文章を戻り値として受け取る、と考えてください。ここでは関数の書き方を知る必要はありません。
Function Calling、またはツール呼び出しは、モデルが利用したい機能の名前と引数を、決まった形式で返す仕組みです。たとえばモデルが「規程を検索する機能へ、交通費という語を渡したい」と判断したとき、検索するための要求を返します。
要求が返った時点で、検索が実行済みとは限りません。アプリケーションが、その機能を実行してよいか、引数が妥当かを確かめ、実際に検索を行います。検索結果をモデルへ返すことで、その内容に基づいた説明を生成させられます。LangChainではこの流れをツールやエージェントとして扱います。
この節では、APIには「文章を受け取る呼び出し」だけでなく、「次に実行する機能の要求を受け取る呼び出し」もあると押さえておけば十分です。ツールの詳細は第5章で説明します。
LangChainを挟んでも、API側の条件は残る
LangChainは接続を扱いやすくしますが、APIの認証、利用回数の制限、対応機能、通信障害まで無くすものではありません。応答が返らなかった場合は、入力の作り方の問題なのか、認証や利用制限の問題なのか、外部サービスの一時的な問題なのかを分けて考えます。
外部サービスでは、利用を許可された接続かを確かめるためにAPIキーなどを使う場合があります。APIキーは、サービスを利用するための秘密の認証情報です。また、短時間に送れる要求の数を制限する仕組みをレート制限と呼びます。この教材では取得作業は行いませんが、接続時の問題が回答内容の問題とは別であることを理解するために、これらの言葉を知っておくと役立ちます。
一つの質問が一回のAPI呼び出しで終わるとも限りません。ツールの結果を受けてモデルへ再度問い合わせたり、検索用の質問を作り直したりすると、呼び出し回数は増えます。利用者から見える一往復と、内部のモデル呼び出し回数を分けることが、後のエージェント理解にもつながります。
ここまでで、モデルへ依頼を送り、応答を受け取る全体像を確認しました。次の節では、このやり取りをLangChainのモデル、メッセージ、プロンプトという部品でどう表すかを学びます。