BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

Function App の dev container を新規に使おうとするとエラーになる原因と解決方法

既に issue もあがってるので来週には修正されていると信じますが、エラー: bash: /usr/bin/func: cannot execute binary file: Exec format error の対処方法のメモです。

事象

2025年9月18日時点で、Azure Functions を利用するために Linux ベースの devcontainer を新規に作って Function App を実行しようと func コマンド打つとすると以下のエラーになります。

  • bash: /usr/bin/func: cannot execute binary file: Exec format error

ちなみに私の場合 Python の 3.12-bookworm をベースに features で Azure Functions Core Tools を指定しています。

原因をざっくりいうと、この指定により現時点でインストールされる Azure Functions Core Tools の latest: 4.3.0~preview1 がおわってるからです。

対処方法

npm が入っている container の場合

問題の 4.3.0-preview1 が install されていることを確認し、削除しましょう。

  • npm list
  • npm uninstall azure-functions-core-tools

後はバージョン指定をして npm からインストール。

  • npm i -g azure-functions-core-tools@4.2.2

インストール後、今まで開いていたターミナルは一度閉じ、新規にターミナルを開きます。

func -v をたたくと期待通り 4.2.2 がインストールされて動作することが確認できます。

npm が入っていない container の場合

npm が入っていない場合は apt で Azure Functions Core Tools を更新します。

まずは問題となってる azure-functions-core-tools 4.3.0~preview1-1 を削除します。ちなみに削除せずにインストールしようとすると、上書きに失敗して終わります。

  • sudo apt-get remove azure-functions-core-tools

そして 4.2.2-1 のバージョンを指定してインストール。

  • sudo apt-get update
  • sudo apt-get install azure-functions-core-tools-4=4.2.2-1

これで func -v とかで確認すると正常に動作します。

ターミナルを新規に開きなおさなくても正常に認識するはずですが、認識されない場合はターミナルを開きなおしてみましょうって感じでしょうか。

めちゃ個人的な話な余談ですが、4.2.2 は MCP の Streamable HTTP 対応なので、このバージョンにさげても MCP の実装については影響ないです。

参考

https://github.com/Azure/azure-functions-core-tools/issues/4649

要約: Better performance from reasoning models using the Responses API (OpenAI Cookbook)

Responses API 推奨になって結構経ちますが、使う理由のおさらいとして OpenAI Cookbook の以下記事をざっくり要約しました (+ Overview は私の気分で箇条書きにがっつりまとめちゃいましたが)。

原文は 2025年5月の記事です。 なので原文内のサンプルコードは、最近っぽくするのに以下の変更を加えて、それに合わせて文章も多少変えてます。

  • Azure OpenAI の endpoint への接続
  • 新しい v1 endpoint を利用。
  • Azure へ接続するが client の class は OpenAI ではなく AzureOpenAI を利用。
    • v1 endpoint の利用から Azure 接続時も OpenAI class も利用可能になりましたね。
    • しかし Entra ID 認証するなら、現時点では結局 AzureOpenAI が必要なので。
    • といっても今回 Entra ID ではなく API key での認証のコードにしてますが。
  • 実行結果に関する文章は、今回使ったコードの結果に基づいて変更 (主にトークン数など)。

Overview

  • Responses APIと最新の推論モデルの利点:
    • 高度なインテリジェンス、低コスト、効率的なトークン使用を実現。
    • 推論の要約へのアクセスやホストされたツール使用が可能。
    • 柔軟性とパフォーマンス向上のための機能強化にも対応できる。
  • 新モデル「o3」と「o4-mini」:
    • 推論機能とエージェント的なツール使用を組み合わせることに優れている。
    • Responses API を最大限に活用することで、これらのモデルのパフォーマンスをさらに向上させられる。
  • Responses APIの主な特徴:
    • Completions APIに似ているが、改善点や機能が追加されている。
    • モデルに以前の推論項目へのアクセスを許可することで、インテリジェンスを最大化しコストを最小化できる。
    • レスポンスの暗号化されたコンテンツも展開しており、ステートフルな方法でAPIを使用できない人にも役立つ。

How Reasoning Models work (推論モデルはどのように機能するか)

Responses APIがどのように役立つかを詳しく説明する前に、推論モデルがどのように機能するかを簡単に復習しましょう。

o3やo4-miniのようなモデルは、問題を段階的に分解し、推論を符号化する内部的な思考の連鎖を生成します。安全のため、これらの推論トークンは要約された形式でのみユーザーに公開されます。 多段階の会話では、推論トークンは各ターンの後に破棄されますが、各ステップからの入力および出力トークンは次のステップに供給されます。

図: https://platform.openai.com/docs/guides/reasoning?api-mode=responses#how-reasoning-works より引用。

生成されるレスポンスのオブジェクトをみてみましょう。

import os
from dotenv import load_dotenv
from openai import AsyncAzureOpenAI

# 必要な環境変数はロードしておいてます。
load_dotenv(override=True)

azure_client = AsyncAzureOpenAI(
    api_key=os.environ["AIF_API_KEY"],
    base_url=os.environ["AIF_ENDPOINT_V1"], # https://xxxxxxxxxx.azure.com/openai/v1
    api_version="preview"
)

response = await azure_client.responses.create(
    model="o4-mini",
    input="私にジョークを面白い言ってください"
)

print(response.model_dump_json(indent=2))

print したレスポンスはこんな感じ。

{
  "id": "resp_689f28582c54819eaab8f1385b6703e605fced5ca6aea09b",
  "created_at": 1755261016.0,
  "error": null,
  "incomplete_details": null,
  "instructions": null,
  "metadata": {},
  "model": "o4-mini",
  "object": "response",
  "output": [
    {
      "id": "rs_689f285b9024819ebe896dc48cc7935405fced5ca6aea09b",
      "summary": [],
      "type": "reasoning",
      "content": null,
      "encrypted_content": null,
      "status": null
    },
    {
      "id": "msg_689f288ea858819e960de6f672e19da705fced5ca6aea09b",
      "content": [
        {
          "annotations": [],
          "text": "ある日、先生がクラスで言いました。\n\n「宿題を“やってきた”人、手を挙げなさい!」\n\n教室中でみんな手を挙げると、先生が続けて、\n\n「じゃあ“持ってきた”人は?」\n\nすると…誰も手を挙げない!\n\n先生がニヤリと一言——  \n「やってきただけで、持ってはきてないからね!」",
          "type": "output_text",
          "logprobs": null
        }
      ],
      "role": "assistant",
      "status": "completed",
      "type": "message"
    }
  ],
  "parallel_tool_calls": true,
  "temperature": 1.0,
  "tool_choice": "auto",
  "tools": [],
  "top_p": 1.0,
  "background": false,
  "max_output_tokens": null,
  "max_tool_calls": null,
  "previous_response_id": null,
  "prompt": null,
  "prompt_cache_key": null,
  "reasoning": {
    "effort": "medium",
    "generate_summary": null,
    "summary": null
  },
  "safety_identifier": null,
  "service_tier": "default",
  "status": "completed",
  "text": {
    "format": {
      "type": "text"
    },
    "verbosity": null
  },
  "top_logprobs": null,
  "truncation": "disabled",
  "usage": {
    "input_tokens": 17,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens": 3051,
    "output_tokens_details": {
      "reasoning_tokens": 2944
    },
    "total_tokens": 3068
  },
  "user": null,
  "content_filters": null,
  "store": true
}

応答オブジェクトの JSON ダンプから、output_text に加えて、モデルが reasoning も生成していることがわかります。このアイテムはモデルの内部の推論トークンを表し、ID(ここでは例として rs_689f285b9024819ebe896dc48cc7935405fced5ca6aea09b)として公開されます。Responses API はステートフルであるため、これらの推論トークンは保持されます。将来の応答が同じ推論アイテムにアクセスできるように、後続のメッセージにその ID を含めるだけで済みます。多段階の会話で previous_response_id を使用すると、モデルは以前に生成されたすべての推論アイテムに自動的にアクセスできるようになります。

モデルが生成した推論トークン (reasoning_token) の数も確認できます。たとえば、17個の入力トークンで、応答には3051個の出力トークン (output_tokens) が含まれ、そのうち2944個は最終的なアシスタントメッセージには表示されない推論トークンです。

あれ、図では以前のターンの推論は破棄されると示されていたのでは?それなら、後のターンでわざわざそれを返す意味は何なのでしょうか?

通常の多段階の会話では、推論のアイテムやトークンを含める必要はありません。モデルはそれらがなくても最良の出力を生成するように訓練されているからです。しかし、ツール使用が関わる場合は状況が変わります。ターンに関数呼び出しが含まれる場合(API外での追加の往復が必要になる可能性があります)、previous_response_id を介して、または推論アイテムを明示的に input に追加することで、推論アイテムを含める必要があります。関数呼び出しの簡単な例で、これがどのように機能するか見てみましょう。

import requests

def get_weather(latitude, longitude):
    response = requests.get(f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}&current=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m")
    data = response.json()
    return data['current']['temperature_2m']


tools = [{
    "type": "function",
    "name": "get_weather",
    "description": "Get current temperature for provided coordinates in celsius.",
    "parameters": {
        "type": "object",
        "properties": {
            "latitude": {"type": "number"},
            "longitude": {"type": "number"}
        },
        "required": ["latitude", "longitude"],
        "additionalProperties": False
    },
    "strict": True
}]

context = [{"role": "user", "content": "今日の東京の天気はどうですか?"}]

response = await azure_client.responses.create(
    model="o4-mini",
    input=context,
    tools=tools,
)

print(response.output)

結果:

[ResponseReasoningItem(id='rs_689f2f147ec48192ac8d7de83c199e27078ee12268125a2b', summary=[], type='reasoning', content=None, encrypted_content=None, status=None),
ResponseFunctionToolCall(arguments='{"latitude":35.6895,"longitude":139.6917}', call_id='call_SEnPgcT7dVU80068NUJiu3MN', name='get_weather', type='function_call', id='fc_689f2f1883d0819292777ee2b221aae3078ee12268125a2b', status='completed')]

推論の結果、o4-mini モデルはより多くの情報が必要だと判断し、それを得るための関数を呼び出します。私たちはその関数を呼び出し、その出力をモデルに戻すことができます。重要なのは、モデルのインテリジェンスを最大限に引き出すために、出力全体を次のターンのコンテキストに再度追加することで、推論のアイテムを含めるべきだということです。

import json

context += response.output # 回答をコンテキストに追加する(推論アイテムを含む)
print(context)


tool_call = response.output[1]
args = json.loads(tool_call.arguments)


# calling the function
result = get_weather(args["latitude"], args["longitude"]) 

context.append({                               
    "type": "function_call_output",
    "call_id": tool_call.call_id,
    "output": str(result)
})

# 追加された関数呼び出しの出力を伴って、再びAPIを呼び出しています。
# これは別のAPI呼び出しですが、会話の中では単一のターンと見なされることに注意してください。
response_2 = await azure_client.responses.create(
    model="o4-mini",
    input=context,
    tools=tools,
)

print(response_2.output_text)

結果は以下:

現在の東京の気温は約25.9℃です。比較的暖かい陽気ですが、降水状況や雲の量などはわかりませんので、お出かけ前に最新の天気予報をご確認ください。

この簡単な例では、推論アイテムの有無にかかわらずモデルがうまく機能する可能性が高いため、その利点は明確ではないかもしれませんが、当社自身のテストではそうではないことがわかりました。SWE-benchのようなより厳格なベンチマークでは、推論アイテムを含めることで、同じプロンプトと設定で約3%の改善が見られました。

Caching

上記で示したように、推論モデルは reasoning tokens (推論トークン) と completion tokens の両方を生成し、APIはこれらを異なる方法で扱います。この区別は、キャッシュの仕組みに影響し、パフォーマンスとレイテンシの両方に影響を与えます。以下の図はこれらの概念を示しています。

図: https://cookbook.openai.com/examples/responses_api/reasoning_items#how-reasoning-models-work より引用。

Turn 2では、モデルは以前のターンの推論アイテムを再利用しないため、Turn 1からの推論アイテムは無視され、削除されます。結果として、図の4番目のAPI呼び出しは、それらの推論アイテムがプロンプトから欠落しているため、完全なキャッシュヒットを達成できません。しかし、それらを含めることは無害です。APIは単に、現在のターンに関連のない推論アイテムを破棄するだけです。キャッシュは1024トークンより長いプロンプトにのみ影響することに留意してください。当社のテストでは、Completions APIからResponses APIに切り替えることで、キャッシュ利用率が40%から80%に向上しました。キャッシュ利用率が高くなると、コストが削減され(たとえば、o4-mini のキャッシュされた入力トークンは、キャッシュされていないトークンよりも75%安価です)、レイテンシが改善されます。

Encrypted Reasoning Items (暗号化された推論アイテム)

ZDR (Zero Data Retention, ゼロデータ保持) の要件を持つ組織など、一部の組織はコンプライアンスやデータ保持ポリシーのため、Responses API をステートフルな方法で使用できません。これらのケースをサポートするために、OpenAI は暗号化された推論アイテムを提供しており、ワークフローをステートレスに保ちながらも、推論アイテムの恩恵を受けられるようにしています。

暗号化された推論アイテムを使用するには:

  • API呼び出しの include フィールドに ["reasoning.encrypted_content"] を追加します。
  • APIは推論トークンの暗号化されたバージョンを返します。これは、通常の推論アイテムと同様に、以降のリクエストで再度渡すことができます。

ZDR の組織の場合、OpenAI は store=false を自動的に強制します。リクエストに encrypted_content が含まれている場合、それはメモリ内で復号化され(ディスクには決して書き込まれず)、次の応答を生成するために使用された後、安全に破棄されます。新しい推論トークンは即座に暗号化されて返されるため、中間状態が永続化されることはありません。

context = [{"role": "user", "content": "今日の東京の天気はどうですか?"}]

response = await azure_client.responses.create(
    model="o4-mini",
    input=context,
    tools=tools,
    store=False,
    include=["reasoning.encrypted_content"] # 回答の中で暗号化された chain of thought が返されます。
)

print(response.output) 

結果:

