
3,568 文字

OpenAIが、GPT-4とGPT-4 miniモデルに予測出力(predicted outputs)という機能をリリースしました。この機能により、AIを使った作業の処理速度が大幅に向上しています。この機能の仕組みと、なぜそれがゲームチェンジャーなのか、特にAIを活用したコーディングやコンテンツ制作、あるいは単にワークフローの効率化を目指している方々にとって、どのような意味を持つのか解説していきましょう。
AIを使ってコードの編集やドキュメントの更新を行う場合、通常は最新のモデルでも、トークン(単語やコードの断片)を一つずつ生成する必要があり、時間がかかっていました。しかし、予測出力機能はここで革新的な変化をもたらします。この新機能を使えば、応答の一部を事前に予測して伝えることができます。そうすることで、毎回ゼロから始める必要がなくなり、予測した内容から直接作業を開始できます。生成するトークンが少なくなるため、より早く回答が得られるのです。
では、どれくらい速くなるのでしょうか?OpenAIの初期テストによると、これらの予測を使用したコード編集は、以前と比べて2〜4倍速くなっているとのことです。大きなコードファイルや長文のドキュメントなど、これまで約70秒かかっていた作業が、およそ20秒で完了できるようになりました。つまり、場合によっては処理時間を半分以上削減できるということです。
このアイデアはかなり単純明快です。AIに何かを依頼して、すべてを自力で考え出すのを待つのではなく、出力の一部がどうなるはずかというヒント、つまり予測を与えることができます。例えば、コードの修正をする際、1〜2行を除いてほとんどのコードが同じままである場合、既存のコードを予測として入力し、モデルにその応答の基礎として使用させることができます。モデルはすべてを最初から書き直す必要がなく、ギャップを埋めるだけで済むのです。
この機能はどのような場面で使えるのでしょうか?予測出力が真価を発揮するのは、反復的または予測可能なタスクの場合です。例えば、ブログ記事の更新、スクリプトの一部修正、大規模なデータセットでの細かな変更などです。変更のない部分をAIに再度処理させるのを待つ代わりに、既存の内容を伝えることで、AIは更新部分にのみ集中できます。つまり、全体の応答を考え出す時間を短縮し、必要な部分の提供に時間を費やせるようになるのです。
ただし、重要なポイントとして、予測出力は全く新しいユニークなコンテンツの生成には適していません。モデルが参照できる枠組みがない場合、つまり予測可能な要素なしにゼロから何かを作る場合、予測出力は役に立ちません。この機能は、AIが頼りにできる基準や、反復的な要素、または部分的に既知の内容がある場合に最も効果を発揮します。
OpenAIはこの機能を、Python、JavaScript、Go、C++など複数のプログラミング言語でテストし、それぞれで効果的であることを確認しています。これらの言語を使用する開発者にとっては、大きな時間節約になるでしょう。
ただし、すべてのモデルでこの機能を使用できるわけではありません。予測出力はGPT-4とGPT-4 miniでのみ利用可能で、いくつかの制限があります。まず、他の状況で使用するような高度なAPIパラメータをサポートしていません。複数の出力を同時に呼び出したり、関数呼び出しを使用したり、log_propsで確率を取得したりする場合、この機能は対応していません。OpenAIは、効率を最大限に高めるために、応答がある程度予測可能な制御されたタスクで予測出力を使用することを推奨しています。
例を挙げて詳しく見ていきましょう。TypeScriptでコードのリファクタリングを行う場合を考えてみましょう。usernameというプロパティを持つUserというクラスがあり、そのプロパティをemailに変更する必要があるとします。コードの構造はほぼ完全に同じままなので、既存のコードをGPT-4に予測出力として与えることができます。その変更を促すプロンプトを与えると、必要な部分、つまりその1行だけを更新し、すべてを最初から書き直す必要はありません。
これには興味深い技術的な詳細も関係しています。モデルが予測を処理する際、受け入れたトークンの数と拒否したトークンの数を追跡します。予測と一致するトークンは迅速に処理され、拒否されたトークン(モデルが使用しないもの)は破棄されますが、通常の完了レートで課金されます。つまり、ここには戦略が必要です。予測が正確であれば時間を節約し、トークンを削減できる可能性がありますが、予測が大きく外れた場合は、余分な労力に対しても支払いが発生します。
さらに速度を上げるために、OpenAIはストリーミングでこの機能を使用する方法も導入しました。先ほどのコードリファクタリングの例でストリーミングを使用すると、応答全体の読み込みを待つ代わりに、APIがチャンク単位で送信します。応答の各部分が生成されると、リアルタイムでストリーミングされ、即座に表示したり、その場で処理したりできるため、遅延を最小限に抑えることができます。
この機能の便利な点は、予測テキストが応答内のどこに現れても問題ないということです。コードの一部が最初にあり、新しい追加が真ん中や最後にあっても、すべて考慮されます。AIはそれらの予測を位置に関係なく活用でき、プロセスをさらに加速できます。
例を示しましょう。HanoというライブラリーをJavaScriptで使用している単純なサーバーセットアップがあり、新しいルートを追加したい場合を考えてみましょう。サーバー構造のほとんどが配置されているコードのバージョンをモデルに与えることができます。そして、「Hello World」で応答する新しいルートの追加を依頼すると、ファイルの残りの部分について考える必要がなく、予測から構造を使用して時間を節約しながら、その1行だけを追加できます。
制限については、モデルの制約の他に、現時点では特定の設定が予測出力と互換性がありません。例えば、予測を使用する際にmax_completion_tokensを設定することはできません。また、音声の生成、モダリティの混合、API内での関数呼び出しを計画している場合は、他の方法を探す必要があります。予測出力はこれらの機能をサポートしていません。
もう一つ注意すべき点は、予測が完全に的中しなくても、提供されたすべてのトークンを処理する必要があるということです。予測テキストに100トークンが含まれていても、モデルが20トークンを拒否する場合、完全な100トークンの料金が請求されます。つまり、使用方法を戦略的に考えない限り、時間は節約できても必ずしも費用は節約できないということです。
開発者向けに、OpenAIのドキュメントではこの機能の実装方法についてより詳しく説明されていますが、基本的な考え方を説明しましょう。JavaScriptを使用してTypeScriptクラスをリファクタリングする場合、コードスニペットを予測パラメータとして入力し、チャット完了プロンプトを使用して、usernameプロパティをemailに置き換えるなどの変更を指定します。AIは提供された予測のおかげで、その行だけを更新します。
実用的な応用として、予測出力は反復的なタスクを扱う人々に特に魅力的でしょう。古い投稿を更新するブロガー、コードを調整する開発者、データセット内で小さな調整を行うデータサイエンティストなどです。ブログ投稿のエントリーリストで軽微な更新が必要な場合を想像してみてください。すべてを再生成する代わりに、変更のない部分を事前に入力しておけば、AIは新しい部分だけを追加すれば良いのです。タスクが予測可能であればあるほど、この機能の性能は向上します。
OpenAIは、制御された反復可能なタスクで小規模にテストすることを推奨しています。これにより、機能に慣れながら、どれだけの時間を節約できるかを把握できます。また、予測出力には試行錯誤が必要なため、より単純な予測から始めることで、拒否されたトークンによる追加料金を避けることができるかもしれません。
さて、あなたのワークフローでこの機能を試してみたいと思いますか?具体的な用途が思い浮かびますか?下にあなたの考えを書いてください。そして、この解説が気に入っていただけたなら、さらなるAIの洞察のためにいいねとチャンネル登録をお願いします。ご視聴ありがとうございました。また次回お会いしましょう。
コメント