#25 Javaで学ぶAI API(ChatGPT等)の呼び出し方の基本

はじめに

ChatGPTのようなAI(人工知能)は、実は「API(エーピーアイ)」という仕組みを通じて、自分のプログラムから呼び出すことができます。APIとは「Application Programming Interface」の略で、あるサービスの機能を外部のプログラムから利用できるようにする「窓口」のようなものです。Javaは企業システムなどでよく使われる言語ですが、AI APIを呼び出す仕組みは意外とシンプルです。この記事では、JavaからAI APIを呼び出す基本の流れを、初めての人にもわかるように解説します。

AI APIを使う前に知っておきたいこと

APIキーとは何か

多くのAIサービスは、誰でも自由に使えるわけではなく「APIキー」と呼ばれる文字列を発行しています。これは利用者を識別するための合言葉のようなもので、リクエスト(サービスへの依頼)に添えることで「誰がどれだけ利用したか」をサービス側が把握できる仕組みです。APIキーは家の鍵と同じくらい大切な情報です。コードに直接書いてGitHubなどに公開してしまうと、第三者に無断で使われてしまう恐れがあるため、環境変数(プログラムの外側で値を管理し、実行時に読み込む仕組み)などを使って管理するのが基本です。

JavaはHTTP通信の準備が少し多め

PythonやJavaScriptでは、外部ライブラリなしでも比較的簡単にWeb通信ができる場合があります。一方Javaは「型(データの種類)」をきっちり指定する言語なので、通信内容やJSON(データをやり取りするための文字列形式)の扱いに一手間かかる印象があります。ただしJava11以降ではjava.net.http.HttpClientという通信用の機能が標準ライブラリに追加され、以前より簡潔にHTTP通信を書けるようになりました。今回はこの標準機能だけを使い、追加のライブラリなしでAI APIを呼び出す方法を紹介します。

HttpClientを使った呼び出し方の基本

HttpClientは、Webサービスにリクエストを送り、返ってきたレスポンス(応答)を受け取るためのJava標準の仕組みです。基本の書き方は次のようになります。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class AiApiSample {
    public static void main(String[] args) throws Exception {
        String apiKey = System.getenv("AI_API_KEY"); // 環境変数からキーを読み込む

        String requestBody = """
            {"messages": [{"role": "user", "content": "こんにちは"}]}
            """;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/v1/chat"))
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer " + apiKey)
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

System.getenv("AI_API_KEY")は、環境変数からAPIキーを読み込む書き方です。APIキーをコードに直接書かずに済むため、先ほど触れた「キーを人目に触れさせない」ための代表的な方法です。また、コード中の"""で囲まれた部分は「テキストブロック」と呼ばれるJava15以降の書き方です。複数行の文字列を改行そのままで書けるので、JSONのような文字列を扱うときに読みやすくなります。

JSONの扱いに一手間かける

上のサンプルではリクエストの本文(送るデータ)を文字列として直接書きました。しかし実際のプログラムでは質問の内容が毎回変わるため、文字列を手作業で組み立てるとエラーの原因になりやすいです。JavaにはJSONを標準で組み立てる機能がありません。そのため実務ではJacksonGsonといった外部ライブラリを使い、Javaのオブジェクト(データと処理をまとめたもの)をJSON文字列に変換するのが一般的です。まずは今回のように文字列を直接扱う方法で仕組みを理解し、必要になったタイミングでライブラリの導入を検討するとよいでしょう。

レスポンスについても同様で、response.body()で受け取れる文字列はJSON形式のままです。そこから欲しい情報だけを取り出すには、JSONを解析する処理が必要になります。慣れてくるまでは、まずSystem.out.printlnで内容を表示してみて、どんな形のデータが返ってきているかを確認しましょう。その習慣をつけておくと、後の処理がスムーズになります。

エラー時に気をつけたいこと

API呼び出しは必ず成功するとは限りません。APIキーが間違っている、通信が不安定、利用回数の上限に達しているなど、さまざまな理由でエラーが返ることがあります。こうした場合に備えて、trycatchという「エラーが起きても処理を止めずに対応する」ための構文を使うと安心です。

try {
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    if (response.statusCode() != 200) {
        System.out.println("通信エラー: " + response.statusCode());
    } else {
        System.out.println(response.body());
    }
} catch (Exception e) {
    System.out.println("エラーが発生しました: " + e.getMessage());
}

response.statusCode()は、通信の結果を表す番号(ステータスコード)を確認できるメソッド(処理のまとまり)です。200番台であれば基本的に成功、400番台や500番台であれば何らかの問題が起きているサインです。エラーの内容には原因のヒントが含まれていることが多いので、まずは落ち着いてメッセージを確認してみましょう。

まとめ

JavaからAI APIを呼び出す基本の流れは、次の3ステップです。

  1. APIキーは環境変数などで管理し、コードに直接書かない
  2. 標準ライブラリのHttpClientを使い、JSON形式でリクエストを送る
  3. try/catchとステータスコードの確認でエラーに備える

Javaは型がきっちりしているぶん、他の言語より書く量がやや多く感じるかもしれません。しかしJava11以降はHttpClientが標準で使えるようになり、追加のライブラリなしでもAI APIを試せる環境が整っています。まずは今回のサンプルを動かしてみて、AIとのやり取りの感覚をつかんでみましょう。

関連記事

コメント

このブログの人気の投稿

#11 Rustで学ぶエラーハンドリングの基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本

#19 Goで学ぶテスト(単体テスト)の基本