OpenAI のプラットフォームチームでは、プラットフォームをアクティブにご利用いただいている開発者の方々に「OpenAI Dev Digest」というニュースレター(英語)を定期的に配信しています。

先週はかなり多くのリリースがありましたので、ニュースレターでお送りした内容を少しコード例も補足しつつ、日本語でご紹介します。

強力なリーズニングモデル o3 / o4-mini

o3o4-mini という新しいリーズニングモデルを発表しました(米国時間 4/16 発表)。どちらのモデルも ChatGPT、API でご利用いただけます。

o3 はコーディング・数学・科学・画像認識などで非常に高い性能を誇り、特に SWE-Bench Verified のリーダーボードでは 69.1% というトップスコアを達成しています。o4-mini は、より高速でコスト効率の高いリーズニングモデルです。

これらのモデルは Responses / Chat Completions API のどちらでも利用できますが、より豊富な機能を備えた Responses API の利用を推奨しています。

リーズニングサマリー

モデルのリーズニングサマリー(Reasoning summaries)は、Responses API に新しく追加された機能で、モデルの思考プロセス(のサマリー)を API の応答で取得できます。

具体的な動作を理解するために、ドキュメントに掲載されたコード例を実行してみましょう(事前に SDK を最新バージョンに更新してください)。一つ目のコード例は、ドキュメントに掲載されているストリーミングではない実装の例です。

from openai import OpenAI


client = OpenAI()

prompt = """
Write a bash script that takes a matrix represented as a string with 
format '[1,2],[3,4],[5,6]' and prints the transpose in the same format!!
"""

response = client.responses.create(
    model="o4-mini",
    reasoning={
        "effort": "medium",
        "summary": "auto",  
    },
    input=[{"role": "user", "content": prompt}],
)
for item in response.output:
    if hasattr(item, "summary"):
        for summary_item in item.summary:
            print("#------------------------------ ")
            print("# Reasoning summary")
            print("#------------------------------ ")
            print(summary_item.text)
            print()
    if hasattr(item, "content"):
        for content_item in item.content:
            print("#------------------------------ ")
            print("# Content output")
            print("#------------------------------ ")
            print(content_item.text)
            print()

次に、ストリーミングで最終出力より前にリーズニングの過程を出力するコードです。

from openai import OpenAI


client = OpenAI()

prompt = """
Write a bash script that takes a matrix represented as a string with 
format '[1,2],[3,4],[5,6]' and prints the transpose in the same format!!
"""

stream = client.responses.create(
    model="o4-mini",
    reasoning={
        "effort": "medium",
        "summary": "auto",  
    },
    input=[{"role": "user", "content": prompt}],
    stream=True,  
)
for event in stream:
    if event.type == "response.reasoning_summary_text.done":
        print("#------------------------------ ")
        print("# Reasoning summary")
        print("#------------------------------ ")
        print(event.text)
        print()
    if event.type == "response.output_text.done":
        print("#------------------------------ ")
        print("# Content output")
        print("#------------------------------ ")
        print(event.text)
        print()

いずれも実行すると、以下のような出力になります。summary の出力のされ方は実行ごとに変わる可能性があります。

#------------------------------
# Reasoning summary
#------------------------------
**Creating Bash Script for Matrix Transposition**

