はじめに
この記事は、OpenAI の GPT-5 を Vercel の AI SDK で試してみた、という話です。
さらに、以下の記事を書いた時に試した「GPT-5 の API」で使えるようになった新オプション 2つを、Vercel の AI SDK で使えるか試してみます。
●【Node.js】 OpenAI公式の情報をもとに「GPT-5 の API」の従来との違いを少し見てみる(reasoning.effort minimal や verbosity の設定) - Qiita
https://qiita.com/youtoy/items/edf41b9b733769b60cc0
自分が OpenAI公式のパッケージを使って API で試した 2つの新オプションは、具体的には、以下 2つです。
- OpenAI の推論モデルの reasoning.effort が従来は 3つだったところに 4つ目で加わった「minimal」
- verbosity の設定
実装に用いるパッケージ
今回のお試しでは、以下の AI SDK の Node.js用パッケージを使います。
●ai - npm
https://www.npmjs.com/package/ai
リリース情報を見てみると、直近で gpt-5 関連の更新がされているようです。
公式の OpenAI Provider の情報
Vercel公式の OpenAI Provider の Model Capabilities の情報を見てみると、gpt-5系のモデルの情報も既に追加されているようでした。
以下は表の最上部と、gpt-5系のモデルの情報の部分をつなぎあわせたものです。
とりあえず、gpt-5 を使うのは問題なくできそうな感じのようです。
さっそく試す
さっそく試していきます。
下準備
下準備として、まずは以下でパッケージをインストールします。
npm i ai @ai-sdk/openai
さらに、環境変数 OPENAI_API_KEY に OpenAI の APIキーを設定します。
お試し1
とりあえずシンプルな公式サンプルを使って、GPT-5 が使えるかどうかを、実際にやってみます。モデルの部分で gpt-5 を指定したコードは以下のとおりです。
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
const { text } = await generateText({
model: openai("gpt-5"),
system: "You are a friendly assistant!",
prompt: "空はなぜ青い?",
});
console.log(text);
処理を試してみた結果、以下のとおり回答を得ることができました。
お試し2
次は、ストリーミングレスポンスを試します。コードは以下の公式ページに掲載されているサンプルを使います。
●AI SDK Core: streamText
https://ai-sdk.dev/docs/reference/ai-sdk-core/stream-text
お試し用のコードは以下のようにしました。
import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";
const { textStream } = streamText({
model: openai("gpt-5"),
prompt: "空はなぜ青い?",
});
for await (const textPart of textStream) {
process.stdout.write(textPart);
}
出力結果
上記を実行した結果を以下に掲載します。
ストリーミングで出力されるのを確認できました。
お試し2-2
さらにストリーミングでの出力を試します。今度は、先ほどのコードはそのままで、プロンプトを「p5.jsのパーティクルのプログラム」という内容に変えたものも試してみます。
コードを実行して出力がされた時の様子を動画にしたもの(← 冒頭を編集でカットしたもの)を以下に掲載します
※ 注: 動画編集で、冒頭の 20秒ほどの応答待ち部分をカットしています
推論が行われている時間と思われる API の応答待ちは、けっこう待たされた感じでしたが(※ 上記の動画では編集でカットした部分)、レスポンスが返り始めてからのスピード感は良かったです。
あと、出力の最後に改行がないために、以下の矢印で示した部分が出ているため、これをきれいにしたい場合は上記コードの最後に改行用のコード( process.stdout.write("\n");
など)を入れておくと良いです。
お試し3: GPT-5 の新オプションを使う(reasoning.effort)
最後に、以下の記事で書いていた GPT-5 の新オプションを使ってみます。
●【Node.js】 OpenAI公式の情報をもとに「GPT-5 の API」の従来との違いを少し見てみる(reasoning.effort minimal や verbosity の設定) - Qiita
https://qiita.com/youtoy/items/edf41b9b733769b60cc0
指定方法ですが、reasoning.effortオプションのほうの使い方は以下になるようです。
これを先ほどのコードに適用してみます。
import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";
const { textStream } = streamText({
model: openai("gpt-5"),
prompt: "p5.jsのパーティクルのプログラム",
providerOptions: {
openai: {
reasoningEffort: "minimal",
},
},
});
for await (const textPart of textStream) {
process.stdout.write(textPart);
}
process.stdout.write("\n");
reasoningEffort
の指定を、GPT-5 で追加された "minimal"
にしています。
このコードを実行すると、reasoning.effortオプションの指定をしなかった時より、応答までの時間がかなり短縮されました。GPT-5 の reasoning.effortオプションの「minimal」が問題なく適用されているようでした。
お試し3-2: GPT-5 の新オプションを使う(verbosity)
もう1つの新オプション verbosity のほうも、使い方の確認から進めてみます。
どうやら、指定方法は以下となるようでした。
それを組み込んだお試し用のコードは、以下のようにしてみました。
import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";
const { textStream } = streamText({
model: openai("gpt-5"),
// prompt: "空はなぜ青い?",
prompt: "p5.jsのパーティクルのプログラム",
providerOptions: {
openai: {
reasoningEffort: "minimal",
textVerbosity: "low",
},
},
});
for await (const textPart of textStream) {
process.stdout.write(textPart);
}
process.stdout.write("\n");
処理を実行している時の様子の動画(※ 編集なし)
これを実行してみます。実行した時の様子は、以下のとおりで、今回の応答までの時間は短かったので、動画編集は行っていません。
2〜3秒くらいの待ち時間で応答が返ってきました。
指定したオプション 2つが、どちらも応答時間を短くする方向のものだったので、それらが無事に適用されているのではないかと思われます。