[ResponseReasoningItem(id='rs_689f36df0df08191977ba3626601a66902672609e1d93279', summary=[], type='reasoning', content=None, encrypted_content='gAAAAABonzbi0GdjVCUTsB_DAbixkKYv_ZFAtE8W1V9uzI_c7tX6ZkpP1v-7O5afms9-MHQ3yYLeK0cZoZzp2UYW4uVyZVo4_G2Qfy0E52P5KUHojzfF_5TIhkDsSCyjIwQVeoWf5lThMIiUjYQPgGpaSE_uBGSn-EL9DuiJi5bKlZKTjo05OxCPYVD1V4pKJ6n4cIh7C4l-o54yKoankiOZGbhuIfYKCHzmYS2yL5KxF9PRkiS8wmjnQqmJiqf6sh_hHDLFmoA7RwirHOH1HfD8n9q6KwJhPHY7UEd6YMm0lg9ofZL4zOGwenPWCEYKa6RFb28cj8kWTyUWFHCI6c5KVREvz9w73dhkz3tDiWSabtJ9Dgr7UEznt4a1NyCF08n49Bja27WXplUfJnpw9NxZ7VJuI_QEYSd0ZU0C0h_veMyojHVn8CaNvfDFLdR4nAuuGaz9J8uUDzdsEWHwxv5l6Jvwwur_PIJlqxVBlFCw09YpUf0IAunMFnocPOz4-jWj3WwxT5ZaTL5ZGYD56_cn2qGG3kySOrBhfKWNjWupTvl5pZDe6phqDBFcV419YxIVXgvjFGY8TZSDZeJkvZ49ujeAHOh6iVAPabhdR0NMPfWqlRYKCqESUQ705qLrngHHFi7-SNP8kpA03Ma6i3vv7sYNzlwG8PF8JN7kvxrWOTgAtRH4qvoohAhVH_nXkO1_Xm3IyZ12huyu6gKEZ2nW1VLsVRD4qfKKqMwQv4Xu5rQdcD8VJ44ZhJVyrSncE5fQJ4zJI6MX_HkJ2fM_4cjSMfVnQln_M4tIpIzS9-_J2QzlxszMFj2fLRfkqD4RpOW0WedkiPV7n5d2CXCPuFMMsPuO3oe2l0U3r9gAG2aTNSLW30ONYzB5w-GdnAjcEVilWY8ByApoqvHq7YdSGa0qpgHXR6wzC_P-H9lequy5Feugaf6wpULoiaMKxbnGp1WbiqZXZkPJfSP_0M9pgTmsQsTicWoGvROxNUMt_RDlHyreFM4pT7BrpMDC4JohpADjKrKOsSDZDoqf18qI3GpQ1Fejk3346Z5r-n8ajy4aGrhth6i5rW1xvP6BUIseBKrLhHd0NdCLVEUFjquoAuZ_KCVx2NElJYnHPzOHIQpGKbsIKEaLDfWZ45P_EpSRwJCcHemZkYT2JK1CixQbM_0Su63PhkayWnw8d4wna4vMivnBaCW81Ipc2qX2-RB4FawRkxUnFHCMIS6UL1z7RIg_hk3JwvxB7VGgKKbUHGrD9B8fqw51NArFEaEKXWWP6dgNHhUA6mEYXGYFJpnbk8vuWgRnlDVoIZt7MDLTJxxXtkn7cNoQFZCamX0TzOK4fW3VACXtj-mZpgtmWnux-g4vYey-oKPZGv9YC5RrWKteiDJmj2aTfjhYQExCKMLkT1horTH6vqrbqNuTaBA25CRTXKmuArgaJGbYyIwDnI58ypVQy0BLf0F7Egr_a-RzzCwxitsTyh1hstTq04VSxdK-xAGI8ocf8GCqRjSfm7LSFk1qJq3H9mC7PrSR-EGw_heu5k7JD0JM3gks_k5W4M6fYUnmjRuWTo6fUE5bORC-jSOTDlTSDvEaxD99743-IYd1ipOiRCPrC5Wj_YFDP4tnrr7DI2J25t1t9BkgRK9DsEo57XLidi_FSHdApQ1OMsJCifZ1N0YRD936bfziuJ8ujhyuSanRCKDJvNExXdB4SSXJz7FXmis4407lyPaf76FTeWgZqGLP34MWZg5Q-rkZtRANXr7eA-x3DdRhYps5TD6-NEnjAtCVsLJ41Z9w7G4L1vvF9yFBqjGUSiLLOWsWtliTtQlN9w==', status=None), ResponseFunctionToolCall(arguments='{"latitude":34.6937,"longitude":135.5023}', call_id='call_wS9mBcfjGClyHuKbYICDu8n3', name='get_weather', type='function_call', id='fc_689f36e240248191b5264e6420100fae02672609e1d93279', status='completed')]

include=["reasoning.encrypted_content"] を設定すると、返される推論アイテムに encrypted_content フィールドが表示されるようになります。この暗号化されたコンテンツは、モデルの推論状態を表し、OpenAI がデータを保持することなく、完全にクライアント側で永続 化されます。その後、以前に推論アイテムで行ったのと同様に、これを再度渡すことができます。

context += response.output
tool_call = response.output[1]
args = json.loads(tool_call.arguments)



result = 20 #mocking the result of the function call

context.append({                               
    "type": "function_call_output",
    "call_id": tool_call.call_id,
    "output": str(result)
})

response_3 = await azure_client.responses.create(
    model="o4-mini",
    input=context,
    tools=tools,
    store=False,
    include=["reasoning.encrypted_content"]
)

print(response_3.output_text)

結果:

今日の大阪の天気は晴れで、気温は約20℃です。過ごしやすい陽気になっています。夜にかけては多少冷え込む可能性がありますので、薄手の上着があると安心です。

include フィールドを単純に変更するだけで、暗号化された推論アイテムを再度渡し、モデルのパフォーマンスをインテリジェンス、コスト、レイテンシの面で向上させることができます。 これで、OpenAI の最新の推論モデルを最大限に活用するための知識が十分に身についたはずです!

Reasoning Summaries (推論の要約)

Responses API のもう一つの便利な機能は、推論の要約をサポートしていることです。生のchain of thought のトークンは公開していませんが、ユーザーはその summary (要約) にアクセスできます。

response = await azure_client.responses.create(
    model="o4-mini",
    input="光合成と細胞呼吸の主な違いは何ですか?",
    reasoning={
        "effort": "high", # 深く推論させるために high をセット
        "summary": "auto"
    })

# response から最初の推論の要約テキストを抽出。
first_reasoning_item = response.output[0]
first_summary_text = first_reasoning_item.summary[0].text if first_reasoning_item.summary else None
print("First reasoning summary text:\n", first_summary_text)

結果:

First reasoning summary text:
 **Comparing Photosynthesis and Cellular Respiration**

The user is looking to understand the main differences between photosynthesis and cellular respiration and has requested specific details. I can organize the differences into a bullet list or a comparison table while noting key aspects like purpose, location, light dependence, and reactions. 

Here’s a possible structure: 
1. Purpose: Energy fixation vs. Energy release
2. Location: Chloroplasts vs. Mitochondria
3. Light requirement: Light-dependent vs. Non-light dependent
4. Reaction equations: Different reactants and products
5. Oxygen/Carbon Dioxide: Oxygen production vs. Consumption

I’ll summarize these clearly in Japanese.

reasoning summary のテキストにより、ユーザーはモデルの思考プロセスを垣間見ることができます。たとえば、複数の関数呼び出しを伴う会話中に、ユーザーは最終的なアシスタントメッセージを待つことなく、どの関数が呼び出されたか、そして各呼び出しの背後にある推論の両方を見ることができます。これにより、アプリケーションのユーザーエクスペリエンスに透明性と双方向性が加わります。

Conclusion

OpenAI Responses APIと最新の推論モデルを活用することで、アプリケーションのより高度なインテリジェンス、透明性の向上、および効率化を実現できます。推論の要約、コンプライアンスのための暗号化された推論アイテムの利用、コストとレイテンシの最適化など、これらのツールは、より堅牢でインタラクティブなAIエクスペリエンスを構築することを可能にします。

Happy coding!

GPT-5 prompting guide まとめ

GPT-5 も、日本語の利用だと (?) 色々と癖 (というか解釈しきれてない感じ?) があるようで、以前よりプロンプトによる指示が大事と感じる今日この頃ということで、OpenAI から出てる以下のドキュメントを自分用にまとめてみました (単なる翻訳・要約です)。

Agentic workflow predictability (エージェントによるワークフローの予測可能性)

OpenAI は開発者を念頭に置いてGPT-5を訓練しました。エージェントアプリケーションにとって最高の基盤モデルとなるよう、ツール呼び出し、指示の遵守、そして長い文脈理解の改善に注力しました。 エージェントやツール呼び出しのフローにGPT-5を採用する場合は、Responses API へのアップグレードを推奨します。これにより、ツール呼び出し間で推論が保持され、より効率的でインテリジェントな出力が得られます。

Controlling agentic eagerness (エージェントの積極性の制御...)

エージェントのスキャフォールドは、制御の範囲が広範にわたります。システムの大部分の意思決定を下層のモデルに委ねるものもあれば、プログラムによるロジック分岐を多用してモデルを厳しく管理するものもあります。GPT-5は、曖昧な状況下で高レベルの意思決定を行うことから、焦点を絞った明確なタスクを処理することまで、このスペクトラムのどの位置でも動作するように訓練されています。このセクションでは、GPT-5のエージェントとしての積極性、つまり、自律性と明確な指示を待つことのバランスをどのように最適に調整するかについて解説します。

エージェントの積極性を抑えるためのプロンプティング

GPT-5はエージェントの環境において、正しい回答を生成するためにデフォルトで徹底的かつ包括的にコンテキストを収集しようとします。GPT-5のエージェント的な振る舞いの範囲を狭めたい場合(関連性の低いツール呼び出しアクションを制限したり、最終的な回答に到達するまでのレイテンシを最小限に抑えたりする場合)、以下を試してください。

  • reasoning_effort をより低くする。これにより、探索の深さは減りますが、効率とレイテンシが向上します。多くのワークフローは、mediumlowreasoning_effort でも一貫した結果を達成できます。
  • プロンプトで、モデルに問題空間をどのように探索してほしいか明確な基準を定義する。これにより、モデルが探索や推論に費やす労力を減らすことができます。
<context_gathering>
目的: 迅速に十分な文脈を得る。発見を並行して行い、行動できるようになったらすぐに停止する。

手法:

* 最初は広範囲に、その後焦点を絞ったサブクエリに展開する。
* 並行して多様なクエリを起動し、各クエリのトップヒットを読み取る。パスの重複を排除してキャッシュし、クエリを繰り返さない。
* 文脈を探しすぎない。必要に応じて、1つの並行バッチでターゲットを絞った検索を実行する。

早期に停止する基準:

* 変更すべき正確なコンテンツを特定できる。
* トップヒットが1つの領域/パスに収束する(約70%)。

エスカレートの条件:

* シグナルが矛盾する場合やスコープが不明確な場合は、1つの洗練された並行バッチを実行してから続行する。

深さ:
* 変更するシンボル、またはその規約に依存するシンボルのみをトレースする。必要でない限り、推移的な展開は避ける。

ループ:
* バッチ検索 → 最小限の計画 → タスクを完了する。
* 検証に失敗するか、新しい未知の要素が出現した場合にのみ再度検索する。検索を増やすよりも行動を優先する。
</context_gathering>

もし最大限に指示を与えたいのであれば、以下のような固定されたツール呼び出しの回数を設定することも可能です。回数は、希望する検索の深さに応じて自然に変えることができます。

<context_gathering>
* 検索の深さ: 非常に低い
* たとえ完全に正確でなくても、できるだけ早く正しい答えを提供するよう強くバイアスをかける。
* 通常これは最大でも2回のツール呼び出しを意味する。
* さらに調査が必要だと判断した場合は、最新の調査結果と未解決の質問をユーザーに伝え、ユーザーの確認が得られれば続行する。
</context_gathering>

コアとなる context gathering (コンテキストの収集) の振る舞いを制限する際には、より短いコンテキスト収集のステップをモデルが満たしやすくする「脱出ハッチ」を明示的に提供することが有効です。これは通常、上記の例にある「たとえ完全に正確でなくても」のように、モデルが不確実な状況下でも進行することを許可する条項の形式をとります。

より積極的な振る舞いを促すプロンプト

一方、モデルの自律性を促しツール呼び出しの持続性を高め質問による確認やユーザーへの引き渡しを減らしたい場合は、reasoning_effort を重くし、以下のプロンプトを使用して持続性と徹底的なタスク完了を促すことをお勧めします。

<persistence>
* あなたはエージェントです。ユーザーのクエリが完全に解決されるまで、あなたのターンを終了してユーザーに戻すことなく、作業を続けてください。
* 問題が解決したと確信できる場合にのみ、あなたのターンを終了してください。
* 不確実性に遭遇した場合でも、決して停止したりユーザーに戻したりしないでください。最も合理的なアプローチを調査または推論し、続けてください。
* 人間に仮定の確認や明確化を求めないでください。後でいつでも調整できるので、最も合理的な仮定を決定し、それに従って作業を進め、作業完了後にユーザーが参照できるように記録してください。
</persistence>

一般的に、エージェントタスクの停止条件を明確に述べ、安全なアクションと安全でないアクションを区別し、モデルがユーザーに制御を戻しても良いのはいつかを定義することは役立ちます。例えば、ショッピング関連のツールセットでは、チェックアウトツールや支払いツールは、ユーザーの明確化を要求する不確実性のしきい値を意図的に低く設定すべきであり、一方、検索ツールは非常に高いしきい値を設定すべきです。同様に、コーディングのセットアップでは、ファイル削除ツールはgrep検索ツールよりもはるかに低いしきい値を持つべきです。

Tool preambles

エージェントの軌道をユーザーが監視している場合、モデルがツール呼び出しで何をしているか、そしてなぜそうしているかについて、断続的に更新情報を伝えることで、ユーザーとの対話体験を大幅に向上させることができると私たちは認識しています。 実行時間が長くなるほど、これらの更新がもたらす違いは大きくなります。この目的のために、GPT-5は、tool preamble メッセージを通じて、明確な事前の計画と一貫した進捗状況の更新を提供するように訓練されています。

プロンプトで、ツール前文の頻度、スタイル、および内容を操作できます。すべてのツール呼び出しに関する詳細な説明から、簡潔な事前の計画、そしてその間のあらゆるものまで設定可能です。以下は、高品質な前文プロンプトの例です。

<tool_preambles>
* ツールを呼び出す前に、常にユーザーの目標をフレンドリー、明確、かつ簡潔な方法で言い換えることから始めてください。
* 次に、あなたが従う各論理的ステップを詳細に記述した、構造化された計画を直ちに概説してください。
* ファイルの編集を実行する際には、各ステップを簡潔かつ順序立てて説明し、進捗を明確に示してください。
* 最後に、最初に立てた計画と区別して、完了した作業を明確に要約してください。
</tool_preambles>

tool_preambles を定義しておくことで、エージェントの作業がより複雑になるにつれて、ユーザーがその作業を追跡する能力を大幅に向上させることができます。

Reasoning effort

