GPT-4.1 を Node.js（OpenAI 公式の TypeScript・JavaScript ライブラリ）で試してみる

## はじめに

以下の公式情報が出ていた、GPT-4.1 シリーズを試してみた、という話です。

●Introducing GPT-4.1 in the API | OpenAI
 https://openai.com/index/gpt-4-1/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/dca8d578-6979-4bf5-ab87-3e278a67f1da.png)

https://x.com/OpenAIDevs/status/1911859780236214426


### 現状は API からの利用のみ

現状は、使おうとすると API経由のみとなるようです。

あと、上で掲載していたページ内にリンクがありますが、API を簡単に試せる公式のプレイグラウンドから使ってみるのが、一番簡単かと思います。

●Prompts Playground - OpenAI API
 https://platform.openai.com/playground/prompts?models=gpt-4.1


### モデルの情報

公式のモデルのページへのリンクを掲載しておきます。

●Model - OpenAI API
 https://platform.openai.com/docs/models/gpt-4.1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/cdf8fa38-7c52-46c0-b56b-440f51917af9.png)

#### ページ下部の情報

ページ下部の Modalities・Endpoints の内容は以下となっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0eb0f86c-f994-475d-9706-562f6c1fc7d5.png)

また、Features の部分は以下のとおりです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/43179e45-542c-46ba-9eaa-765aef2fe3c6.png)


## Node.js で試してみる

Node.js から実際に試してみます。

### 公式の APIリファレンスの情報

公式の APIリファレンスを見てみます。

#### Chat completion

[Create chat completion の部分（※ Node.js を選択した状態）](https://platform.openai.com/docs/api-reference/chat/create?lang=node.js) を見てみると、サンプルは gpt-4.1 を使ったものが表示されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/35be518f-c3ef-4590-8dc5-f2cdb978d41b.png)

```javascript
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const completion = await openai.chat.completions.create({
    messages: [{ role: "developer", content: "You are a helpful assistant." }],
    model: "gpt-4.1",
    store: true,
  });

  console.log(completion.choices[0]);
}

main();
```


#### Responses API

また、[Create a model response の部分](https://platform.openai.com/docs/api-reference/responses/create) も、GPT-4.1 のサンプルになっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/f6b70869-8be1-4d7b-876d-a761495d5c65.png)

こちらは、以下の記事でも書いた「Responses API」です。

●Node.js で OpenAI の 新API（Responses API）をシンプルに試す - Qiita
 https://qiita.com/youtoy/items/12749481635230fae586

以下がサンプルのコードです。

```javascript
import OpenAI from "openai";

const openai = new OpenAI();

const response = await openai.responses.create({
    model: "gpt-4.1",
    input: "Tell me a three sentence bedtime story about a unicorn."
});

console.log(response);
```

Responses API のほうが記載がシンプルになるので、こちらで試します。


### 下準備

#### 利用するライブラリ

今回、公式の TypeScript・JavaScript ライブラリを使います。

●openai - npm
 https://www.npmjs.com/package/openai

`npm install openai` でインストールします。

#### APIキーの設定

APIキーは、環境変数として設定しておきます。
`OPENAI_API_KEY` という名前で使えるようにしておきます。


### API経由で GPT-4.1 を使う（Responses API）


それでは、上記の下準備をした上で、以下のコードを実行してみます。

```javascript
import OpenAI from "openai";

const openai = new OpenAI();

const response = await openai.responses.create({
  model: "gpt-4.1",
  input: "あなたは誰？",
});

console.log(response);
```

#### 実行結果

上記を実行してみた結果です。

モデルのところを見ると、`'gpt-4.1-2025-04-14` が使われていることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/45e89eaf-df7f-4f99-9c25-8b9290d45d27.png)

とりあえず、シンプルなお試しは成功です。

#### ダッシュボードで利用履歴を見てみる

OpenAI のダッシュボードで利用履歴を見てみました。

「Usage の Chat Completions（ https://platform.openai.com/usage/chat-completions ）」を開いたところ、以下のように「gpt-4_1-2025-04-14」の利用履歴が確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/2cc05048-2510-4a76-ad2d-dfa182c985e8.png)

こちらは、API を 2回たたいてみた後の状態です。

## 【追記】 さらに試してみる

さらに、画像入力も試してみます。

### 公式サンプルのもの

以下は、公式のサンプル（Responses API のもの）です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a1117055-22c6-4730-b12f-8d458f9bdf3a.png)


```javascript
import OpenAI from "openai";

const openai = new OpenAI();

const response = await openai.responses.create({
    model: "gpt-4.1",
    input: [
        {
            role: "user",
            content: [
                { type: "input_text", text: "what is in this image?" },
                {
                    type: "input_image",
                    image_url:
                        "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
                },
            ],
        },
    ],
});

console.log(response);
```