The user wants a bash script to transpose a matrix given as a string in the format '[1,2],[3,4],[5,6]'. The expected output is '[1,3,5],[2,4,6]', and it's important to consider how to handle the matrix representation. Rows are separated by '],['. I need to strip leading and trailing brackets and potentially wrap the entire input to form valid JSON for processing. I'll think through using tools like `sed` or `awk`, or even consider `jq` for the transpose.

#------------------------------
# Reasoning summary
#------------------------------
**Exploring Matrix Transposition with Bash**

I'm considering how to use `jq` to transpose the input "[[1,2],[3,4],[5,6]]", but since the user prefers pure Bash or `awk`, I'll stick to that. The input is given in the format "[1,2],[3,4],[5,6]". I'll remove brackets and substitute row separators to process the input correctly, storing values in an array. This requires careful handling of indices due to Bash's limitations on multi-dimensional arrays. Using `awk` seems like a more straightforward solution as well.

#------------------------------
# Reasoning summary
#------------------------------
**Finalizing Bash Script for Matrix Transposition**

I'm preparing the complete bash script to transpose a matrix given in the format '[1,2],[3,4],[5,6]'. I'll handle input processing with `awk`, ensuring it strips unnecessary brackets and properly formats the output. I'll be careful with record separators and escaping characters in the script to avoid syntax errors. It's important to test this script for correctness as it should yield output like '[1,3,5],[2,4,6]'. I'll include comments and an example to help ensure clarity for the user.

#------------------------------
# Content output
#------------------------------
Here’s a little Bash wrapper that uses awk to parse the input string and emit the transpose in the same “[...],[...]” style.  Save it as, say, transpose.sh and make it executable.

#!/usr/bin/env bash
# transpose.sh
# Usage: ./transpose.sh '[1,2],[3,4],[5,6]'

(スクリプト例は省略)

Example:

$ chmod +x transpose.sh
$ ./transpose.sh '[1,2],[3,4],[5,6]'
[1,3,5],[2,4,6]

summary パラメーターは "auto" または "detailed" を指定することができます。

Flex Processing (beta)

さらに、Flex Processing(beta)という新たな価格オプションを導入しました。完了までの時間が長くなることや、低可用性であるということの引き換えに、低価格で利用できる仕組みです。ユーザーからのリクエストに同期的に応答するオンラインのユースケースではなく、緊急性の低いバックグラウンド処理、評価タスク、データパイプラインなどの用途に向いたコスト最適化の手法です。

・・と聞くと Batch API を連想される方も多いかと思います。この Flex Processing の価格は Batch API と同等のレートが適用されます。その上で通常の Responses / Chat Completions API を呼び出すコードのままで同等のメリットを得られます。ただし、応答が返ってくるまでの時間はかなり長くなることが想定されますので、アプリケーションの中で利用する際は、その前提で設計する必要があります。

説明を簡単にするために上のコード例をそのまま流用して、この機能を有効にしてみましょう。変更後のコードは以下のようになります。差分はタイムアウト時間を調整していることと API 呼び出しに service_tier="flex" を追加していることだけですね。

import datetime
from openai import OpenAI

print(f"start: {datetime.datetime.now()}")

client = OpenAI(
    
    timeout=900.0
)

prompt = """
Write a bash script that takes a matrix represented as a string with 
format '[1,2],[3,4],[5,6]' and prints the transpose in the same format!!
"""


stream = client.with_options(timeout=900.0).responses.create(
    model="o4-mini",
    reasoning={"effort": "medium","summary": "auto"},
    input=[{"role": "user", "content": prompt}],
    stream=True,
    service_tier="flex",  
)
for event in stream:
    if event.type == "response.reasoning_summary_text.done":
        print("#------------------------------ ")
        print("# Reasoning summary")
        print("#------------------------------ ")
        print(event.text)
        print()
    if event.type == "response.output_text.done":
        print("#------------------------------ ")
        print("# Content output")
        print("#------------------------------ ")
        print(event.text)
        print()

print(f"end: {datetime.datetime.now()}")

実行時間はそのタイミングによって大きく変動しますが、この記事を書きながら手元で何度か動作確認してみた結果としては、大体 1 分半〜 2 分くらいかかっていました(Flex Processing でない場合は、安定的に 30 秒程度かそれ以下で終わる処理です)。

ご覧のようにストリーミングとも併用することができます。これも、全体の進捗をポーリングする形だった Batch API では対応が難しかったユースケースに活用できるポイントかもしれません。

o3 API 利用等に必要となる組織の認証

o4-mini は Tier 1-5 のすべての開発者が利用可能で、o3 の方は Tier 4-5 の開発者向けとなっています。ただし、Tier 1-3 の開発者も組織の認証(API Organization Verification)を完了することで o3 を利用することができます。

その他の機能でも組織の認証が必要となる場合があります。詳しくはヘルプページをご参照ください。

開発者向けモデル GPT-4.1

開発者のユースケースに特化した GPT-4.1GPT-4.1 miniGPT-4.1 nanoAPI で提供開始しました(米国時間 4/14 発表)。

これらのモデルはコーディング、指示に従った処理、関数呼び出しに最適化されています。さらに、最大 100 万トークンという大きなコンテキストを扱うことが可能で、長文や多くのコンテキスト情報を理解する能力も向上しています。

開発用の多くのツールですでに利用可能となっていますので、ぜひ試してみてください。

また、GPT-4.1 をシンプルなチャットボットとしてではなく自律的なエージェントとして活用するためのプロンプト設計ガイドも公開されています。より具体的な詳細を知りたい方は、こちらの Cookbook をご確認ください。

https://cookbook.openai.com/examples/gpt4-1_prompting_guide

この Cookbook の内容を元に私自身が実践した実用例をご紹介します。OpenAI Agents SDK のドキュメントは OpenAI のモデルを使って翻訳しているのですが、この日本語翻訳タスクにおいて、ワークフローの手順を指定するだけで、翻訳結果の文章としての自然さを改善することができました。gpt-4o からの移行時には、この Cookbook を参考にプロンプトを最適化してみてください。

ローカルコーディングエージェント Codex CLI

自然言語で指示をするだけで、ローカルのプロジェクトの開発作業を行うことができる、オープンソースのローカルコーディングエージェント Codex CLI をリリースしました(米国時間 4/16 発表)。

Codex CLI に作成・修正・説明してほしい内容を指示するだけで、OpenAI の各種モデル(o3、o4-mini、GPT-4.1 など)を利用してコード生成を行います。

どのようなツールなのかを知るには、まずは以下のデモをご覧ください!

https://www.youtube.com/watch?v=FUq9qRwrDrI

現時点では英語のみとなりますが、こちらのヘルプページもご参照ください。

Evals API によるモデル評価

今までダッシュボードでのみ利用可能だった Evaluations 機能が、新しくリリースされた Evals API を使ったプログラムからも利用できるようになりました(米国時間 4/8 発表)。

この機能でできることを理解するために、まずは US の Developer Experience のメンバーである Kevin によるダッシュボード UI を使った説明動画を視聴することをおすすめします。

新しい音声モデルと Agents SDK でのネイティブサポート

最先端の音声モデルをAPIで 3 種類リリースしました(米国時間 3/20 発表)。

whisper-1 を超える精度を持つ2種類の音声認識モデル、さらに話し方を指示できる新しいテキスト読み上げ(TTS)モデルを提供しています。

  • speech-to-text モデル
  • text-to-speech モデル

また、Agents SDK でも音声対応を強化しました。VoicePipeline を定義するだけで入出力を音声のままでエージェント処理を実行することができます。詳しくは以下のリソースをご確認ください。

モデル改善への協力で無料トークンを提供

対象の開発者は、プロンプトや処理結果、トレース情報を OpenAI と共有することで、共有したトラフィック分を 4 月末まで無料で利用可能となります。詳しくは、ダッシュボードのこちらのページでご確認ください。

エージェント開発のための実践ガイド

こちらはニュースレターには含まれていなかったのですが、有益な情報なので追記しておきたいと思います。

すでに参照いただいている方も多くいらっしゃるようですが、「A practical guide to building agents」というドキュメントが公開されています。以下のページからアクセス可能です。

https://openai.com/business/guides-and-resources/

現時点では、英語のみとなりますが、エージェント開発の重要なポイントを Agents SDK のコード例を交えて解説しているガイドです。ぜひご一読ください!

以上、先週お届けしたニュースレターの日本語解説でした。今後も重要な情報がニュースレターで配信され次第、日本語での解説を適宜お届けします。

フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link