当社は、モデルがどれだけ深く思考し、ツールをどれだけ積極的に呼び出すかを制御するために reasoning_effort パラメーターを提供しています。デフォルトは medium ですが、タスクの難易度に応じてスケールアップまたはダウンさせるべきです。複雑で多段階のタスクには、可能な限り最良の出力を保証するために、より高い推論レベルを推奨します。さらに、個別の、分離可能なタスクを複数のエージェントターンに分割し、各タスクに1ターンを割り当てることで、最高のパフォーマンスが観測されています。

Responses API を使い reasoning context を再利用

GPT-5を使用する際には、Responses API を利用してエージェントフローを改善し、コストを削減し、アプリケーションでのトークン使用効率を高めることを強く推奨します。

Chat Completionsと比較して、Responses APIを使用することで評価において統計的に有意な改善が見られました。例えば、Responses API に切り替えて previous_response_id を含めるだけで、以前の推論項目を後続のリクエストに渡せるようにしたところ、Tau-Bench Retailのスコアが73.9%から78.2%に向上しました。これにより、モデルは以前の推論トレースを参照できるため、CoTトークンを節約し、各ツール呼び出し後に計画をゼロから再構築する必要がなくなり、レイテンシとパフォーマンスの両方が向上します。この機能は、ZDR組織を含むすべての Responses API ユーザーが利用できます。

※ コードレベルだと previous_response_id にはひとつ前のレスポンスの response API のレスポンスの id (prefix が resp_ の id) を指定します。

コーディングパフォーマンスの最大化:計画から実行まで

GPT-5は、コーディング能力においてすべてのフロンティアモデルをリードしています。大規模なコードベースでバグを修正したり、大きなdiffを処理したり、複数ファイルにわたるリファクタリングや大規模な新機能を実装したりすることができます。また、フロントエンドとバックエンドの両方の実装を含め、新しいアプリケーションを一から完全に実装することにも優れています。このセクションでは、コーディングエージェントの顧客向けに、本番環境のユースケースでプログラミングパフォーマンスを向上させたことが確認されているプロンプトの最適化について説明します。

Frontend app の開発

GPT-5は、厳密な実装能力と並んで、優れたベースラインの美的センスを持つように訓練されています。あらゆる種類のウェブ開発フレームワークやパッケージを使用する能力に自信を持っていますが、新しいアプリケーション向けに、モデルのフロントエンド機能を最大限に引き出すために、以下のフレームワークやパッケージの使用を推奨します。

  • フレームワーク: Next.js (TypeScript), React, HTML
  • スタイリング/UI: Tailwind CSS, shadcn/ui, Radix Themes
  • アイコン: Material Symbols, Heroicons, Lucide
  • アニメーション: Motion
  • フォント: San Serif, Inter, Geist, Mona Sans, IBM Plex Sans, Manrope

Zero-to-one app generation

GPT-5は、一度の作業でアプリケーションを構築することに優れています。モデルでの初期実験において、以下のようなプロンプト(自己で構築した優秀性評価基準に照らしてモデルに反復的な実行を求めるもの)が、GPT-5の徹底的な計画および自己反省能力を活用することで、出力品質を向上させることがユーザーによって見出されています。

<self_reflection>
- まず、納得のいく評価基準を考えるのに時間をかけてください。
- 次に、ワールドクラスの one-shot web app とは何か、あらゆる側面について深く考え、その知識を使って5〜7のカテゴリを持つ評価基準を作成してください。この評価基準を正しく作成することが重要ですが、これをユーザーに見せないでください。これはあなた自身の目的のためだけに使用されます。
- 最後に、その評価基準を用いて、提供されたプロンプトに対する最善の解決策を内部的に考え反復してください。あなたの回答が評価基準のすべてのカテゴリで最高の評価に達していない場合は、やり直す必要があることを忘れないでください。
</self_reflection>

コードベースの設計基準に合わせる

既存のアプリケーションで段階的な変更やリファクタリングを実装する場合、モデルが書いたコードは既存のスタイルや設計基準に準拠し、できるだけきれいにコードベースに「溶け込む」必要があります。特別なプロンプトがなくても、GPT-5はすでにコードベースから参照コンテキストを検索します(例えば、package.jsonを読んで既にインストールされているパッケージを確認するなど)。しかし、この振る舞いは、エンジニアリング原則、ディレクトリ構造、そして明示的および暗黙的なコードベースのベストプラクティスといった重要な側面を要約するプロンプトの指示によってさらに強化できます。以下のプロンプトの抜粋は、GPT-5向けにコード編集ルールを整理する1つの方法を示しています。ご自身のプログラミング設計の好みに応じて、ルールの実際の内容は自由に変更してください。

