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

ChatGPTのようなAI(人工知能)が提供する「API」を、自分のプログラムから呼び出してみたいと思ったことはありませんか。APIとは「Application Programming Interface」の略で、あるサービスが持つ機能を、外部のプログラムから使えるようにする窓口のことです。今回は、Googleが開発したプログラミング言語「Dart」を使って、AI APIを呼び出す基本の流れを見ていきます。Dartは主にスマートフォンアプリ開発フレームワーク「Flutter」で使われる言語ですが、単体のプログラムとしても動かせます。

AI APIを呼び出すとはどういうことか

ChatGPTなどのAIサービスの多くは、「HTTPリクエスト」という仕組みでやり取りできる窓口(API)を用意しています。HTTPリクエストとは、インターネット上のサーバーに対して「このデータをください」「この内容を処理してください」とお願いする通信の形式です。私たちがブラウザでWebページを見るときも、裏側では同じ仕組みが使われています。

AI APIの場合、こちらから「こんな質問をします」という文章(プロンプトと呼びます)をサーバーに送ります。すると、AIが考えた返事がデータとして返ってくる、という流れになります。つまり、プログラムからAPIを呼び出すというのは、この「送って、受け取る」という一連の通信処理をコードで書くことに他なりません。

Dartでの基本の書き方

Dartには標準でdart:ioというHTTP通信用のライブラリが含まれています。ただし実務では、もう少し使いやすいhttpという外部パッケージ(他の人が作って公開している便利な部品集)を使うのが一般的です。パッケージはpubspec.yamlというファイルに依存関係として書き加え、dart pub getコマンドで取り込みます。

実際にAPIを呼び出すコードのイメージは、次のようになります。

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<void> askAI(String question) async {
  final url = Uri.parse('https://api.example.com/chat');
  final response = await http.post(
    url,
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY',
    },
    body: jsonEncode({'message': question}),
  );

  if (response.statusCode == 200) {
    final data = jsonDecode(response.body);
    print(data['answer']);
  } else {
    print('エラーが発生しました: ${response.statusCode}');
  }
}

ここで登場するasyncとawaitは、「非同期処理」を扱うためのキーワードです。非同期処理とは、時間のかかる処理(この場合はネット越しの通信)の完了を待つ間、プログラムの他の部分を止めずに進められる仕組みのこと。APIからの返事はすぐには返ってこないことが多いため、待っている間に画面がフリーズしないよう、こうした書き方が欠かせません。Dartの非同期処理はFutureという型を中心に設計されており、JavaScriptのPromiseに近い感覚で扱えます。

他言語との違いとDartらしいポイント

Pythonなど他の言語でAPIを呼び出す場合も基本的な流れは同じですが、Dartでは非同期処理が言語の核となる仕組みとして組み込まれている点が特徴です。asyncを付けた関数は必ずFuture型を返す、というルールが明確に決まっています。そのため、コードを読んだときに「これは時間がかかる処理だ」とひと目で分かりやすいというメリットがあります。

また、受け取ったデータはJSON形式(キーと値の組み合わせで表現される、APIのやり取りでよく使われるデータ形式)であることがほとんどです。これを扱う際は、jsonDecodeで一度Map型に変換してから中身を取り出すのが基本の流れです。Dartは型に厳格な言語なので、取り出した値の型が想定と違うとエラーになりやすく、慣れないうちは戸惑うかもしれません。ですが、これはバグを早期に発見しやすいという利点でもあります。

APIキーの取り扱いに関する注意

AI APIを利用する際は、多くの場合「APIキー」と呼ばれる、利用者を識別するための秘密の文字列が必要になります。このAPIキーは、サービスへのアクセス権そのものと言える大切な情報です。コードの中に直接書き込んだまま公開のリポジトリ(ソースコードを保存・共有する場所)にアップロードしてしまうと危険です。第三者に不正利用され、想定外の利用料金が発生する恐れがあります。環境変数(OS側で管理する設定値)や、Gitの管理対象から外す設定ファイルなどを使って、キーをコードから切り離して管理することを心がけましょう。

まとめ

DartからAI APIを呼び出す基本は、①httpパッケージなどでリクエストを送る、②async・awaitで非同期処理を扱う、③返ってきたJSONデータを取り出す、という3つの流れで理解できます。Dartは非同期処理の書き方が言語仕様としてはっきりしているため、一度パターンを覚えてしまえば、他のAPIを呼び出す際にも応用が利きます。まずは小さなサンプルコードを実際に動かしてみて、リクエストとレスポンスのやり取りを体感してみてください。

関連記事


本ページはプロモーションを含みます。

参考書籍(PR)

Dartをもっと学びたい方には「ゼロから学ぶFlutterアプリ開発」がおすすめです。

コメント

このブログの人気の投稿

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

#8 C++で学ぶ文字列操作の基本

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