o1-previewとo1-miniのAPIが微課金(ソシャゲ感)でも利用できるようになった模様なので試してみます。
コピペして試してもそんなにお金かからないと思いますがお金は注意して試してください。
o1-previewやo1-miniのAPI
前はティアの影響で触れたなかったですが最近はVIP以外でも触れるようになったみたいなので触ってみたいと思います。
確認すると確かにTier1でも利用可能になっています。
o1(preview)やo1-miniは推論が走るのでコスト注意
推論の仕組み上、推論途中のReasoningトークン
と結果の出力のCompletionトークン
を両方組み合わせたmax_completion_tokens
となる模様です。
推論して推論して... って感じでトークン切れで結果出ないなー ってなることもありそうですし、制限かけずに試して思わぬコストかかっちゃうこともありえそうです。
コピペで試してみる
注意をしたところで試してみます。
const { OpenAI } = require("openai");
const openai = new OpenAI({apiKey: `APIキー`});
(async () => {
const prompt = `3*3は?`;
const response = await openai.chat.completions.create({
model: "o1-mini",
max_completion_tokens: 1024,
messages: [
{
role: "user",
content: prompt
},
],
});
console.log(response.choices[0].message);
})();
$ node o1.js
{ role: 'assistant', content: '3×3は9です。', refusal: null }
こんな感じで触れました。
SDKのアップデートで今まで違うところ
o1のAPIを叩くときはmax_tokensだと上手く叩けなく、Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.
とエラーがでました。
max_tokensじゃなくてmax_completion_tokensを使いなさいと怒られます
従来の書き方
const { OpenAI } = require("openai");
const openai = new OpenAI({apiKey: `APIキー`});
(async () => {
const prompt = `3*3は?`;
const response = await openai.chat.completions.create({
model: "gpt-4o", //他の箇所をこのままでo1-mini指定だとエラー
max_tokens: 1024, //ここ
messages: [
{
role: "user",
content: [{ type: "text", text: prompt }], //ここ
},
],
});
console.log(response.choices[0].message);
})();
また、少し前までcontentの指定も配列とオブジェクト指定でしたが、contentに直接文字列指定となった模様です。
OpenAIのSDKですがアップデートが激しくていつから更新されてたのかパッと分からなかったですがo1とo1-miniのAPIに対応するように変わったように思えます。
gpt-4oなどもmax_completion_tokensな書き方で良いぽい
- o1系: max_completion_tokens
- gpt-4oなど: max_tokens
って書き方めんどいからSDK側で吸収してくれって思って試したらすでに吸収してくれていました。
const { OpenAI } = require("openai");
const openai = new OpenAI({apiKey: `APIキー`});
(async () => {
const prompt = `3*3は?`;
const response = await openai.chat.completions.create({
model: "gpt-4o", //o1系の書き方にアップデートしておくとgpt-4o指定でも動作
max_completion_tokens: 1024, //ここ
messages: [
{
role: "user",
content: prompt, //ここ
},
],
});
console.log(response.choices[0].message);
})();
max_completion_tokensが少ないとプロンプトによっては出力が空になってしまう現象
max_completion_tokensを1024にして試してましたが結果が空になってしまう現象がありました。
コードの間違いかと思いましたが仕組みを考えるとそういうことです。
最初は"からあげととり天の違いを考察して"とプロンプトに入れてましたが、おそらく推論中のReasoningトークンのほうで1024トークンを使い切ってしまって出力が何もないという状態ですね。
3*3は?
とシンプルで推論の余地もないプロンプトにして試したら結果まで出力されました。
まとめ
試すときは計画的にしましょう。
少ないトークンで低コストで試すをしたい場合はシンプルな質問にするのが良いと思います。
SDKの指定の仕方は新しい書き方で揃えておくと良さそうですが更新が激しいのでまたしばらくしたら仕様が変わるもありそうですね。OpenAIのAPIやSDKは呼び出し方が結構がっつり変わることもあるので注意が必要ですね。
推論途中の様子はストリーミングAPIとかを使うと取れるのかな(?)