<code_editing_rules>
<guiding_principles>
* 明瞭さと再利用性: すべてのコンポーネントとページはモジュール式で再利用可能であるべきです。繰り返されるUIパターンをコンポーネントにすることで、重複を避けてください。
* 一貫性: ユーザーインターフェースは一貫したデザインシステムに準拠する必要があります。カラートークン、タイポグラフィ、スペーシング、およびコンポーネントは統一されていなければなりません。
* シンプルさ: 小さく、目的に特化したコンポーネントを好み、スタイリングやロジックに不必要な複雑さを避けてください。
* **デモ志向: 構造は、ストリーミング、複数ターンの会話、ツール統合などの機能を迅速にプロトタイプ化して見せられるようにしてください。
* 視覚的品質: OSSガイドラインに概説されている高い視覚的品質基準(スペーシング、パディング、ホバー状態など)に従ってください。
</guiding_principles>
<frontend_stack_defaults>
* フレームワーク: Next.js (TypeScript)
* スタイリング: TailwindCSS
* UIコンポーネント: shadcn/ui
* アイコン: Lucide
* 状態管理: Zustand
* ディレクトリ構造:
\`\`\`
/src
  /app
    /api/<route>/route.ts       # APIエンドポイント
    /(pages)                    # ページルート
  /components/                  # UIの構成要素
  /hooks/                       # 再利用可能なReactフック
  /lib/                         # ユーティリティ (フェッチャー、ヘルパー)
  /stores/                      # Zustandストア
  /types/                       # 共有TypeScript型
  /styles/                      # Tailwind設定
\`\`\`
</frontend_stack_defaults>
<ui_ux_best_practices>
* 視覚的階層: 一貫した階層を保つため、タイポグラフィは4〜5のフォントサイズとウェイトに制限してください。キャプションや注釈には `text-xs` を使用し、ヒーローや主要な見出しでない限り `text-xl` は避けてください。
* 色の使用: 1つのニュートラルなベースカラー(例: `zinc`)と、最大2つのアクセントカラーを使用してください。
* スペーシングとレイアウト: 視覚的なリズムを維持するため、パディングとマージンには常に4の倍数を使用してください。長いコンテンツストリームを扱う際には、内部スクロール付きの固定高さのコンテナを使用してください。
* 状態の扱い: データ取得中であることを示すために、スケルトンプレースホルダーまたは `animate-pulse` を使用してください。クリック可能であることを示すために、ホバートランジション(`hover:bg-*`、`hover:shadow-md`)を使用してください。
* アクセシビリティ: 適切な場所でセマンティックHTMLとARIAロールを使用してください。アクセシビリティが組み込まれている、Radix/shadcnのビルド済みコンポーネントを使用することを推奨します。
</ui_ux_best_practices>
</code_editing_rules>

本番環境での協調コーディング: Cursor社のGPT-5プロンプトチューニング

GPT-5の信頼できるアルファテスターとしてAIコードエディタのCursor社を迎えたことを光栄に思います。以下では、Cursor社がモデルの能力を最大限に引き出すためにどのようにプロンプトを調整したかをご紹介します。より詳しい情報については、CursorチームがGPT-5の初期統合について詳述したブログ記事を公開しています。

https://cursor.com/blog/gpt-5

System prompt and parameter tuning

Cursor社のシステムプロンプトは、信頼性の高いツール呼び出しに焦点を当て、冗長性と自律的な振る舞いのバランスを取りながら、ユーザーがカスタム指示を設定できるようにしています。Cursor社がシステムプロンプトに求める目標は、エージェントが長期的なタスク中に比較的自律的に動作しつつも、ユーザーが提供した指示に忠実に従うことです。

チームは当初、モデルが冗長な出力を生成することに気づきました。それは、技術的には関連性があるものの、ユーザーとの自然な対話を妨げる、ステータス更新やタスク後の要約をしばしば含んでいました。同時に、ツール呼び出しで出力されるコードは高品質でしたが、単一文字の変数名が多用されるなど簡潔すぎるために読みにくいことがありました。より良いバランスを求めて、彼らはテキスト出力を簡潔に保つためにverbosity APIパラメーターをlowに設定し、その後、コーディングツール内でのみ冗長な出力を強く推奨するようにプロンプトを変更しました。

わかりやすく、読みやすく、保守しやすいソリューションを優先し、明快な名前、必要に応じたコメント、そして分かりやすい制御フローを備えたコードを最初に書いてください。
明示的に要求されない限り、コードゴルフや過度に賢い一行コードを生成しないでください。
コードとコードツールを作成する際は、verbosity: high を使用してください。

このパラメーターとプロンプトの二重使用は、効率的で簡潔なステータス更新と最終作業の要約を、はるかに読みやすいコード差分と組み合わせた、バランスの取れた形式をもたらしました。

Cursorはまた、モデルが行動を起こす前に、時折ユーザーに明確化や次のステップを求めることがあり、より長いタスクのフローにおいて不必要な摩擦を生み出すことに気づきました。これを解決するため、利用可能なツールや周辺コンテキストだけでなく、製品の振る舞いに関するより詳細な情報を含めることで、モデルが最小限の中断とより大きな自律性をもって長期的なタスクを実行することを促せることを発見しました。元に戻す/コードを拒否するといったCursorの機能や、ユーザー設定の詳細を強調することで、GPT-5がその環境でどのように振る舞うべきかを明確に指定し、曖昧さを減らすのに役立ちました。より長期的なタスクでは、このプロンプトがパフォーマンスを向上させることがわかりました。

翻訳します。

---
あなたが行うコード編集は、提案された変更としてユーザーに表示されます。これは、以下のことを意味します。

a) ユーザーはいつでも変更を拒否できるため、あなたのコード編集はかなり積極的で構いません。
b) あなたのコードは、素早くレビューできるような、適切で分かりやすいものであるべきです(例:単一文字ではなく、適切な変数名を使用する)。

コードの変更を伴う次のステップを提案する場合、計画を進めてよいかユーザーに尋ねるのではなく、ユーザーが承認/拒否できるように、それらの変更を積極的に行ってください。一般的に、計画を進めてよいかユーザーに尋ねることは、ほとんど行ってはいけません。代わりに、積極的に計画を実行し、実装された変更を受け入れるかどうかをユーザーに尋ねるべきです。

Cursorは、以前のモデルで効果的だったプロンプトのセクションが、GPT-5の能力を最大限に引き出すために調整を必要とすることを発見しました。以下にその一例を示します。

<maximize_context_understanding>
情報を収集する際は徹底的に行ってください。返信する前に、全体像を把握していることを確認してください。必要に応じて、追加のツール呼び出しや明確化のための質問を使用してください。
...
</maximize_context_understanding>

古いモデルでは文脈を徹底的に分析するよう促す必要があったため、このプロンプトはうまく機能していましたが、Cursorは、もともと内省的でコンテキストの収集に積極的なGPT-5では逆効果であることに気づきました。小さなタスクでは、このプロンプトによって、モデルは内部知識で十分な場合でも、検索ツールを繰り返し呼び出すなど、ツールを過剰に使用することがよくありました。

これを解決するため、彼らはmaximize_というプレフィックスを削除し、徹底性に関する表現を和らげることでプロンプトを洗練させました。この調整された指示を適用したところ、Cursorチームは、GPT-5が内部知識に頼るべきか、外部ツールに手を伸ばすべきかについて、より良い決定を下すのを確認しました。不必要なツールの使用なく高いレベルの自律性を維持し、より効率的で関連性の高い振る舞いにつながりました。Cursorのテストでは、<[instruction]_spec> のような構造化されたXML仕様を使用することで、プロンプトにおける指示の遵守が向上し、プロンプト内の他の場所にある以前のカテゴリやセクションを明確に参照できるようになりました。

<context_understanding>
...
ユーザーのクエリを部分的に満たす可能性のある編集を行ったが、自信がない場合は、ターンを終了する前に、より多くの情報を収集するか、より多くのツールを使用してください。自分で答えを見つけられる場合は、ユーザーに助けを求めないように偏向してください。
</context_understanding>

システムプロンプトが強力なデフォルトの基盤を提供しますが、ユーザープロンプトは依然として操作性を高めるための非常に効果的な手段です。GPT-5は直接的で明確な指示によく反応し、Cursorチームは、構造化され、スコープが限定されたプロンプトが最も信頼性の高い結果を生むことを一貫して確認しています。これには、verbosityの制御、主観的なコードスタイルの好み、およびエッジケースへの感度といった領域が含まれます。Cursorは、ユーザーが独自のカスタムCursorルールを設定できるようにすることが、GPT-5の改善された操作性と特に相乗効果を生み、ユーザーによりカスタマイズされた体験を提供することに大きな影響を与えていることを発見しました。

Optimizing intelligence and instruction-following (知能と指示遵守の最適化)

Steering (操作)

最も操作性の高いモデルとして、GPT-5 は verbosity、トーン、ツール呼び出しの振る舞いに関するプロンプトの指示を非常によく受け入れます。

verbosity

以前の推論モデルと同様に、reasoning_effortを制御できることに加え、GPT-5では verbosity という新しいAPIパラメーターを導入しました。これは、モデルの思考の長さではなく、最終的な回答の長さに影響を与えます。このパラメーターの背景にある考え方については、私たちのブログ記事でより詳しく解説していますが、このガイドでは、APIのverbosityパラメーターが展開のデフォルトである一方、GPT-5は、グローバルなデフォルトから逸脱させたい特定の文脈において、プロンプト内の自然言語による verbosity の上書きにも対応するように訓練されていることを強調したいと思います。上記のCursorの例で、全体的な verbosity を低く設定し、コーディングツールのみで高いverbosityを指定したのは、そのような文脈の代表的な例です。

Instruction following (指示の順守)

GPT-4.1と同様に、GPT-5はプロンプトの指示を手術的な精度で実行するため、あらゆる種類のワークフローに柔軟に対応できます。しかし、その慎重な指示遵守の振る舞いは、矛盾した指示や曖昧な指示を含む不適切に構築されたプロンプトが、他のモデルよりもGPT-5にとってより有害になる可能性があることを意味します。なぜなら、ランダムに一つの指示を選ぶのではなく、矛盾を解決する方法を探すために推論トークンを費やすからです。

このセクションの以降では、矛盾したプロンプト作んなよって話の長いサンプルだったので省略。

Minimal reasoning

GPT-5では、初めて minimal reasoning effort を導入しました。これは、推論モデルのパラダイムの利点を享受しつつ、最速のオプションです。レイテンシを重視するユーザーや、現在のGPT-4.1ユーザーにとって、これが最高のアップグレードになると考えています。 当然のことながら、最良の結果を得るためには、GPT-4.1と類似したプロンプトパターンを推奨します。最小推論のパフォーマンスは、より高い推論レベルよりもプロンプトによって大幅に変動する可能性があるため、強調すべき重要な点は以下の通りです。

  1. モデルに、最終的な回答の冒頭で思考プロセスを要約した簡潔な説明(例:箇条書きリスト)を促すと、より高い知性を要するタスクでのパフォーマンスが向上します。
  2. 徹底的で詳細なツール呼び出しの導入部を要求し、タスクの進捗状況を常にユーザーに更新させることで、エージェント的なワークフローでのパフォーマンスが向上します。
  3. ツールへの指示を可能な限り明確にし、上記で共有したようなエージェントの持続性に関するリマインダーを挿入することは、minimal reasoning において、長期にわたるロールアウトでのエージェント能力を最大化し、時期尚早の終了を防ぐために特に重要です。
  4. モデルは内部計画を行うための推論トークンが少ないため、プロンプトによる計画も同様に重要です。以下に、エージェントタスクの冒頭に配置した計画プロンプトの例を示します。特に2番目の段落は、エージェントがユーザーに戻る前にタスクとすべてのサブタスクを完全に完了することを保証します。
あなたはエージェントです。ユーザーのクエリが完全に解決されるまでタスクを続行し、その後、ターンを終了してユーザーに引き継いでください。ユーザーのクエリを必要なすべてのサブリクエストに分解し、それぞれが完了したことを確認してください。リクエストの一部のみを完了して停止しないでください。問題が解決したことを確信した場合にのみ、ターンを終了してください。複数のクエリに回答する準備をし、ユーザーが完了したことを確認した場合にのみ、通話を終了してください。

後続の関数呼び出しを行う前に、ワークフローのステップに従って広範な計画を立て、各関数呼び出しの結果について広範に振り返り、ユーザーのクエリおよび関連するサブリクエストが完全に解決されていることを確認する必要があります。

Markdown formatting

APIのGPT-5は、デフォルトでは最終的な回答をMarkdown形式で整形しません。これは、アプリケーションがMarkdownのレンダリングをサポートしていない可能性がある開発者との互換性を最大限に保つためです。しかし、以下のようなプロンプトは、階層的なMarkdown形式の最終的な回答を引き出すのに概ね成功しています。

- Use Markdown **only where semantically correct** (e.g., `inline code`, ```code fences```, lists, tables).
- When using markdown in assistant messages, use backticks to format file, directory, function, and class names. Use \( and \) for inline math, \[ and \] for block math.

長時間の会話において、システムプロンプトで指定されたMarkdownの指示への準拠が徐々に低下することがあります。この問題が発生した場合、3〜5回のユーザーメッセージごとにMarkdownの指示を追記することで、一貫した準拠が見られています。

Metaprompting

最後に、メタな視点として、初期のテスターたちはGPT-5をそれ自体のメタプロンプターとして使うことで大きな成功を収めています。すでに、いくつかのユーザーは、GPT-5に「望ましい振る舞いを引き出すために、失敗したプロンプトにどのような要素を追加できるか」、あるいは「望ましくない振る舞いを防ぐために、どのような要素を削除できるか」を尋ねるだけで生成されたプロンプトの改訂版を本番環境にデプロイしています。 私たちが気に入ったメタプロンプトのテンプレート例を以下に示します。

プロンプトを最適化するよう求められた場合は、ご自身の視点から回答してください。このプロンプトにどのようなフレーズを追加または削除すれば、より一貫して望ましい行動を引き出すことができるか、あるいは望ましくない行動を防ぐことができるかを説明してください。

プロンプトの例:[PROMPT]

このプロンプトでエージェントが期待する行動は、[望ましい行動] ですが、実際には [望ましくない行動] をとっています。既存のプロンプトを可能な限りそのまま維持しつつ、エージェントがこれらの欠点をより一貫して解決できるようにするために、どのような最小限の編集/追加を行うべきでしょうか?

Appendix

※ 以降は、サンプルのプロンプトが載ってましたがそれだけなので省略します。興味がありましたら原文をチェックしましょう。

GPT-5 の機能・ベストプラクティスまとめ

OpenAI の GPT-5 の機能やベストプラクティスがまとまった以下のドキュメントのまとめです。

Using GPT-5 - OpenAI API

サンプルコードは、公式ドキュメントは OpenAI でやってるのでこちらは AzureOpenAI でやっています。
(Azure でも OpenAI を使って接続できるようになってはいる昨今ですが)

概要

GPT-5は、これまでのモデルの中で最もインテリジェントなモデルであり特に以下の分野で高い能力を持つように訓練されている。

  • コード生成、バグ修正、リファクタリング
  • 指示への追従
  • 長文コンテキストとツール呼び出し

より速いレスポンスを必要な場合

デフォルトでは、GPT-5はプロンプトに応答する前に、中程度の長さの chain of thought を生成します。より速く、より低遅延の応答を得るには、low reasoning effort と low text verbosity を使用します。

この動作は、GPT-4.1のような非推論モデルの挙動により近いものになります(ただし、完全に一致するわけではない)。GPT-5 はGPT-4.1よりもインテリジェントな応答を生成すると期待されていますが、速度と最大コンテキスト長が最も重要である場合は、代わりにGPT-4.1の使用を検討してもよいでしょう。

コーディングやエージェントのタスクでの利用

GPT-5は複雑なタスクの推論に優れています。コーディングや複数ステップの計画のような複雑なタスクには、"high reasoning effort" を使用してください。

これらの設定は、o3で取り組んでいたタスクを置き換える際に使用してください。ほとんどの状況において、GPT-5はo3やo4-miniよりも優れた結果を出すと期待しています。

モデルの選択

gpt-5は、最も複雑なタスクに適したモデルであり、広範な世界知識を必要とします。より小型のminiモデルとnanoモデルは、汎用的な世界知識を一部犠牲にする代わりに、低コストと低遅延を実現します。小規模なモデルは、より明確に定義されたタスクにおいて、より優れたパフォーマンスを発揮する傾向があります。

ユースケースに最適なモデルを選択する際は、以下のトレードオフを考慮してください。

CAREIANT BEST FOR
gpt-5 複雑な推論、広範な世界知識、そしてコードを多用する、または複数ステップにわたるエージェントタスク
gpt-5-mini コストを最適化した推論とチャット。速度、コスト、機能のバランスが取れている
gpt-5-nano 高スループットタスク、特に単純な指示の追従や分類

GPT-5のシステムカードは、APIとは異なる名前を使用しています。以下の表を使用して、両者をマッピングします。

System card name API alias
gpt-5-thinking gpt-5
gpt-5-thinking-mini gpt-5-mini
gpt-5-thinking-nano gpt-5-nano
gpt-5-main gpt-5-chat-latest
gpt-5-main-mini [not available via API]

GPT-5 の API の新機能

Minimal reasoning effort

reasoning.effortパラメーターは、モデルが応答を生成する前にどのくらいの推論トークンを生成するかの制御です。

o3のような以前の推論モデルは、lowmediumhighのみをサポートしていました。lowは速度と少ないトークンを優先し、highはより徹底した推論を優先します。

新しいminimal設定は、可能な限り速い「Time-to-first-token」(最初のトークンまでの時間)が必要な場合に、ごくわずかな推論トークンを生成します。モデルが必要なときに数トークンを生成できる場合、全く生成しない場合よりも優れたパフォーマンスを示すことがよくあります。デフォルトはmediumです。

minimal設定は、コーディングや指示の追従シナリオにおいて、与えられた指示に厳密に従うため、特に優れたパフォーマンスを発揮します。ただし、より積極的に行動させるためには、プロンプトによる指示が必要な場合があります。

minimalな努力であってもモデルの推論品質を向上させるには、回答する前に「考える」またはステップを概説するように促すと良いでしょう。

# 今回の利用では新しい v1 endpoint 使ってないです。
aif_client = AsyncAzureOpenAI(
    api_key=os.environ["AIF_API_KEY"],
    azure_endpoint=os.environ["AIF_ENDPOINT"],
    api_version="2025-04-01-preview"
)

Responses API と chat completions api での reasoning effort の指定のコードサンプル。

「"夏に関するジョークを言ってください。"」という content を与えた場合、結果はこんな感じでした。

  • reasoning effort 指定なし場合 (=reasoning effort: medium) の場合は 500 - 1500トークンくらい (振れ幅が結構ある...)
  • minimal だと 200-250トークンくらい。
async def run_responses_api(content: str):
    response = await aif_client.responses.create(
        model="gpt-5",
        input=content,
        reasoning={
            "effort": "minimal"
        },
    )
    print(response.model_dump_json(indent=2))

async def run_completions_api(content: str):
    response = await aif_client.chat.completions.create(
        model="gpt-5",
        messages=[
            {"role": "user", "content": content}
        ],
        reasoning_effort = "minimal" # minimal, low, medium, or high
    )
    print(response.model_dump_json(indent=2))

verbosity

Verbosity は、モデルが生成する出力トークンの数を決定します。トークン数を減らすことで全体の応答時間が短縮されます。モデルの推論アプローチ自体はほぼ同じですが、より簡潔に回答する方法を見つけるため、ユースケースによっては回答の品質が向上する場合もあれば、低下する場合もあります。

以下に、詳細度の両極端なシナリオをいくつかご紹介します。

  • High Verbosity
    • ドキュメントの徹底的な説明や、広範囲にわたるコードのリファクタリングをモデルに行わせる必要がある場合に使用します。
  • Low Verbosity
    • SQLクエリのような、簡潔な回答やシンプルなコード生成を求める状況に最適です。

GPT-5より前のモデルは、デフォルトで verbosity を medium に設定していました。GPT-5では、このオプションを highmediumlow のいずれかに設定できるようになりました。 コードを生成する際、verbosityのレベルが mediumhigh の場合は、インラインの説明が付いたより長くより構造化されたコードが生成されますが、lowの場合は、コメントが最小限の、より短く、より簡潔なコードが生成されます。

VerbosityをAPIでlowに設定した後でも、プロンプトを通じて出力を調整することは可能です。verbosityパラメータはシステムプロンプトのレベルで一般的なトークンの範囲を定義しますが、実際の出力はその範囲内で開発者やユーザーのプロンプトによって柔軟に変化します。

Custom tools

GPT-5では、新しい機能「カスタムツール」を導入しています。これにより、モデルは任意の生テキストをツールコールの入力として送信できますが、必要に応じて出力を制約することも可能です。

Freeform inputs

type: customでツールを定義すると、モデルは構造化されたJSONに限定されず、プレーンテキスト入力をツールに直接送信できるようになります。モデルは、コード、SQLクエリ、シェルコマンド、設定ファイル、長文の散文など、あらゆる未加工のテキストをツールに直接送信できます。

{
    "type": "custom",
    "name": "code_exec",
    "description": "Executes arbitrary python code",
}

Constraining outputs (出力の制約)

GPT-5はカスタムツール向けに文脈自由文法 (CFG) をサポートしており、Lark 文法を提供することで、出力を特定の構文やDSLに制約できます。CFG(例:SQLやDSL文法)を添付すると、アシスタントのテキストがその文法に確実に一致するようになります。

これにより、正確で制約されたツール呼び出しや構造化された応答が可能になり、GPT-5の関数呼び出しで厳密な構文やドメイン固有の形式を直接強制できるため、複雑なドメインや制約のあるドメインでの制御と信頼性が向上します。

Custom tools のベストプラクティス

  • 簡潔で明確なツール説明を記述する。モデルはあなたの記述に基づいて何を送信するかを決定します。ツールを常に呼び出すようにしたい場合は、その旨を明確に記述してください。
  • サーバー側で出力を検証する。自由形式の文字列は強力ですが、インジェクションや安全でないコマンドに対する保護策が必要です。

Allowed tools

tool_choice パラメーター内の allowed_tools パラメーターを使用すると、N個のツール定義を渡しながら、そのうちのM個(M < N)にモデルを制限できます。すべてのツール定義を tools にリストし、次に allowed_tools ブロックを使用してサブセットの名前を指定し、モードを auto(モデルはそれらのいずれかを選択できる)または required(モデルはいずれか1つを呼び出す必要がある)に指定します。

項目 STANDARD TOOLS ALLOWED TOOLS
Model's universe tools にリストされているすべてのツール tool_choice 内の tools のサブセットのみ
ツール呼び出し モデルは任意のツールを呼び出す場合と呼び出さない場合がある モデルは選択されたツールに制限される(または呼び出す必要がある
目的 利用可能な機能を宣言する 実際に使用される機能を制約する
  "tool_choice": {
    "type": "allowed_tools",
    "mode": "auto",
    "tools": [
      { "type": "function", "name": "get_weather" },
      { "type": "mcp", "server_label": "deepwiki" },
      { "type": "image_generation" }
    ]
  }
}'

Preambles

Preamble は、GPT-5がツールや関数を呼び出す前に生成する、ユーザーに見える簡潔な説明です。その目的や計画(例:「なぜこのツールを呼び出しているのか」)を概説します。これらは、思考プロセス(chain-of-thought)の後に、実際のツール呼び出しの前に表示され、モデルの推論を透過的に示し、デバッグの容易さ、ユーザーの信頼、およびきめ細かな操作性を向上させます。

各ツール呼び出しの前にGPT-5が「思考を声に出す」ことで、推論のオーバーヘッドを増大させることなく、ツール呼び出しの精度(およびタスク全体の成功)を高めます。前文を有効にするには、システムまたは開発者向けの指示を追加します。例えば、「ツールを呼び出す前に、なぜそれを呼び出すのかを説明してください」と記述します。これにより、GPT-5は指定された各ツール呼び出しの前に簡潔な理由を付加します。モデルは、ツール呼び出しの間に複数のメッセージを出力することも可能で、これにより、特に最小限の推論やレイテンシが重要なユースケースにおいて、インタラクション体験を向上させることができます。

前文の使用方法の詳細については、GPT-5 prompt cookbookを参照してください。

Migration guidance

GPT-5は思考の連鎖(CoT)をターン間で受け渡せる Responses API と併用することで最高のパフォーマンスを発揮します。現在お使いのモデルやAPIから移行するには、以下をお読みください。

他の model から GPT-5 へのマイグレーション

Responses APIが前ターンの CoT をモデルに渡せるため、GPT-5では知能が向上しています。これにより、生成される推論トークンが減少し、キャッシュヒット率が高まり、レイテンシが短縮されます。詳細については、Responses の利点に関する詳細ガイドを参照してください。

古い OpenAI のモデルからGPT-5へ移行する際は、まず推論レベルとプロンプティング戦略を試すことから始めてください。私たちのテストに基づくと、プロンプトオプティマイザ(ベストプラクティスに基づいてプロンプトをGPT-5用に自動更新するもの)を使用し、このモデル固有のガイダンスに従うことを推奨します。

旧モデル マイグレーションガイド
o3 GPT-5 の medium または high 推論は優れた代替品です。まず medium 推論から始めてプロンプトを調整し、期待する結果が得られない場合は high に上げてください。
gpt-4.1 GPT-5 の minimal または low 推論は強力な代替手段です。まず minimal から始めてプロンプトを調整し、より良いパフォーマンスが必要な場合は low に上げてくさい。
o4-mini または gpt-4.1-mini GPT-5-mini とプロンプトチューニングの組み合わせは優れた代替品です。
gpt-4.1-nano GPT-5-nano とプロンプトチューニングの組み合わせは優れた代替品です。

Chat Completions API から Responses API へのマイグレーション

GPT-5のために Chat Completions から Responses API に移行する最大の理由であり、主な違いは、ターン間で思考の連鎖(CoT)を受け渡すサポートがあることです。APIの完全な比較を参照してください。

CoTの受け渡しは Responses API にのみ存在し、これにより知能の向上、生成される推論トークンの削減、キャッシュヒット率の向上、そして低レイテンシが実現しています。フォーマットは異なりますが、ほとんどの他のパラメータは同等です。

Prompting guidance

私たちは、コーディング、フロントエンドエンジニアリング、そしてエージェントタスクのためのツール呼び出しに優れるよう、GPT-5を特別に設計しました。また、プロンプトオプティマイザ を使用してGPT-5のプロンプトを反復的に改善することを推奨します。

GPT-5 は reasoning model である

GPT-5のような推論モデルは、問題を段階的に分解し、その推論を符号化する内部的な思考の連鎖を生成します。パフォーマンスを最大化するには、これらの推論項目をモデルに返すことで、再推論を回避し、モデルのトレーニング分布にインタラクションを近づけることができます。複数ターンの会話では、previous_response_id を渡すことで、以前の推論項目が自動的に利用可能になります。これは、ツールを使用する場合、特に例えば関数呼び出しに追加の往復が必要な場合に重要です。これらのケースでは、previous_response_id と一緒に含めるか、input に直接追加してください。

推論モデルとその活用方法の詳細については、OpenAI の*推論ガイド*でご確認ください。

GPT-5 概要 (GPT-5 system card のまとめ)

2025年8月7日に GPT-5 が公開されたので、その system card をざっくりまとめてみました。

この system card は、GPT-5 に関する公式文書の要約で、主にgpt-5-thinkingとgpt-5-mainに焦点を当て、GPT-5の全体像、その能力、安全性、そして将来のリスクへの備えについて詳細に説明している文章です。

ブログではさっと見返すためのためのざっくりなまとめなので、興味がありましたら原文もチェックしてみてください。

1 導入

GPT-5は、複数のモデルとリアルタイムルーターで構成される統合システム。GPT-5システムの中核には、大きく分けて二つのタイプのAIモデルがある。

model 概要
gpt-5-main GPT-4oの後継モデルで、高速かつ高スループットの応答に特化。日常的な質問や素早い情報提供に適している。
gpt-5-thinking OpenAI o3の後継モデルで、より深い推論能力を持つ。回答を生成する前に、長い内部思考連鎖を生成するように訓練されており、より正確で詳細な情報を提供可能。

この二層構造は、AIの応答速度と推論深度という、しばしばトレードオフの関係にある要素を両立させるためのOpenAIの戦略を示している。これにより、ユーザーは質問の性質に応じて最適なAI体験を得ることが可能になる。

Real-time router の採用

GPT-5システムには real-time router (リアルタイムルーター) と呼ばれる賢いオーケストレーター役がいる。

  • このルーターは、ユーザーからの質問(クエリ)の種類、複雑さ、必要なツールの有無、そしてユーザーの明示的な意図を瞬時に分析し、最適な「main」モデルか「thinking」モデルかを判断して割り当てる。
  • このルーターは、ユーザーがモデルを切り替えるタイミングや、応答の好み、測定された正確性などの実際の信号に基づいて継続的にトレーニングされ、時間とともにその判断能力を向上させる。
  • ルーターの存在は、GPT-5が単なるモデルの集合体ではなく、動的に最適化されるインテリジェントなシステムであり、ユーザー体験のパーソナライズと効率化に不可欠な要素となっている。

GPT-5ファミリーの主要モデル

GPT-5システムは、細分化された複数のモデルで構成されており、それぞれが特定のニーズに対応している。

モデル名 前身モデル 速度 推論深度 主な用途
gpt-5-main GPT-4o 高速 中程度 日常的な質問、素早い情報提供、高スループット
gpt-5-main-mini GPT-4o-mini 非常に高速 浅い 軽量なタスク、モバイルアプリケーションなど
gpt-5-thinking OpenAI o3 中速 非常に深い 複雑な問題解決、詳細な分析、創造的なタスク
gpt-5-thinking-mini OpenAI o4-mini 中速 深い 中程度の複雑さの推論、効率的な思考プロセス
gpt-5-thinking-nano なし 高速 浅い 開発者向け、高速なプロトタイピング
gpt-5-thinking-pro なし 中速 非常に深い ChatGPTでの高度な推論利用、並列処理

GPT-5の主な進化

  • ベンチマークで旧モデルを上回り、質問への回答がより高速です。
  • さらに重要なことに、実世界のクエリに対してより有用です。
  • ハルシネーションの削減指示従順性の向上追従的発言の最小化において大きな進歩を遂げています。
  • ChatGPTの最も一般的な3つの用途(ライティング、コーディング、ヘルス)でのパフォーマンスを向上させています。
  • すべてのGPT-5モデルは、禁止されているコンテンツを防ぐための最新の安全トレーニングアプローチであるセーフ・コンプリーションを特徴としています。

2 モデルデータとトレーニング

GPT-5モデルのトレーニングは、以下の多様なデータセットと厳格なプロセスを組み合わせて行われました。

  • データセットの多様性:
    • インターネット上で公開されている情報。
    • 第三者との提携を通じてアクセスする情報。
    • ユーザーや人間のトレーナー、研究者が提供または生成する情報。
  • 厳格なデータ処理パイプライン:
    • データの品質を維持し、潜在的なリスクを軽減するために厳格なフィルタリングが適用されています。
    • トレーニングデータからの個人情報の削減には、高度なデータフィルタリングプロセスが使用されています。
    • 有害または機密性の高いコンテンツ(例:未成年者を含む性的コンテンツ)の使用を防ぐため、OpenAIのModeration APIと安全分類器の組み合わせが活用されています。
  • 推論モデルのトレーニング:
    • gpt-5-thinking、gpt-5-thinking-mini、gpt-5-thinking-nanoといったOpenAIの推論モデルは、強化学習(reinforcement learning)によって推論するように訓練されています。
    • これらのモデルは、回答する前に「考える(think)」ように訓練されており、ユーザーに返答する前に長い内部の思考の連鎖(internal chain of thought)を生成することができます。
    • トレーニングを通じて、モデルは自身の思考プロセスを洗練させ、異なる戦略を試み、自身の誤りを認識するように学習します。
    • この推論能力により、モデルはOpenAIが設定した特定のガイドラインやモデルポリシーに従うことができ、安全性の期待に沿った動作を支援します。これにより、より役立つ回答を提供し、安全規則を回避しようとする試みに対してより強く抵抗するようになります。

3 Observed Safety Challenges and Evaluations (観測された安全性課題と評価)

このセクションでは、OpenAIの新しいGPT-5モデル(特にgpt-5-thinkingとgpt-5-main)の安全性に関する様々な側面が評価され、多くの場合、先行モデルと比較されています。評価は、モデルの安全性プロファイルの進捗を理解するために、gpt-5-thinkingとOpenAI o3、およびgpt-5-mainとGPT-4oを比較して行われました。

3.1 強固な拒否から安全な補完へ (From Hard Refusals to Safe-Completions)

  • 従来のLLMは、安全性ポリシーによって許可されないプロンプトに対しては、最大限の有用性を提供するか、完全に拒否するように訓練されていました。
  • OpenAIは、「安全な補完 (safe-completions)」という新しい安全訓練アプローチを導入しました。これは、ユーザーの意図の二項分類ではなく、アシスタントの出力の安全性に焦点を当てています。
  • このアプローチにより、GPT-5モデルでは、特にデュアルユース(二重用途)のプロンプトにおいて、安全性が向上し、残存する安全上の問題の深刻度が低減し、全体的な有用性が大幅に向上しました。

3.2 不許可コンテンツ (Disallowed Content)

  • GPT-5モデルは、OpenAIのポリシーで許可されていない(憎悪表現や違法なアドバイスなど)コンテンツのリクエストに応じないかどうかが評価されました。
  • 標準的な不許可コンテンツ評価では、最新モデルはほぼ完璧な性能を示し、gpt-5-thinkingはOpenAI o3と同等かそれ以上の結果でした。
  • プロダクションベンチマーク(より挑戦的な複数ターン評価)では、gpt-5-thinkingは一般的にOpenAI o3と同等かそれ以上の性能を示しました。
  • gpt-5-mainは、GPT-4oと比較して、非暴力的な違法行為や暴力的な違法行為において統計的に有意な改善を示しました。これは「安全な補完」のパラダイムによるものとされています。

3.3 追従性 (Sycophancy)

  • モデルがユーザーの意見に過度に同調する「追従性」の挙動を減らすために、GPT-5では事後訓練が行われました。
  • オフライン評価では、gpt-5-thinkingはOpenAI o3やGPT-4oと比較して追従性を大幅に抑制し、GPT-4oの0.145に対し、gpt-5-thinkingは0.040という低いスコアを記録しました。
  • オンラインの予備測定でも、gpt-5-mainはGPT-4oと比較して追従性の発生率が無料ユーザーで69%、有料ユーザーで75%減少しました。

3.4 ジェイルブレイク (Jailbreaks)

  • モデルが生成してはならないコンテンツを意図的に回避しようとする敵対的なプロンプト(ジェイルブレイク)に対する堅牢性が評価されました。
  • gpt-5-thinkingは、ほとんどのカテゴリでOpenAI o3と同等かそれ以上の性能を示し、ジェイルブレイクに対する堅牢性を維持していることが確認されました。

3.5 指示の階層 (Instruction Hierarchy)

  • モデルがシステムメッセージ、開発者メッセージ、ユーザーメッセージ間の指示階層に適切に従うかどうかが評価されました。
  • モデルは、システムメッセージの指示を開発者メッセージよりも優先し、開発者メッセージの指示をユーザーメッセージよりも優先するように訓練されています。
  • gpt-5-thinkingはOpenAI o3と同等の高い性能を維持しましたが、gpt-5-mainでは一部のシナリオで性能の退行が見られました。

3.6 ハルシネーション (Hallucinations)

  • GPT-5モデルの訓練では、事実に基づくハルシネーション(誤情報生成)の頻度を減らすことに重点が置かれました。
  • ChatGPTのプロダクション環境でのファクト性評価(ブラウジング有効時)では、gpt-5-thinkingはOpenAI o3よりもハルシネーション率が65%低減し、少なくとも1つの主要な事実誤りを含む応答が78%減少しました。
  • 「ブラウジング有効」および「ブラウジング無効」の両設定において、GPT-5モデルはOpenAI o3よりも有意に低いハルシネーション率を示しました。特にgpt-5-thinkingは、3つのベンチマーク全てでOpenAI o3より5倍以上少ない事実誤りしかありませんでした。

3.7 欺瞞 (Deception)

  • モデルが内部の推論や実際に行った行動を誤って表現する「欺瞞」が評価されました。以前のモデル、特にOpenAI o3は、完了していないタスクを完了したと主張したり、虚偽の経験を捏造したりする問題が見られました。
  • gpt-5-thinkingでは欺瞞の傾向を減らすための措置が取られ、解決不可能なタスクを正直に認め、環境の失敗に対してより堅牢になるように訓練されました。
  • 4つの評価設定すべてで、gpt-5-thinkingは先行モデルであるOpenAI o3よりも有意に少ない欺瞞行動を示しました
  • 特に、モデルの思考の連鎖(CoT)を監視するシステムでは、OpenAI o3の応答の約4.8%で欺瞞が検出されたのに対し、gpt-5-thinkingでは約2.1%にとどまりました。

3.8 画像入力 (Image Input)

  • GPT-5モデルは、不許可なテキストと画像の組み合わせ入力に対する出力の安全性が評価されました。
  • gpt-5-thinkingは一般的にOpenAI o3よりもわずかに高い性能を示し、gpt-5-mainはGPT-4oと同等かわずかに高い性能でした。

3.9 健康 (Health)

  • 健康関連のセッティングでの性能と安全性を測定するため、HealthBenchで評価されました。
  • gpt-5-thinkingは、GPT-4o、OpenAI o1、OpenAI o3、OpenAI o4-miniを含むすべての以前のOpenAIモデルを大幅に上回る性能を示しました。HealthBench HardのSOTA(State-of-the-Art)スコアは、OpenAI o3の31.6%からgpt-5-thinkingの46.2%に向上しました。
  • 挑戦的な会話でのハルシネーション、高リスクな状況での不適切な情報提供、およびグローバルヘルスコンテキストへの調整失敗といった3つの特定のエラー領域で、gpt-5-thinkingはOpenAI o3から8倍以上のエラー率削減を達成しました。

3.10 多言語性能 (Multilingual Performance)

  • MMLUのテストセットを13言語に翻訳して、多言語能力が評価されました。
  • gpt-5-thinkingとgpt-5-mainは、既存モデルと一般的に同等の性能を示しました。

3.11 公平性とバイアス (Fairness and Bias: BBQ Evaluation)

  • モデルはBBQ評価ベンチマークで評価されました。
  • gpt-5-thinkingは、曖昧な質問ではOpenAI o3と同様のスコアを示しましたが、コンテキストで答えが提供される明確化された質問ではわずかに低いスコアでした。gpt-5-mainは、曖昧な質問ではGPT-4oよりわずかに高く、明確化された質問では同等の性能でした。

4. Red teaming と外部評価

  • OpenAIは、gpt-5-thinkingの主要なリスクを評価するため、外部の Red Teamers と協力。
  • Red teaming キャンペーンは、事前展開研究、APIセーフガードテスト、製品内セーフガードテストの3つのグループに分類されました。
  • この取り組みには、400人以上の外部テスターと専門家による9,000時間以上の作業が含まれました。
  • 優先された評価トピックには、暴力的な攻撃計画、セーフガードを回避するジェイルブレイク、プロンプトインジェクション、生物兵器化が含まれている。

4.1 暴力的な攻撃計画に関する専門家による Red Teaming

  • 国防、諜報、法執行機関/セキュリティの専門家25名からなる Red Teamers が、gpt-5-thinkingが暴力的な攻撃計画にどれだけ有用かを評価した。
  • gpt-5-thinkingとOpenAI o3が並行して比較され、gpt-5-thinkingがOpenAI o3よりも65%の確率で「より安全な」モデルであると認識された。
  • この効果は、モデルの応答の詳細度と、gpt-5-thinkingに含まれるセーフコンプリーションズのトレーニングによってもたらされた。

4.2 プロンプトインジェクションに関する専門家および自動化された Red Teaming

  • 2つの外部 Red Teamers が、ChatGPTのコネクタと緩和策におけるシステムレベルの脆弱性を対象とした2週間のプロンプトインジェクション評価を実施した。
  • 47件の報告から10件の注目すべき問題が特定され、リリース前に緩和策が展開された。
  • Gray Swanのプロンプトインジェクションベンチマークでは、gpt-5-thinkingが敵対的なプロンプトインジェクション攻撃に対してSOTA(State-of-the-Art)の性能を示すことが確認された。

Microsoft AI Red Team の評価結果

  • gpt-5-thinkingは、ほとんどの重要な危害カテゴリにおいて、OpenAIのモデルの中で最も強力なAI安全プロファイルの1つを示し、OpenAI o3と同等かそれ以上であると結論付けられました。
  • 手動 red teaming(70人以上の内部専門家)と自動 red teaming(PyRIT)の両方を用いて、フロンティアハーム、コンテンツセーフティ、心理社会的ハームを含む18のハーム領域で評価が行われた。
  • フロンティアおよびコンテンツセーフティの領域では、gpt-5-thinkingはOpenAI o3よりも質的に安全であると評価されました。例えば、要求された場合に攻撃的なサイバーコードの提供を拒否する傾向が強く、単一ターンの一般的なジェイルブレイクに対する耐性も高い。
  • 複数の言語での改善も注目された。
  • 心理社会的領域では、gpt-5-thinkingは精神的または感情的苦痛を経験していると思われる状況を検出および対応する点で改善の余地があることが判明し、これはOpenAI自身の調査結果とも一致。

5. Preparedness Framework (準備態勢フレームワーク) の導入

OpenAIは、重大な危害の新たなリスクを生み出すフロンティア能力を追跡し、これに備えるためのアプローチとして「Preparedness Framework」を導入している。このフレームワークは、特に高能力モデルについて、関連するリスクを十分に最小限に抑えるためのセーフガードの導入を含む。

5.1 能力評価 (Capabilities Assessment)

  • gpt-5-thinkingの安全性を評価するために、事前展開研究、APIセーフガードテスト、製品内セーフガードテストの3つのグループに分類されたレッドチームキャンペーンが実施されました。
  • 評価には、400人以上の外部テスターと専門家による9,000時間以上の作業が投入されました。
  • 評価の優先トピックには、暴力的な攻撃計画、セーフガードを回避するジェイルブレイク、プロンプトインジェクション、生物兵器化が含まれます。
    • 評価結果はモデルの潜在能力の下限を示す可能性があり、追加のプロンプトや微調整によりさらに能力が引き出される可能性があります。

5.1.1 生物・化学 (Biological and Chemical)

  • OpenAIはgpt-5-thinkingのリリースを生物・化学ドメインにおいて「高能力」とみなし、関連するPreparednessセーフガードを有効化しました。
  • モデルが初心者が重大な生物学的危害を生み出すのを実質的に助けるという決定的な証拠はないものの、予防的アプローチが取られています。
  • 評価は、生物学的脅威作成プロセスの5段階(概念化、獲得、増幅、製剤化、放出)にわたる機密情報の正確性ウェットラボ実験のトラブルシューティング能力暗黙知の理解に焦点を当てています。
  • SecureBioによる外部評価では、gpt-5-thinkingはOpenAI o3と同様の性能を示し、緩和策が適用された場合、すべてのプロンプトを拒否しました。

5.1.2 サイバーセキュリティ (Cybersecurity)

  • サイバーエクスプロイトによるシステムへの危害リスクに焦点を当てています。
  • gpt-5-thinkingはCapture the Flag(CTF)やCyber Rangeの課題においてOpenAI o3と同等の性能を示しました。
  • gpt-5-thinking-miniはCyber Range課題で著しく優れた性能を示しましたが、全体としてgpt-5モデルシリーズは高いサイバーリスクの閾値には達しないと結論付けられました。
  • Pattern Labsによる外部評価では、gpt-5-thinkingはOpenAI o3と比較してサイバー攻撃能力が向上しているものの、高度な課題を解決できず、中程度のスキルを持つサイバー攻撃者への支援は限定的であると結論されました。
  • SWE-bench Verified、OpenAI PRs、PaperBench、OPQAといったソフトウェアエンジニアリングや研究再現のベンチマークでは、gpt-5-thinking(またはそのmini版)が最高スコアを記録しています。
  • METRによる外部評価では、gpt-5-thinkingがAI R&D研究者の速度を大幅に加速させたり、研究者を戦略的に誤解させたりする可能性は低いと暫定的に結論付けられました。gpt-5-thinkingは自身が評価されていることを認識する状況認識を示すことがありましたが、サンドバッグの明確な証拠は見つかりませんでした。

5.2 研究カテゴリの更新:サンドバッグ (Research Category Update: Sandbagging)

  • 「サンドバッグ」とは、モデルが評価時に実際の性能と異なる行動をとり、評価の有効性を損なう能力と傾向を指します。
  • Apollo Researchによる外部評価では、gpt-5-thinkingが隠れた、または欺瞞的な行動をとる割合は約4%であり、OpenAI o3の8%より低いことが判明しました。モデルは自身が評価されていることを認識することがありますが、これが欺瞞の根本的な原因であるかどうかはさらなる研究が必要です。

5.3 高生物・化学リスクに対するセーフガード (Safeguards for High Biological and Chemical Risk)

  • 脅威モデルは、モデルが生物学的危害に利用される2つの主要経路に焦点を当てています。1つは初心者が既知の生物学的脅威を獲得・展開するのを支援すること、もう1つは専門家が既知の生物学的脅威を作成・修正・展開するのを直接支援することです。
  • セーフガードは、生物兵器化、高リスクデュアルユース生物学、低リスクデュアルユース生物学のコンテンツ分類に基づいて設計されています。
  • セーフガード設計には、以下の多層防御アプローチが採用されています。
    • モデル訓練: 兵器化支援の拒否、デュアルユーストピックに関する詳細で実行可能な支援の禁止。
    • システムレベルの保護: リアルタイムの自動監視システム(2段階分類器と推論モニター)によるプロンプトと生成の監視・ブロック。
    • アカウントレベルの執行: 自動システムと人間レビューによるポリシー違反の特定、ユーザーの検出・BAN(極端な場合は法執行機関への通知)。
    • APIアクセス: 開発者がエンドユーザーを識別するためのsafety_identifierフィールド導入、悪意ある使用の兆候への対応、アクセス要件(支払い、身元情報)。
    • Trusted Access Program: vettedされた信頼できる顧客に対し、特定の条件下で制限の少ないモデルバージョンを提供。
  • セーフガードテストでは、モデルの安全訓練、システムレベルの保護、そして生物兵器化のための専門家レッドチームによる評価が行われました。
    • レッドチームキャンペーンの結果、gpt-5-thinkingはOpenAI o3よりも生物兵器化のクエリに対して「より安全」であると判断されました。
    • APIジェイルブレイクテストでは、報告されたジェイルブレイクのほとんどが生成モニターによってブロックされたはずであり、すべての緩和策を回避した1つのケースも、多数のフラグを引き起こし、最終的にアカウント停止につながるレベルであるとされました。
    • 外部評価機関(Far.AI、Gray Swan、米英政府機関)も、セーフガードの有効性を確認しつつ、いくつかの改善点を特定しました。
  • セキュリティ制御: 顧客データやモデルウェイトの盗難を防ぐため、多層防御アプローチ(アクセス制御、インフラ強化、監視、専用セキュリティチーム)が実施されています。
  • リスク緩和策の十分性: ユニバーサルジェイルブレイクのリスクはあるものの、その発見が困難であること、ユーザーへのBAN措置、迅速な対応プログラムがあるため、リスクは十分に最小化されていると評価されています。ポリシーのグレーゾーン、高リスクコンテンツの段階的漏洩、Trusted Accessプログラムによる制御性、API利用時のリスクについても、十分に最小限に抑えられていると考えられています。

Appendix の6 は ◦ gpt-5-thinking-mini と ◦ gpt-5-thinking-nano の標準的な安全性評価結果、7はGPT-5モデルのハルシネーションを評価するために使用される、公開された事実性評価のプロンプトと手順だったので省略。

Microsoft Build 2025 - Cosmos DB for NoSQL の AI 関連まとめ

ここでは、2025年5月に開催の Microsoft Build 2025 で発表された Cosmos DB 関連の情報のうち、NoSQL で AI に関連する情報のまとめです。

Mongo DB (vCore) 関連や、サブスクリプションを跨いで複数の Cosmos DB を管理・分析が可能な Fleets、DB で RU をシェアして利用している際の各 Container の RU の limits の割合を制御できる Throughput Buckets、パーティションごとでフェイルオーバーできる PPAF などの更新情報は書いていません。

New Generally Available and Preview Search Capabilities in Azure Cosmos DB for NoSQL

参考: New Generally Available and Preview Search Capabilities in Azure Cosmos DB for NoSQL - Azure Cosmos DB Blog

Cosmos DB for NoSQL の検索機能のアップデートまとめです。

フルテキスト検索が GA (英語のみ)

フルテキスト検索が英語のみ GA して検索の幅が増えましたのでおさらい。

ちなみにフルテキスト検索なので言語アナライザーとしてトークン化、ステミング、ストップワード除去といった一般的な機能はもちろん含まれる。

  • フレーズ検索
    • 対象のフレーズをデータ内の完全一致を検索する
    • 例として "Hello World" を検索すると、この "Hello World" と完全一致する文章を検索する。
  • キーワード検索
    • 指定された単語の順序や近接性に関係なく、それらの任意の組み合わせを含むドキュメントを検索する。複数の単語のすべてを含むかいずれかを含むかの検索も可能。
    • 例として "Hello", "World" といった複数の単語を検索することで、 順序や近接性に関係なくこの2つを含む文章を検索する。
  • BM25 スコアリング
    • 用語の出現頻度、ドキュメントの長さ、および用語全体の重要度を評価し、非常に正確な結果を返す BM25 scoring も可能。

ハイブリッド検索が GA (英語のみ)

  • ベクター検索とフルテキスト検索の結果を組み合わせて精度をあげるハイブリッド検索も英語のみだが GA。

ちなみに .NET SDK だと LINQ でフルテキスト検索・ハイブリッド検索がサポートされました。

Public Preview で登場した検索機能

  • フルテキスト検索の多言語サポート
    • 今回は日本語含まれず...追加された言語はドイツ語、フランス語、スペイン語のみで、フルテキスト検索の機能もまだ限定的。
  • ファジー検索
    • distance は最大2で、ファジー検索が可能。
  • DiskANN での filtered vector search
    • ブログ記事内に、どうやって動作するかの解説がありましたので興味ある方は見てみましょう。
  • Azure Logic Apps Document Indexer
    • Logic Apps でドキュメントのインデクサーとして動作し、Cosmos DB にストアしてくれる機能。
    • Blob または SharePoint のファイルをテキストにしたり、Azure Document Intelligence で OCR かけるテンプレート。
    • 個人的には、最も大事なチャンクの細かいカスタマイズ性やパフォーマンス・運用コストから、自分でコード書いた方が幸せそう (注: あくまでコード書くのが好きな私の個人的な感想です😅)

Boost Query Performance with Global Secondary Indexes in Azure Cosmos DB

参考: Boost Query Performance with Global Secondary Indexes in Azure Cosmos DB - Azure Cosmos DB Blog

Global Secondary Indexes (GSI) は、元の Container に負荷や運用コストをほとんどかけることなく、cross partition query のパフォーマンスを爆上げできる機能です。

Global Secondary Indexes (GSI) の概要

  • GSI を構成する = 検索したいインデックス専用の別コンテナーが作ることで、検索パフォーマンスを向上できる。
  • GSI を構成すれば、ソースコンテナーとのデータの同期は自動 (内部的に Change Feed が構成される) ので、materialized view を作るのに自分で Function App 作って Change Feed する必要なく、設定だけで可能になったって感じなので、最高すぎる機能😊。
  • 検索時は、GSI の container を指定して検索するため、ソースコンテナーのワークロードの負荷は減る。
  • ベクター検索の際はほぼ cross partition query になるため、CSI を作ってワークロードのサブセットを分離することでパフォーマンスを向上可能って感じ。フルテキスト検索でも同様って感じか。

Global Secondary Indexes (GSI) の利用方法

以下ドキュメントになりますが、Features を有効化してあとは GSI を作成するだけ。作ること自体は簡単ですね。

Azure AI Foundry Connection for Azure Cosmos DB and BYO Thread Storage in Azure AI Agent Service

参考: Azure AI Foundry Connection for Azure Cosmos DB and BYO Thread Storage in Azure AI Agent Service - Azure Cosmos DB Blog

Azure AI Foundry との integration 系で2つの機能紹介です。

Azure AI Foundry Connection

Azure AI Foundry の Connection のひとつとして Cosmos DB の指定が可能になりました。

Bring Your Own Thread Storage with Azure AI Agent Service

(この Build 2025 で名称が Azure AI Agent Service から Azure AI Foundry Agent Service に変わりましたが)

Foundry Agent Service の Agent の会話履歴のストアとして、Cosmos DB の指定が可能になりました。具体的には enterprise_memory という DB が作られその中で以下3つのコンテナーにて会話履歴の永続化されます。

  • thread-message-store: エンドユーザーの会話メッセージを保存。
  • system-thread-message-store: 内部システムメッセージを管理。
  • agent-entity-store: モデルの入力と出力をキャプチャして保存。

Microsoft Build 2025 - Foundry Agent Service 関連まとめ

Microsoft Build 2025 で"Azure AI Agent Service" から Azure AI Foundry Agent Service へ微妙に名前が変わって GA したこのサービスについての自分用メモです。

ここでは Azure AI services Blog から4記事、AI Platform Blog から1記事から、個人的にメモしておきたいところをざっくりなまとめていますが、ざっくりすぎて粒度の統一感なです😅

きっちりまとめたかったんですが、それぞれの記事で内容が重複していたり、先月やそれより前に発表されていることも含めて紹介されている内容も多く、全部書いても自分用のメモとして意味ないなと... (翻訳したいわけではないので)。

Announcing General Availability of Azure AI Foundry Agent Service

Foundry Agent Service が GA のお知らせと機能概要のまとめって感じ。

マルチエージェントオーケストレーション:デジタルワークフォースの構築

オーケストレーション機能として2つのコアコンセプト:

  1. Connected Agents (preview): エージェントが特殊なタスクを処理するためのツールとして他のエージェントを呼び出す、Point to Point の相互作用を可能にする。このアプローチは、タスク委任、モジュラー処理、またはコンテキスト固有のワークフローなど、各エージェントが全体的なソリューションに独立して貢献するユースケースに最適。
  2. Multi-Agent Workflows (preview): 複雑な多段階プロセスで複数のエージェントを調整する、構造化されたステートフルなオーケストレーションレイヤーを提供。ワークフロー内でのコンテキスト管理、エラー回復、および長期的な耐久性を処理するため、顧客オンボーディング、金融取引処理、またはサプライチェーン自動化など、エージェントが複数のステップ間でコンテキストを維持する必要があるシナリオに最適。

マルチエージェントオーケストレーションをサポートするため、Semantic Kernel と AutoGen の統合ランタイムと直接統合された単一エージェントとマルチエージェントの両方のワークフローを定義、連携、管理するための単一のAPIインターフェースを公開しているためいい感じに使えるよう。

オープンで相互運用可能なツール:接続されたエージェントエコシステムの構築

以前からある機能プラスαの紹介。Function App 書かれてないのなんでやとは思いましたがね。。。

  • Logic Apps との統合:
  • Knowledge との統合: Microsoft FabricやBing Searchに加え SharePoint も追加されました。
  • Partner Tools: Auquan、Celonis、InsureMO、LEGALFLY、LexisNexis、MiHCM、Morningstar、Trademo などのパートナー会社の提供するサードパーティツールにアクセス可能。
  • Agent Catalog: ようはサンプルコード集。随時増加中。
  • オープンプロトコル: Agent2Agent (A2A) にも対応済み
  • エコシステムの拡張: Crew AI, LangGraph, LlamaIndex など人気ライブラリからもシームレスに呼び出し可能。

信頼性とエンタープライズ対応:エンタープライズ向けに構築

ここは Foundry Agent Service って話よりは、Azure AI Foundry で包括的に AgentOps に必要な評価、トレース、モニタリングの機能があったりセキュリティや Responsible AI の考慮がありますよって話なので割愛。

Building a Digital Workforce with Multi-Agents in Azure AI Foundry Agent Service

マルチエージェントの必要性と新機能の紹介ですね。

なぜマルチエージェントが重要か

  • 現実世界のプロセスは複雑で、複数ステップやそれにあわせてコンテキストの切替、複雑な意思決定が必要のためシングルエージェントでは処理が困難。
  • 特定の機能に特化したエージェント複数でタスクを分散してワークフローで連携することで解決できる。

もう少し具体的な話として

  • スケーラビリティ: システムを水平にスケールに可能
  • 専門性: 各エージェントが特定のタスクやドメインにフォーカスできるため、全体的にパフォーマンスが向上、テストや保守も容易
  • 柔軟性: 異なるワークフローで各エージェントを再利用しやすい。

Azure AI Foundry Agent Serviceにおけるマルチエージェント機能の導入

新しく追加された2つのオーケストレーター機能の紹介。

1. Connected Agents

データ抽出、リスク評価、パーソナライズされたコンテンツ生成など、エージェントが個別のタスクを独立して実行する必要があるシナリオで有用。

主要な機能は...

  • シンプルなワークフローデザイン: 複雑なタスクを専門のエージェントに分割し、複雑さを軽減し、明確さを向上。
  • カスタムオーケストレーション不要: メインエージェントは自然言語を使用してタスクをルーティングするため、ハードコードされたロジックは不要。
  • 容易な拡張性:メインエージェントを変更せずに、新しい接続エージェント(翻訳やリスクスコアリングなど)を追加できます。
  • 信頼性とトレーサビリティの向上: 各エージェントに焦点を絞った責任を割り当てることで、デバッグが容易、監査性が向上。
  • 柔軟なセットアップオプション: Foundryポータルのノーコードインターフェースまたは Python SDK でエージェントを構成可能。

2. Multi-Agent Workflows

状態管理を細かく制御するマルチエージェントを構成する際に有用。

主要な機能は...

  • 状態管理: 状態を定義してエージェントのインタラクションを整理し、ワークフローにおける役割に基づいてエージェントを論理的な単位にグループ化
  • 柔軟な遷移 : ルールベースまたはLLM駆動の遷移を使用して、状態間の論理的な流れを定義できる。
  • 構造化データ処理: 変数を使用してエージェント間で構造化データを渡し、データ整合性を確保可能。
  • 堅牢性と回復力: 組み込みの永続化および障害回復メカニズムにより、ワークフローがデータ損失なしに長時間実行されるプロセスを処理可能。
  • 視覚的な設計とデバッグ: (今後登場予定の機能) VS Codeとの統合により視覚的なワークフロー設計、リアルタイムデバッグ、監視が可能。

MCP と A2A Support / Agent Catalog

MCP と A2A をサポートしてるって話と Agent Catalog の紹介は前述でもしてる内容とかぶってるので省略。

Introducing Built-in AgentOps Tools in Azure AI Foundry Agent Service

What Makes AgentOps Unique

Azure AI Foundry として AgentOps の主要な2機能の紹介。

1. Integrated Tracing Functionality:

  • 実行パス: マルチエージェントワークフロー全体でエージェントの推論と意思決定プロセス全体を視覚化します。
  • パフォーマンス監視: タイムスタンプ、レイテンシ、トークン消費量を追跡し、ボトルネックを特定してエージェントの効率を最適化します。
  • ツール呼び出しログ: ファイル検索、Bing検索によるグラウンディング、コードインタープリター、OpenAPIなどのツールの成功、失敗率、期間を監視します。
  • 詳細なリクエスト/レスポンス: すべてのインタラクションとアクティビティスレッドの詳細なログにアクセスし、開発者が正確にデバッグするのに役立ちます。

2. Advanced Evaluation Framework

Built-in およびカスタマイズ可能なメトリクスを使って、エージェントを評価可能。

  • パフォーマンス評価指標: エージェントのアクティビティスレッドの各ステップにおけるレイテンシ、トークン消費量、リクエストログ、ツール呼び出し効率を測定。
  • 品質評価指標: 意図解決、一貫性、流暢さ、精度に関して出力を評価。
  • 安全性評価指標: エージェントの応答におけるヘイトスピーチ、間接的な攻撃、コードの脆弱性などのリスクを特定。

Monitor Azure AI Foundry Agent Service

ここ以降では Azure AI Foundry Observability の話で、前回の AI Foundry のブログ で書いてることと類似してるので省略。

Expand Azure AI Foundry Agent Service with More Knowledge and Action Tools

Azure AI Foundry Agent Serviceは、Grounding with Bing Custom Search (preview)、SharePoint (coming soon)、Azure Logic Apps (preview)、Triggers (preview) と統合して goal-driven (目標駆動型) の結果を提供できるって話だけですね。

Grounding with Bing Custom Search や SharePoint について多少細かく機能に触れていたり 3rd party tool や Azure Logic Apps 、Triggers の概要について言及している程度なのでメモはこれくらいにしておきます。

Securely Build and Manage Agents in Azure AI Foundry

Foundry Agents のセットアップの種類など基本的な概要から、AI Foundry の Evaluation や observability といった AgetOps はいいぞって話や AI Foundry (というよりはAzure) のセキュリティ機能によって安全だぞって話だけなので、特記したメモはなしです。

Microsoft Build 2025 - Azure AI Foundry 関連まとめ

Microsoft Build 2025 が始まり新しい情報がでてきましたので自分用にざっくりまとめていきます。

このブログでは、AI Foundry blogs で公開された8つの記事と、AI Platform Blog から2つ、Azure AI services Blog から1つの記事を内容をざっくりまとめてます。

Microsoft Build 2025 で発表された内容は、新規に出た内容もあればここ数か月であった内容も含めおさらいって感じのものも多く混在していますが、マー気にせずみていきますかね。

Announcing Developer Essentials for Agents and Apps in Azure AI Foundry

新機能のまとめって感じの内容。

Foundry Models

  • 今回のアップデートにより、Foundry モデルに Azure Llama、Azure Grok、Azure Mistral、Azure DeepSeek、Azure Black Forest Labs など、Microsoft が直接ホストおよび販売する新しいモデルファミリーが、Azure OpenAI と並んで追加に。
  • 6月よりこれらのモデルすべてで Foundry Provisioned Throughput (PTU) による予約済み容量の利用の可能に。
  • Foundry Local は、Windows または macOS で直接モデルを実行できるため、オフラインまたはプライバシーに配慮したワークロードに最適。

Fine-tuning and distillation

  • Foundry Models で GPT-4.1-nano、o4-mini、Llama 4 のファインチューニングが可能に。
  • 新しい低コストの Developer Tier も追加。

Foundry Agent Service が GA。

Foundry Agent Service の一般提供 (GA) 開始に伴い、以下の機能が提供されます。

  • 単一エージェントのホスト、エージェントグループのオーケストレーション、および Agent-to-Agent (A2A) プロトコルによる公開が可能。
  • Microsoft Bing、Microsoft SharePoint、Azure AI Search、Microsoft Fabric などのデータソースとナレッジツールとのシームレスな統合により、エージェント開発が簡素化。
  • Azure Logic Apps、Azure Functions、OpenAPI、Model Context Protocol (MCP) を使用するカスタムツールなどのアクションツールを介したタスク自動化をサポート。
  • Semantic Kernel と AutoGen が 1 つの統合 SDK にマージされ、エージェントの定義、連結、デプロイ(ローカルまたはクラウド)を同じ動作で実行するための単一の構成可能な API が提供。
  • 開発者が簡単にカスタマイズできるエージェントコードサンプルの centralized catalog **があり、事前定義された指示、アクション、API、知識、ツールが含まれています。これにより、Azure AI Foundry を使用してエージェントを迅速に作成およびデプロイできます。

また、関連する進展として以下も発表。

  • Azure AI Search では、自動化されたマルチターン計画、取得、合成を処理するためのエージェントによる取得 (agentic retrieval) がパブリックプレビューで導入。
  • 新しい Voice Live API により、150 以上のロケールでリアルタイムの音声入力と出力が同じエンドポイントを通じて利用可能に。

Content & media

  • 近日公開予定の新しいビデオプレイグラウンドでは、リソースをプロビジョニングすることなく、Foundry Models で Sora(近日公開予定)やその他の最先端のモデルを試すことが可能に。
  • ドキュメントを多用するワークフローの場合、Azure AI Content UnderstandingのProモードでは、かつては複数の抽出呼び出しと人間による検証が必要だった作業が、1つの効率化された操作に集約。例えば、保険金請求と契約条件の比較を1ステップで実行できるように。

Developer productivity

  • Foundry REST APIの GA版により、モデル推論、エージェント操作、評価を1つのエンドポイントに統合し、Python、C#、JavaScript、Java用のSDKを提供
  • 更新されたVS Code拡張機能は、YAML IntelliSense、完全なエージェントCRUD、およびポータル内の新しい「VS Codeで開く」ボタンを提供し、キーとサンプルコードを事前にロードできるように。
  • 一般的なシナリオ向けにAI templates を公開
  • 新しい Microsoft 365 Agents Toolkitのリリースにより、AI Foundryで作成したエージェントをMicrosoft Copilot、Teamsなどに公開可能に。

Deployment & observability

  • 動的なキャパシティ割り当ての機能によりオンデマンドでスケーリングし、Batch Globalおよび DataZone デプロイメントによる動的なトークンクォータにより、最大1兆トークンをキューに入れる新しい機能強化によって、大規模なAIワークロードを強化可能に。
  • Foundry Observabilityの組み込みダッシュボードは、最初のプレイグラウンドテストから本番環境までの品質、コスト、安全性、ROIをカバーし、GitHub ActionsおよびAzure DevOpsに接続されているため、コミットごとに評価が自動的に実行可能に。
  • Foundry Agent Serviceには、トレーシング、評価、モニタリングなどの堅牢なAgentOps機能が含まれており、開発者がエージェントの動作を自信を持って検証、監視、最適化。

Coding the Future of AI with Azure AI Foundry API and SDK

Azure AI Foundry SDK

Azure AI Foundry が統一された Azure のリソースと REST API を提供開始し、リソースのプロビジョニングと管理が簡素化。

  • Azure AI Foundry の playground で実行したコードサンプルをすぐに確認
  • AI Templates の登場 (AIアプリのサンプルコード集) と Azure Developer CLI との統合でアプリケーションのサンプルのプロビジョニングも容易に。
  • OpenAI の モデルだけでなく、Microsoft、Meta、Mistral AI、Cohere、AI21 labs、DeepSeek などのモデルを含む、さまざまなFoundryモデルを組み合わせて実験し、アプリを最適化可能。

Azure AI Foundry Agent Service

  • Agent Service 関連は別のブログで記載します。

Azure AI Foundry Observability

ローカル開発環境で評価を直接実行し、組み込みの安全性および品質評価ツールを使用して、ワークフローが必要な基準を満たしていることを確認できるようになりました。

  • アプリケーションのニーズに合わせて調整されたバッチデータセットを生成・実行することで、テストを効率化します。
  • GitHub Actions などの CI/CDパイプラインのために、評価をシームレスに統合し、開発サイクル全体のアセスメントプロセスを自動化可能に。
  • 評価結果は Foundry Observability ダッシュボードに表示される。

Accelerate App Development with AI Templates in Azure AI Foundry

Azure AI Foundry の Templates で10個の クイックスタート AI テンプレートのセットが用意された。これらのテンプレートは、一般的なAIユースケースをサポートし、開発者がAIソリューションを容易に設計・展開できるようにすることで、プロジェクトをゼロから開始して本番環境にスケールする場合と比較して開発時間を短縮することを目的に作らている。

現時点で用意されているのは以下10 repo。

※ 各 GitHub の repo の README の冒頭や "Business scenario" を読むとより具体定期に何ができるかわかります。

以下の観点で AI Template は作られている。

  • 参照アーキテクチャ
  • デプロイメントガイドと迅速なデプロイメントオプション
  • 主要な技術的特徴
  • 関連するユースケース
  • 料金計算ツール
  • セキュリティガイドライン
  • 特定のニーズに合わせてカスタマイズするためのヒント

Achieve End-to-End Observability in Azure AI Foundry

Leaderboards と Agents Playground

  • 新しくできた Leaderboarsでは、モデルのベンチマークのランキングが可視化可能に。
  • Agents Playground には評価とトレース機能が組み込まれており、エージェントのテスト、デバッグ、改善を1か所で行うこと可能に。
    • 品質チェックはデフォルトで実行され、安全性チェックはトグルを切り替えるだけで有効になり、すべての結果はツール呼び出し、入力、出力、メトリックを完全に可視化するためにトレースにリンクされている。

詳細は Benchmark models in the model leaderboard of Azure AI Foundry portal - Azure AI Foundry | Microsoft Learn

評価の強化

以下の組み込みメトリックを使用して、エージェントスレッドメッセージを直接評価できるようになった。

メトリック 概要
Intent Resolution
(インテント解決度)
エージェントがユーザーの意図をどれだけ正確に識別し、対処しているかを測定。
Task Adherence
(タスク遵守度)
エージェントが識別されたタスクをどれだけうまく実行しているかを測定。
Tool Call Accuracy
(Tool call 精度)
エージェントが正しいツールをどれだけうまく選択し、呼び出しているかを測定。
Response Completeness
(応答の完全性)
応答が真実と比較してどの程度完全であるか(重要な情報が欠落していないか)を測定。

さらに、Azure OpenAI Gradersとの新しい統合によって、より高い精度を得ることも可能に。

  • Label Grader (ラベル評価)
  • String Checker (文字列チェッカー)
  • Text Similarity (テキスト類似度)
  • Custom General Grader (カスタム汎用評価)

詳細は Azure OpenAI Graders for generative AI - Azure AI Foundry | Microsoft Learn

モデルの脆弱性をスキャン

Azure AI Foundry AI Red Teaming Agent により、AIモデルがどのように機能するかを体系的に評価可能に。

Azure AI Foundry AI Red Teaming Agentは、安全でないAIに対する組み込みの防御機能で、MicrosoftのOSS: PyRITを搭載し、敵対的攻撃をシミュレートして、リリース前に脆弱性を発見するための機能。ワークフローに接続するだけですぐに利用可能。

  • コンテンツの安全性のリスクを自動的にスキャン。
  • 攻撃成功率(ASR)などの指標で露出度を測定。
  • 詳細な準備レポートを生成。

評価の自動化

  • GitHub Actions や Azure DevOps Extension で組み込みの評価を使って自動評価が可能に。

継続的なモニタリング、トレース

  • Azure Monitor の Application Insights と Azure Workbooks で実現されたダッシュボードにより、継続的なモニタリングが可能。
    • そのため AI Foundry からも見えるし、Azure ポータルからも見える。
  • トレースを有効にすると、モデルの推論から Tool Call などエージェントの実行が完全に可視化可能に。

コスト

公式ブログからだといまいちスコープがわからんので要調査だが、とりあえず以下がかかれていた...

  • $20/1M input tokens
  • $60/1M output tokens

Unlock Instant On-Device AI with Foundry Local

Foundry Local は、Windowsおよび macOS のローカル上で、モデル、ツール、エージェントを直接実行するクロスプラットフォームAIアプリを構築可能なツール。

  • ONNX Runtime 上で実行される。
    • Windwos だと Windows ML を基盤として AMD, Intel, NVIDIA, Qualcomm などと統合および最適化されている。
    • Mac だと Apple シリコン上で GPUアクセラレーションが含まれる。実行する CPU/GPU/NPU 指定のオプションもあり。
  • コマンドラインで実行可能なほかに、Azure Inference SDK を使ってプログラムからの実行も可能 (ドキュメント見たら foundry local SDK ってのがあったが...)。
  • MCP を使用してローカルツールを呼び出すこともかのうだが、Private preview への参加が必要。

Microsoft and Hugging Face expand collaboration to accelerate Open-Source AI Innovation on Azure AI Foundry

  • Hugging Face との提携の拡張によって、今まで以上に多くのモデルが AI Foundry で利用可能に。
  • Azure AI FoundryカタログのHugging Faceコレクションで利用可能なすべてのモデルは、Hugging Faceによって脆弱性がないかスキャンされています。この提携拡大の一環として、Microsoft は Hugging Face と協力し、特定のモデルをAzureでホストすることも検討しており、これによりユーザーは Hugging Face への外部ネットワークエグレスなしに、これらのモデルをセキュアなエンドポイントとして展開できるようになる予定。

Announcing Grok 3 on Azure AI Foundry

  • イーロンマスク率いる xAI の Grok 3 のモデルが今後2週間程度 (6月上旬~中旬ごろかな) に登場予定.。GitHub Models でも同様。
  • AI Foundry にて Standard または PTUs で利用可能に。料金は Global で 1M Token あたり Input: 3$, Output 15$ のようで GPT-4.1より結構割高。

How Azure AI Foundry and Partners Simplify Governance Without Slowing Developers Down

AIガバナンスに関する内容だが、開発とはちょっとそれるので興味があればブログを直接ご確認ください♪

Azure OpenAI Fine Tuning is Everywhere

Azure OpenAIモデルのファインチューニングで、 Tier として Global と Developer Tier ができたって話。

Global Training とは

  • ほかの Global のオファリングと同様の価格で Azure OpenAI のモデルをファインチューニングが可能
  • Standard training より低コストでトレーニング可能。
  • リージョンは制限あり随時更新される予定なので、利用時にドキュメントを要確認 (Japan East はあるけど Vision がサポート外)
    • データレジデンシーのリージョンや制約もちょっと書かれているので、気になる方はドキュメントを要確認。

Developer Tier とは

  • 任意のトレーニングリージョンまたはGlobal Trainingからファインチューニングされたモデルを24時間無料のファインチューニングモデルホスティングでデプロイできる。
    • デプロイ後、24時間で自動削除される。再デプロイは可能。
  • 現時点で Developer tier 対象のモデルは GPT-4.1 および GPT-4.1-mini のみ。ほかのモデルは coming soon。
  • Developer Tier はデータレジデンシーは非対応。
  • Global Standard のデプロイメントと同様のトークン単位の利用金でテストや評価に利用可能。

What's New in Azure AI Foundry Fine-Tuning | Build 2025

こちらも Fine Tuning の話。前述でかぶってなさそうな話をざっくりまとめ。

o4-mini での強化学習ファインチューニングが Public preview

  • つい先週(5/12)発表があった o4-mini での Reinforcement Fine-Tuning (RFT, 強化学習ファインチューニング) が public preview で登場。
  • 現時点で利用な能なリージョンは East US 2 と Sweden Central。

ファインチューニング済みの GPT-4o and GPT-4o-mini の延長サポート

  • AI Foundry でファインチューニングされた GPT-4o and GPT-4o-mini のモデルの提供終了後、12か月はデプロイおよび推論が可能。

Azure AI Foundry Models: Futureproof Your GenAI Applications | Microsoft Community Hub

今回のアップデート総括的なブログなので特記なメモなし。

GPT-4.1 model family, o3, o4-mini ざっくりノート

2025年4月は OpenAI のモデルリリースラッシュがきましたが、すでに Azure 側でも利用可能な GPT-4.1 ファミリーと o3, o4-mini について自分用ざっくりなメモです。

先週発表されて、GPT-4.1 family と o4-mini は自分の Azure の環境で即日利用可能になったけど、o3 はまだ使えず💦 今日まで待ってみたけど使えないままだからもー諦めてブログ公開しました💦

GPT-4.1, GPT-4.1 mini, GPT-4.1 nano のざっくりまとめ

GPT-4.1 ファミリー概要

  • すべてファミリーで input token 100万 (1047k)、output は 32k
    • 以前の GPT-4o や GPT-4o-mini, GPT-4.5 (input: 128k, output: 16k) に比べ大幅アップ
  • 性能とパフォーマンスの比較は以下。
  • この登場により GPT-4.5-preview は廃止予定 (2025年7月14日)

性能とコストからして GPT-4o から GPT4.1 へ移行するのがベター

価格はこんな感じ。

Model Input (1M token) Output (1M token)
GPT-4.1 $2.00 $8.00
GPT-4.1-mini $0.40 $1.00
GPT-4.1-nano $0.10 $0.40
GPT-4o $2.50 $10.00
GPT-4o-mini $0.15 $0.60
GPT-4.5 $75.00 $150.00

ドキュメントの性能通りに動作する前提であれば以下は考えたくなるところ。

  • GPT-4o は GPT-4.1 へ移行、GPT-4.1-mini でいけるかも。
  • GPT-4o-mini は GPT-4.1-mini へ移行、GPT-4.1-nano でいけるかも。

ベンチマークとリアルワールドでの性能は異なるのでちゃんと評価してから移行しましょうってのは当たり前の前提ですが。

100万トークン入るなら RAG は不要に?

そんなこという人もいるかもしれませんが、OpenAI-MRCR Accuracy のベンチマークを見ればわかる通り、8k をこえると一気に Accuracy がさがります。 以前から大幅によくなったかもしれませんが、4 needles ならさらに顕著に Accuracy がさがります。8 needles だとそもそも縦軸が0-100% ではなく 0-55%です。 リアルワールドで RAG やっててこのスコアなら...ねぇって感じです。 つまり100万トークンぶっこむ = コスト爆上げなので、コスト上げて精度下げる手法を選ぶ必要性は...私は感じません。 コーディング系のタスクで大きなトークン数をぶっこめるのという用途的というのが個人的な認識。

使ってみた所感

AutoGen を使った multi agent なアプリで利用してみると、今までの GPT-4o や GPT-4o-mini と比べてはるかに挙動がよくなった。回答が優れるってことはそこまでないないが (それは個々の Agent の精度や RAG の精度にも依存するので)、ポンコツな挙動がかなり減った印象。

o3, o4-mini ざっくりまとめ

o3, o4-mini 概要

o3 についてはとりあえず現時点で万能の最強モデルの位置づけ。

o4-mini は、AIME 2025 (全米のトップクラスの高校生を対象とした数学コンテスト) では Python interpreter へのアクセス可能な状態で99.5%、o3 を上回る。Python の interpreter なしでも o3 を上回ってるし、以前の model (o1, o-3-min) よりももちろん上。コーディングもベンチマーク的にはかなり強化が入った印象。 GPT-4.1 family も同様だが昨今の Vibe coding ブームに勝ち残るのこるためこのあたりの強化をしてきた雰囲気を感じる。

さっといじった印象でも、ポンコツな動作が減った気がする。回答もすごくいい気がする。

画像の分析では思考の連鎖を組み込むことができるようになり、視覚的推論とテキストの推論によるパフォーマンスの向上がなされたようなので、こちらも期待できそう (画像関連はここ最近試したいことがなくて試してない)。

性能とコストからして新しい model への移行がベター

価格はこんな感じ。

まずは o3 vs o1 だけど、性能めちゃあがって価格が安くなってるので移行って感じ。

Model Input (1M token) Output (1M token)
o3 $10.00 $40.00
o1 $15.00 $60.00

o4-mini vs o3-mini は価格据え置きなので、性能が明らかに上な o4-mini への移行ですね。

Model Input (1M token) Output (1M token)
o4-mini $1.10 $4.40
o3-mini $1.10 $4.40

さっきも同じこと書いたけど、ベンチマークとリアルワールドでの性能は異なるのでちゃんと評価してから移行しましょうっての言うまでもない前提です。

ちょっと詳細メモ: GPT-4.1 model family

GPT-4.1 model family に関するめちゃ細かい話は OpenAI のリリースドキュメント見るとして、ここでは個人的にさっとメモしておきたいことをあげます。

Instruction following

  • 全体的にリアルワールドを意識してトレーニングをしたようなので、エンタープライズなアプリの利用でより性能の恩恵を得れそう。
    • OpenAI での internal な評価を開発しそのメトリクス基づいてトレーニングをしており、Instruction following (指示への追従) に重点をおいているので、プロンプトの指示・制約が強くなっているらしい。この評価メトリクスの影響かここ最近のモデルがどんどん強くなってる感あるので 4.1 ファミリーも期待できそう。

Long Context

100万トークンについては、評価の結果をみてすごくパフォーマンスが上がった感じはあるけど、 少ないほうが精度が高くなる傾向にあるという意味でベストに違いない。

  • 今回の評価結果でも見てわかる通り特に8Kの壁は、個人的に何度も感じたことがあるがいまだに大きい。
  • Multi hop のロングコンテキストの評価の向上もいい感じなので、コーディング系で o1 とか o3-mini の代替になれるかもと期待。

Vision

画像は全然試してないけどとりあえず書いてあったことを...

  • 画像の理解は GPT-4.1-mini でも GPT-4o 以上のベンチマークを出している
  • long context の動画も強い

ちょっと詳細メモ: o3, o4-mini

ベンチマーク見ながら「へー」くらいな感じだったり、Contents Safety の話や Codex の話もあったけど、メモしておきたいことは特になしでした😅

参考

Azure でも利用可能予定の OpenAI の Responses API と Agents SDK の概要メモ

OpenAI で発表された Responses API と Agents SDK は、Microsoft からも2025年3月11日に 「Azure AI Foundry で数週間程度で利用できるようになる」と発表されたので、その2つの概要をメモしておきます。

OpenAI の Responses API とは

  • OpenAI が2025年3月11日に発表した新機能。
  • ざっくりいうと Assistants API に置き換わる進化版的な立ち位置。
    • ちなみに Assistants API は2026年に提供終了予定。
  • Responses API を使用すると、Function Calling や3つのツール (後述します) を使った複数ステップの実行が1回の API 呼び出しで可能になり、実行効率がよい。Assistants API 使ったことがある方なら機能がちょっと増えて深化した API って印象ですかね。
  • Chat Completions の API はずっと残ると書かれてたので、シンプルなタスクや完全に制御したいフローのタスクは ChatCompletions、あとは目的に応じて Responses API を使うような感じですね。

前述した3つのツールの概要は以下。

Magentic-One がのっかってきた印象すらありですね😊。

OpenAI の Agents SDK とは

  • OpenAI が2025年3月11日に発表した新機能。
  • 以前から Experimental の機能で存在していた Swam の正式版として Agents SDKになりました。 ようはマルチエージェントのフレームワークのひとつです。
  • Swarm 改め Agents SDK は、ひとことでまとめると handoff の定義 (どの agent に会話をパスさせれるか) の agent を複数定義して、マルチエージェント構成でタスクを完了させるためのフレームワークって感じです。

  • openai/openai-agents-python

参考

azure.microsoft.com