プロンプトは意味は変えず、日本語のもので試してみました。

#### 出力

以下は出力です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0535b471-2567-4d6a-9cb0-fba2490f4de5.png)

入力画像は以下ですが、レスポンスのテキストは画像の内容を説明したものになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e4e39b9c-aab3-4b21-bcb3-4090efb9266e.png)


### 複数の画像ファイルの入力

さらに、以下の記事で扱った「ローカルにある複数の画像ファイルを対象とした処理」も試してみました。

●Gemini の API を OpenAI のパッケージ ＋ Node.js で試す（テキスト・複数の画像の入力）【生成AI−2】 - Qiita
 https://qiita.com/youtoy/items/0a4539ce6b9160d55e60

コードは以下のとおりで、上記の記事で書いていたコードの一部のフォーマットを Responses API用にしています。

```javascript
import OpenAI from "openai";
import fs from "fs";

const openai = new OpenAI();

const imagePaths = ["./input1.jpg", "./input2.jpg"];
const imageBase64List = imagePaths.map((imagePath) => {
  const imageBuffer = fs.readFileSync(imagePath);
  return imageBuffer.toString("base64");
});

const response = await openai.responses.create({
  model: "gpt-4.1",
  input: [
    {
      role: "user",
      content: [
        { type: "input_text", text: "これらは何の画像？" },
        {
          type: "input_image",
          image_url: `data:image/jpeg;base64,${imageBase64List[0]}`,
        },
        {
          type: "input_image",
          image_url: `data:image/jpeg;base64,${imageBase64List[1]}`,
        },
      ],
    },
  ],
});

console.log(response);
```

#### 出力結果

以下がレスポンスで、その後に入力画像 2つ（過去の記事で用いたのと同じもの）を掲載します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/499dd2a7-4df2-40cc-bcb2-7786d5c36f29.png)

↓入力画像 2つ
![2025-04-16_00-05-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/388375b9-f7ef-41d0-aa26-c9cfbf876b32.jpeg)

2つ目のシーンの記述は当たってないのですが（※ そもそも、画像から読み取れるものではないので、当たらなくて当然というものですが）、きちんと 2つの画像の内容を読み取って説明できていることが分かります。

#### 出力結果2： mini と nano

先ほどの複数の画像出力を、 `model: "gpt-4.1-mini"` と `model: "gpt-4.1-nano"` にして試してみました。

![2025-04-16_00-17-20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/bd7bc138-afd2-4c39-b308-9747f39304e2.jpeg)

1回ずつしか試してないので、出力で違いが出ているのは単にランダムな要素で変わったのか、モデルに依存した変化があるのかは不明です。


#### ダッシュボードで利用履歴を見てみる

再度、OpenAI のダッシュボードで利用履歴で「Usage の Chat Completions（ https://platform.openai.com/usage/chat-completions ）」を見てみました。

そうすると、以下のように「gpt-4_1-2025-04-14」で利用したトークン数が増加しており、また「gpt-4_1-mini-2025-04-14」と「gpt-4_1-nano-2025-04-14」の利用履歴が増えていました。

![2025-04-16_00-20-12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/fa3d82aa-33c4-4f5a-a56a-ee668a592750.jpeg)


## おわりに

GPT-4.1 を OpenAI 公式の TypeScript・JavaScript ライブラリでサクッと試してみました。

今回の内容だと GPT-4.1 ならではの特長を活用した要素がないお試しでしたが、次は GPT-4.1 ならではの要素を何か盛り込んで試せればと思います。


### 余談

#### GPT-4.1用のプロンプトガイド

GPT-4.1用のプロンプトガイドが出ているようです。

●GPT 4.1 Prompting Guide | OpenAI Cookbook
 https://cookbook.openai.com/examples/gpt4-1_prompting_guide

#### GitHub Copilot でも利用可能に

GitHub Copilot でも利用可能になったようです（エージェントモードでも使えるようです）。

●OpenAI GPT-4.1 now available in public preview for GitHub Copilot and GitHub Models - GitHub Changelog
 https://github.blog/changelog/2025-04-14-openai-gpt-4-1-now-available-in-public-preview-for-github-copilot-and-github-models/

https://x.com/youtoy/status/1912170449150386336


#### 条件付き・期間限定の無料枠で API が使えた話

[前に自己責任で試してみた、OpenAI の期間限定の無料枠のオファー（※ プロジェクト指定はできるけど、対象となる API利用のデータ提供が条件になる）](https://qiita.com/youtoy/items/2930eaa43082555b5d5f)というのがあるのですが、GPT-4.1 がその対象に追加されていたようでした。

https://x.com/youtoy/status/1899863676188049412

4月末まで、自分はデータ提供を条件にこの枠を使ったお試しができそうです。