#25 C Plusで学ぶAI API(ChatGPT等)の呼び出し方の基本
ChatGPTのようなAI(人工知能)が答えを返してくれる仕組みは、実はシンプルです。「API」と呼ばれる窓口にインターネット経由でお願い事(リクエスト)を送り、返事(レスポンス)を受け取っているだけなのです。この記事では、C++からAI APIを呼び出すための基本的な考え方と、最低限おさえておきたい注意点を初心者向けに解説します。
AI APIを呼び出すとはどういうことか
API(エーピーアイ)とは「Application Programming Interface」の略で、プログラム同士がやり取りするための決まりごとのことです。ChatGPTを提供しているサービスなどでは、Webサイトの画面を使わなくても、決められた形式でデータを送るだけでAIに質問を投げかけることができます。そして、AIからの答えも同じように受け取れます。
このやり取りには、Webブラウザがサイトを表示するときと同じ「HTTP」という通信の仕組みが使われます。具体的には、質問文などをJSON(ジェイソン)という形式のテキストにまとめて送り、AIからの返事もJSON形式で返ってくる、という流れです。JSONは「キーと値のペア」を並べたシンプルなデータ形式で、多くのプログラミング言語で扱いやすいよう設計されています。
C++でHTTP通信をするにはlibcurlが定番
PythonやJavaScriptには標準でHTTP通信を行う機能が用意されていることが多いのですが、C++には標準機能としてのHTTP通信手段がありません。そこで広く使われているのが「libcurl」という外部ライブラリです。libcurlはコマンドラインツール「curl」の中身を担っているライブラリで、C言語向けに作られていますが、C++からもそのまま利用できます。
libcurlを使う場合、大まかな流れは次のようになります。
- curl_easy_init() で通信の準備をする
- curl_easy_setopt() で送信先のURLや、送るデータ、認証情報などを設定する
- curl_easy_perform() で実際に通信を実行する
- 返ってきたレスポンス(応答)を受け取る
- curl_easy_cleanup() で後片付けをする
C++では自分でメモリの確保・解放を管理する場面が多く、libcurlの初期化と後片付けをペアで書き忘れないことが大切です。RAII(リソースの確保をオブジェクトの生存期間に紐づけるC++の考え方)を活用すると、後片付け忘れを防ぎやすくなります。具体的には、通信用のクラスを自作し、コンストラクタ(オブジェクト生成時に呼ばれる関数)で初期化する方法があります。デストラクタ(破棄時に呼ばれる関数)で後片付けをする形にしておくと、忘れずに済みます。
JSONの組み立てとパースにもライブラリを使う
C++には標準のJSON機能もないため、こちらも外部ライブラリの力を借りるのが一般的です。「nlohmann/json」というライブラリはヘッダファイル1つを追加するだけで使えて人気があります。質問文をJSONに組み立てるときは、次のようにC++のオブジェクトを扱う感覚で書けます。
json body;
body["model"] = "gpt-4o-mini";
body["messages"] = json::array({
{{"role", "user"}, {"content", "こんにちは"}}
});
std::string payload = body.dump();
dump()という関数を呼ぶと、JSONオブジェクトが文字列に変換され、これをリクエストの本文(ボディ)としてlibcurlで送信します。返ってきた文字列も同じライブラリでjson::parse()するだけで、C++側から簡単に中身を取り出せます。
APIキーの扱いにはとくに注意する
AI APIを呼び出す際には、多くの場合「APIキー」と呼ばれる、自分専用のパスワードのような文字列が必要です。このAPIキーはHTTPリクエストの「ヘッダー」(送信データに添える付加情報の部分)に付けて送信します。
ここで初心者がやってしまいがちな失敗が、APIキーをソースコードに直接書いてしまい、そのままGitHubなどに公開してしまうことです。APIキーが流出すると、第三者に勝手に使われてしまう恐れがあります。APIキーはソースコードに直接書き込まないようにしましょう。環境変数(OSに設定しておく値)から読み込むか、Gitに含めないファイルを指定する「.gitignore」で除外した設定ファイルに保存する、といった方法で管理するのが安全です。
C++ならではの注意点
C++は他の言語に比べて「自分でライブラリを用意する」場面が多い言語です。Pythonであれば、AI APIを呼び出すための専用ライブラリ(SDK)が公式に用意されていることもあります。一方C++では、libcurlやJSONライブラリを組み合わせて、通信部分を自力で組み立てる必要があります。手間はかかりますが、その分、通信の仕組み自体を理解する良い機会にもなります。
また、ネットワーク越しの通信は必ず失敗する可能性がある処理です。通信エラーやAI側からのエラー応答が返ってくることを前提に、エラー処理をきちんと書いておきましょう。try-catch文などを使えば、プログラムが突然落ちてしまう事態を防げます。
まとめ
C++からAI APIを呼び出す基本は、libcurlでHTTP通信を行い、JSONライブラリで質問データを組み立てて送ることです。そして、返ってきたJSONを解析して結果を取り出す、という流れになります。標準機能だけでは完結しない分、外部ライブラリの選び方や後片付け、APIキーの安全な管理といったC++ならではの気配りが必要になります。最初は難しく感じるかもしれませんが、一つひとつの手順を分けて理解すれば、決して複雑な仕組みではありません。少しずつ試しながら、自分のプログラムにAIの力を組み込んでみてください。
関連記事
本ページはプロモーションを含みます。
参考書籍(PR)
C++をもっと学びたい方には「新・明解C++入門編」がおすすめです。
コメント
コメントを投稿