次の方法で共有


Python 2026 の重要な変更ガイド

このドキュメントでは、2026 年の初めから Python リリースのすべての重要な変更を示します。これには、コードに影響を与える可能性がある破壊的変更や重要な機能強化が含まれます。 各変更は次のようにマークされます。

  • 🔴 破壊的変更 - アップグレードにはコードの変更が必要です
  • 🟡 機能強化 — 新機能または改善;既存のコードは引き続き機能します

このドキュメントでは、2026 preview-to-1.0.0 の移行における重要な Python の変更を追跡するため、重要な変更を見逃さないように、バージョン間でアップグレードするときに参照してください。 特定のトピック (オプションの移行など) の詳細なアップグレード手順については、リンクされたアップグレード ガイドまたはリンクされた PR を参照してください。


python-1.0.0

このセクションでは、 python-1.0.0rc6 後に加わり、 python-1.0.0の一部になった重要な Python の変更について説明します。

🔴 Message(..., text=...) 構造が完全に削除されました

PR:#5062

PR #5062は、Messageを使用してオブジェクトtext=...作成された最後のフレームワーク側コード パスを削除することで、以前の Python メッセージ モデルのクリーンアップを完了します。

  • Message(role="user", contents=["Hello"])ではなく、Message(role="user", text="Hello")としてテキスト メッセージを作成します。
  • これは、ワークフロー要求、カスタム ミドルウェア応答、オーケストレーション ヘルパー、移行コードなど、メッセージを直接構築する任意の場所に適用されます。
  • contents=[...]内のプレーン文字列は引き続き自動的にテキスト コンテンツに正規化されるため、contents=["Hello"]は最も単純なテキストのみの形式のままです。

Before:

message = Message(role="assistant", text="Hello")

After:

message = Message(role="assistant", contents=["Hello"])

🟡 リリースされた Python パッケージでは--preが不要になった

PR:#5062

PR #5062 では、メインの Python パッケージを 1.0.0 に昇格させ、インストール ガイダンスを更新して、リリースされたパッケージと、まだプレリリースされているパッケージを区別します。

  • agent-frameworkagent-framework-coreagent-framework-openai、および agent-framework-foundry がリリースされ、 --preは不要になりました。
  • agent-framework-ag-uiagent-framework-azurefunctionsagent-framework-copilotstudioagent-framework-foundry-localagent-framework-github-copilotagent-framework-mem0agent-framework-ollamaなどのベータ コネクタには、引き続き--preが必要です。
  • 1 つのインストール コマンドにベータ パッケージが含まれている場合は、そのコマンドに --pre してください。

🔴 Foundry が Python 埋め込みとモデルエンドポイント設定を所有するようになりました

PR:#5056

PR #5056 は、スタンドアロンの agent-framework-azure-ai パッケージを削除し、Python 埋め込みサーフェスを agent-framework-foundry および agent_framework.foundryに移動します。

  • FoundryEmbeddingClientからFoundryEmbeddingOptionsFoundryEmbeddingSettings、およびagent_framework.foundryを使用します。
  • Foundry チャット、サービスマネージド エージェント、メモリ プロバイダー、埋め込み用の agent-framework-foundry をインストールします。
  • agent_framework.azure は、 AzureAIInferenceEmbeddingClientAzureAIInferenceEmbeddingOptionsAzureAIInferenceEmbeddingSettings、または AzureAISettingsをエクスポートしなくなりました。
  • Foundry 埋め込みでは、 FOUNDRY_MODELS_ENDPOINTFOUNDRY_MODELS_API_KEYFOUNDRY_EMBEDDING_MODEL、オプションの FOUNDRY_IMAGE_EMBEDDING_MODELが使用されるようになりました。
  • FoundryChatClient FoundryAgent FOUNDRY_PROJECT_ENDPOINTFOUNDRY_MODELなどのプロジェクト エンドポイント設定を引き続き使用します。

Before:

import os

from agent_framework.azure import AzureAIInferenceEmbeddingClient

client = AzureAIInferenceEmbeddingClient(
    endpoint=os.environ["AZURE_AI_SERVICES_ENDPOINT"],
    model=os.environ["AZURE_AI_EMBEDDING_NAME"],
    credential=credential,
)

After:

import os

from agent_framework.foundry import FoundryEmbeddingClient

client = FoundryEmbeddingClient(
    endpoint=os.environ["FOUNDRY_MODELS_ENDPOINT"],
    api_key=os.environ["FOUNDRY_MODELS_API_KEY"],
    model=os.environ["FOUNDRY_EMBEDDING_MODEL"],
)

🔴 ワークフローが明示的なバケットを介してランタイム kwargs をルーティングするようになりました

PR:#5010

PR #5010は Python workflow.run(...)を更新するため、ランタイム kwargs は一般的な転送function_invocation_kwargs=ではなく、client_kwargs=および**kwargsとして明示的に渡されます。

  • フラット マッピングはグローバルとして扱われ、ワークフロー内のすべての一致するエージェント 実行プログラムに転送されます。
  • 1 つ以上の最上位キーが Executor ID と一致する場合、マッピング全体は Executor ごとのターゲットとして扱われ、各 Executor は独自のエントリのみを受け取ります。
  • カスタム AgentExecutor(id="...") とその他の明示的なワークフロー実行プログラム ID は、対象となるキーです。
  • 同じグローバルルールとターゲットルールは、 function_invocation_kwargsclient_kwargsの両方に適用されます。

Before:

await workflow.run(
    "Draft the report",
    db_config={"connection_string": "..."},
    user_preferences={"format": "markdown"},
)

After:

await workflow.run(
    "Draft the report",
    function_invocation_kwargs={
        "researcher": {
            "db_config": {"connection_string": "..."},
        },
        "writer": {
            "user_preferences": {"format": "markdown"},
        },
    },
)

🟡 GitHubCopilotAgent 呼び出しごとにコンテキスト プロバイダーが実行されるようになりました

PR:#5013

PR #5013では、GitHubCopilotAgentcontext_providers受け入れられたが、実際には呼び出されなかった Python の動作ギャップが修正されます。

  • before_run() は、Copilot プロンプトが送信される前に実行されるようになりました。
  • プロバイダーが追加したメッセージと指示は、Copilot CLI に到達するプロンプトに含まれています。
  • after_run() は、ストリーミング パスを含め、最終的な応答がアセンブルされた後に実行されるようになりました。

context_providersを既にGitHubCopilotAgentに渡した場合、移行は必要ありません。フックは Python エージェントサーフェスの残りの部分と一貫して動作するようになりました。


🟡 構造化された出力で、Pydantic モデルに加えて JSON スキーマ マッピングを受け入れるようになりました

PR:#5022

PR #5022 では Python の構造化出力解析が広がり、pydantic モデルまたは JSON スキーマ マッピング response_format できます。

  • Pydanticモデルは、response.valueで型指定されたモデルインスタンスに今も解析されます。
  • JSON スキーマ マッピングは、 response.value (通常は dict または list) で JSON と互換性のある Python 値に解析されるようになりました。
  • ストリームから最終的な応答を収集する場合も、同じ解析規則が適用されます。

これは破壊的変更ではなく機能強化ですが、スキーマを JSON に似たディクショナリとして既に格納しているかどうかを確認すると便利です。


python-1.0.0rc6

このセクションでは、 python-1.0.0rc6に付属または追跡された Python の重要な変更について説明します。

🔴 モデルの選択は標準化されました model

PR:#4999

PR #4999 では、コンストラクター、型指定されたオプション、エージェントの既定値、応答オブジェクト、環境変数全体で Python 側のモデル選択のクリーンアップが完了します。

  • 以前にmodelを使用したすべての場所でmodel_idを使用します。
  • Agent.default_optionsおよび実行ごとのoptions={...}は、"model_id"ではなく"model"を期待するようになりました。
  • 応答オブジェクトは、response.modelではなく、response.model_id表示されます。
  • OpenAI 設定で、 OPENAI_MODELOPENAI_CHAT_MODELOPENAI_CHAT_COMPLETION_MODEL、および OPENAI_EMBEDDING_MODELが使用されるようになりました。
  • Azure OpenAI の設定で、 AZURE_OPENAI_MODELAZURE_OPENAI_CHAT_MODELAZURE_OPENAI_CHAT_COMPLETION_MODEL、および AZURE_OPENAI_EMBEDDING_MODELが使用されるようになりました。
  • Anthropic では ANTHROPIC_CHAT_MODEL が使用され、Foundry Local では FOUNDRY_LOCAL_MODEL が使用されるようになりました。
  • Anthropic パッケージには、 AnthropicFoundryClientAnthropicBedrockClientAnthropicVertexClientなどのプロバイダーホスト型ラッパーも追加されます。

Before:

from agent_framework.anthropic import AnthropicClient

client = AnthropicClient(model_id="claude-sonnet-4-5-20250929")
response = await client.get_response(
    "Hello!",
    options={"model_id": "claude-sonnet-4-5-20250929"},
)

After:

from agent_framework.anthropic import AnthropicClient

client = AnthropicClient(model="claude-sonnet-4-5-20250929")
response = await client.get_response(
    "Hello!",
    options={"model": "claude-sonnet-4-5-20250929"},
)

🔴 コンテキスト プロバイダーは、モデル呼び出しごとにミドルウェアを追加し、履歴を保持できます

PR:#4992

PR #4992 は、Python コンテキスト プロバイダー パイプラインと、複数呼び出しの実行中にフレームワークで管理される履歴を保持する方法を更新します。

  • ContextProvider HistoryProviderが正規の Python 基底クラスになりました。
  • BaseContextProviderBaseHistoryProvider 互換性のために非推奨のエイリアスとして一時的に残りますが、新しいコードは新しい名前に移行する必要があります。
  • SessionContext では、プロバイダーが追加したチャットまたは関数ミドルウェアを extend_middleware() で収集し、 get_middleware()を介してフラット化されたリストを公開できるようになりました。
  • Agent(..., require_per_service_call_history_persistence=True) は、完全な run() の後に 1 回行うのではなく、各モデル呼び出しごとに履歴プロバイダーを実行します。
  • このモードは、フレームワークで管理されたローカル履歴を対象としており、 session.service_session_idoptions={"conversation_id": ...}などの既存のサービスで管理された会話と組み合わせることはできません。

Before:

from agent_framework import BaseHistoryProvider

class CustomHistoryProvider(BaseHistoryProvider):
    ...

After:

from agent_framework import Agent, HistoryProvider

class CustomHistoryProvider(HistoryProvider):
    ...

agent = Agent(
    client=client,
    context_providers=[CustomHistoryProvider()],
    require_per_service_call_history_persistence=True,
)

🔴 非推奨の Azure/OpenAI 互換性サーフェスが削除されました

PR:#4990

PR #4990 は、以前のプレビュー リリース中に使用可能なままだった非推奨の残りの Python 互換性サーフェスを削除することで、 #4818 からのプロバイダーをリードする移行を完了します。

  • agent_framework.azure は、 AzureOpenAI* または古い AzureAI* エージェント/クライアント/プロバイダー サーフェスをエクスポートしなくなりました。
  • Python OpenAI Assistant の互換性の種類は、現在の agent_framework.openai サーフェスの一部ではなくなりました。
  • 直接の OpenAI または Azure OpenAI シナリオには、 OpenAIChatClientOpenAIChatCompletionClient、および OpenAIEmbeddingClient を使用します。
  • Foundry プロジェクトの推論に FoundryChatClient を使用し、プロンプト エージェントまたは HostedAgents に FoundryAgent します。
  • 現在の agent_framework.azure 名前空間では、Azure AI Search、Cosmos 履歴、Azure Functions、永続的なワークフローなど、残りの Azure 統合が対象になりました。 Foundry チャット、エージェント、メモリ、および埋め込みクライアントは、 agent_framework.foundryの下に配置されています。

古い Python コードを移行する場合は、次の代替コードを使用します。

  • AzureOpenAIResponsesClientOpenAIChatClient
  • AzureOpenAIChatClientOpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClientOpenAIEmbeddingClient
  • AzureAIAgentClient / AzureAIClient / AzureAIProjectAgentProvider / AzureAIAgentsProviderアプリがエージェント定義を所有しているかどうかに応じて、→ FoundryChatClientまたはFoundryAgent
  • OpenAIAssistantsClient / OpenAIAssistantProviderは現在の Python OpenAI 作業用OpenAIChatClient、または Foundry でサービスマネージドエージェントが必要な場合はFoundryAgent

🔴 プロバイダーをリードするクライアントの設計とパッケージの分割

PR:#4818

PR #4818 は、プロバイダー固有のパッケージと名前空間に関する Python プロバイダー サーフェスを再構成します。

  • OpenAI クライアントは、agent-framework-openai名前空間からインポートしながら、agent_framework.openai パッケージに含まれるようになりました。
  • Microsoft Foundry クライアントは、 agent-framework-foundry パッケージと agent_framework.foundry 名前空間に含まれるようになりました。
  • Foundry Local は、agent_framework.foundryとしてFoundryLocalClientからも公開されます。
  • OpenAIResponsesClient の名前は OpenAIChatClient に変更されました。
  • OpenAIChatClient の名前は OpenAIChatCompletionClient に変更されました。
  • クライアント構成は、 modelで標準化され、 model_iddeployment_namemodel_deployment_nameなどの古いパラメーターを置き換えます。
  • 新しい Azure OpenAI コードの場合は、 agent_framework.openai クライアントを使用します。 以前の互換性シムAzureOpenAI*は、その後#4990で削除されました。
  • 新しい Foundry コードの場合は、直接プロジェクトの推論、プロンプト エージェントと HostedAgents のFoundryChatClient、ローカル ランタイムのFoundryAgentFoundryLocalClientを使用します。
  • AzureAIClientAzureAIProjectAgentProviderAzureAIAgentClientAzureAIAgentsProvider、および Python Assistant の互換性サーフェスは、このリファクタリング中に互換性パスに移動し、後で #4990 で削除されました。
  • サンプル カバレッジは、samples/02-agents/providers/foundry/のFoundryサンプルを含む、プロバイダーの主導による新しいレイアウトに合わせて再編成されました。

パッケージ マッピング

シナリオ 取り付ける プライマリ名前空間
OpenAI と Azure OpenAI pip install agent-framework-openai agent_framework.openai
Microsoft Foundry プロジェクト エンドポイント、エージェント サービス、メモリ、埋め込み pip install agent-framework-foundry agent_framework.foundry
ファウンドリー・ローカル pip install agent-framework-foundry-local --pre agent_framework.foundry

Before:

from agent_framework.openai import OpenAIResponsesClient

client = OpenAIResponsesClient(model_id="gpt-5.4")

After:

from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient(model="gpt-5.4")

以前に Azure OpenAI を直接使用していた場合は、古い専用クラスを新しいプロバイダーをリードする OpenAI クラスにマップします。

  • AzureOpenAIResponsesClientOpenAIChatClient
  • AzureOpenAIChatClientOpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClientOpenAIEmbeddingClient
  • AzureOpenAIAssistantsClientの応答 API を直接移行するにはOpenAIChatClientを使用するか、サービスで管理されている Foundry エージェントが必要な場合はFoundryAgentを使用してください。

コードの変更は、ほとんどの場合、クラス名の移動と deployment_namemodelです。 Azure OpenAI の互換性のために、新しい OpenAI クライアントで明示的な Azure 入力を使用します。 credential= は推奨される Azure 認証サーフェスになりましたが、呼び出し可能な api_key は互換性パスのままです。

Before (AzureOpenAIResponsesClient):

from agent_framework.azure import AzureOpenAIResponsesClient

client = AzureOpenAIResponsesClient(
    endpoint=azure_endpoint,
    deployment_name=deployment_name,
    credential=credential,
)

After (OpenAIChatClient):

from agent_framework.openai import OpenAIChatClient
from azure.identity import AzureCliCredential

api_version = "your-azure-openai-api-version"

client = OpenAIChatClient(
    azure_endpoint=azure_endpoint,
    model=deployment_name,
    credential=AzureCliCredential(),
    api_version=api_version,
)

Before (AzureOpenAIChatClient):

from agent_framework.azure import AzureOpenAIChatClient

client = AzureOpenAIChatClient(
    endpoint=azure_endpoint,
    deployment_name=deployment_name,
    credential=credential,
)

After (OpenAIChatCompletionClient):

from agent_framework.openai import OpenAIChatCompletionClient
from azure.identity import AzureCliCredential

api_version = "your-azure-openai-api-version"

client = OpenAIChatCompletionClient(
    azure_endpoint=azure_endpoint,
    model=deployment_name,
    credential=AzureCliCredential(),
    api_version=api_version,
)

Azure OpenAI エンドポイントから Microsoft Foundry プロジェクト エンドポイントに移行する場合は、代わりに Foundry 指向のサーフェスを使用します。

以前(Azure OpenAI エンドポイント):

from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential

client = AzureOpenAIResponsesClient(
    deployment_name="gpt-4.1",
    credential=AzureCliCredential(),
)

「Foundry プロジェクト」の後:

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential

client = FoundryChatClient(
    project_endpoint="https://your-project.services.ai.azure.com",
    model="gpt-4.1",
    credential=AzureCliCredential(),
)

agent = Agent(client=client)

ローカルの Microsoft Foundry ランタイムの場合は、Foundry 名前空間とローカル コネクタを使用します。

from agent_framework.foundry import FoundryLocalClient

client = FoundryLocalClient(model="phi-4-mini")

modelを省略した場合は、環境内でFOUNDRY_LOCAL_MODELを設定します。

必要に応じて、環境/構成名も更新します。

  • OpenAIChatClientにはOPENAI_CHAT_MODELを、OpenAIChatCompletionClientにはOPENAI_CHAT_COMPLETION_MODELを使用し、OPENAI_MODELを共有フォールバックとして使用します。
  • Azure OpenAI では、AZURE_OPENAI_CHAT_MODEL用のOpenAIChatClientAZURE_OPENAI_CHAT_COMPLETION_MODEL用のOpenAIChatCompletionClient、および共有フォールバックとしてAZURE_OPENAI_MODELが使用されるようになりました。
  • Azure OpenAI リソース URL のazure_endpointを使用するか、完全なbase_url URL を既に持っている場合は.../openai/v1し、使用している Azure OpenAI API サーフェスのapi_versionを設定します
  • cloud Foundry クライアントの FOUNDRY_PROJECT_ENDPOINTFOUNDRY_MODELFOUNDRY_AGENT_NAMEFOUNDRY_AGENT_VERSION などの Foundry 固有の設定を採用する
  • Anthropic に ANTHROPIC_CHAT_MODEL を使用し、Foundry Local に FOUNDRY_LOCAL_MODEL する

この変更は、 python-1.0.0rc6 サイクル中に最初に発生しました。


🔴 コア依存関係が意図的にスリムになりました

PR:#4904

PR #4904は、#4818を細くし、コア パッケージからより推移的なプロバイダーの依存関係を削除することで、agent-framework-coreから分割されたプロバイダー パッケージに従います。

  • agent-framework-core は意図的に最小限になりました。
  • agent_framework.openaiをインポートする場合は、agent-framework-openaiをインストールします。
  • agent_framework.foundryをインポートする場合は、Foundry プロジェクトの推論、サービスマネージド エージェント、メモリ プロバイダー、埋め込みのagent-framework-foundryをインストールします。 ローカル ランタイムには agent-framework-foundry-local --pre を使用します。
  • 最小限のインストールで MCP ツール、 Agent.as_mcp_server()、またはその他の MCP 統合を使用する場合は、 mcp --pre を手動でインストールします。 WebSocket MCP のサポートについては、 mcp[ws] --preをインストールします。
  • 広範な "すべて含まれる" エクスペリエンスが必要な場合は、メタ パッケージ agent-frameworkをインストールします。

これにより、プロバイダーサーフェスは再設計 されません 。これは、コアのみを取り込む場合に既定でインストールされる内容を変更します。

以前 (コアのみのインストールでは、プロバイダーの機能が推移的に増えることがよくあります):

pip install agent-framework-core

後 (実際に使用するプロバイダー パッケージをインストール):

pip install agent-framework-core
pip install agent-framework-openai

又は:

pip install agent-framework-core
pip install agent-framework-foundry

以前にコアと遅延プロバイダーのインポートに依存していた既存のプロジェクトをアップグレードする場合は、インポートを監査し、環境または依存関係ファイルでプロバイダー パッケージを明示的にします。 MCP ツールまたは MCP サーバー ホスティングに依存している場合は、MCP の依存関係についても同じ操作を行います。


🔴 汎用 OpenAI クライアントが明示的なルーティング信号を優先するようになりました

PR:#4925

PR #4925 は、汎用 agent_framework.openai クライアントが OpenAI と Azure OpenAI の間で決定する方法を変更します。

  • AZURE_OPENAI_*環境変数が存在するため、汎用 OpenAI クライアントが Azure に切り替えなくなりました。
  • OPENAI_API_KEYが構成されている場合、credentialazure_endpointなどの明示的な Azure ルーティングシグナルを渡さない限り、汎用クライアントは OpenAI に残されます。
  • AZURE_OPENAI_*設定のみが存在する場合、汎用クライアントは引き続き Azure 環境ベースのルーティングにフォールバックできます。
  • 推奨される Azure OpenAI パターンでは、credential=AzureCliCredential()OpenAIChatClient、および埋め込みクライアントで明示的な Azure 設定とOpenAIChatCompletionClientを渡すようになりました。
  • 非推奨の AzureOpenAI* ラッパーは互換性の動作を保持するため、既存のラッパー ベースのコードは新しいジェネリック クライアントの優先順位規則に従いません。

以前 (Azure env vars が存在するため、OpenAIChatClient は Azure にルーティングできました):

import os
from agent_framework.openai import OpenAIChatClient

os.environ["OPENAI_API_KEY"] = "sk-openai"
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://your-resource.openai.azure.com"
os.environ["AZURE_OPENAI_CHAT_MODEL"] = "gpt-4o-mini"

client = OpenAIChatClient(model="gpt-4o-mini")

後 (汎用 OpenAI は OpenAI 上に留まります。明示的な Azure 入力を渡して Azure ルーティングを強制します)。

import os
from agent_framework.openai import OpenAIChatClient
from azure.identity import AzureCliCredential

client = OpenAIChatClient(
    model=os.environ["AZURE_OPENAI_CHAT_MODEL"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    credential=AzureCliCredential(),
)

環境に OPENAI_* 値と AZURE_OPENAI_* 値の両方が含まれている場合は、汎用 agent_framework.openai クライアント構築を監査し、プロバイダーの選択を明示的にします。 この理由から、Azure プロバイダーのサンプルが更新され、Azure の入力が直接渡されました。

Azure 埋め込みでは、同じルーティング モデルに従うようになりました。

import os
from agent_framework.openai import OpenAIEmbeddingClient
from azure.identity import AzureCliCredential

client = OpenAIEmbeddingClient(
    model=os.environ["AZURE_OPENAI_EMBEDDING_MODEL"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    credential=AzureCliCredential(),
)

埋め込みシナリオの場合は、次をマップします。

  • AzureOpenAIEmbeddingClientOpenAIEmbeddingClient
  • AZURE_OPENAI_EMBEDDING_MODELmodel
  • OPENAI_EMBEDDING_MODEL は OpenAI 側の埋め込み環境変数のままです

python-1.0.0rc5 / python-1.0.0b260319 (2026 年 3 月 19 日)

🔴 チャット クライアント パイプラインの並べ替え: FunctionInvocation が ChatMiddleware をラップするようになりました

PR:#4746

ChatClient パイプラインの順序が変更されました。 FunctionInvocationは最も外側の層となり、ChatMiddlewareをラップします。つまり、チャットミドルウェアは、関数呼び出しシーケンス全体で一回実行するのではなく、各モデル呼び出しごと(ツール呼び出しループの各イテレーションを含む)に実行されます。

古いパイプラインの順序:

ChatMiddleware → FunctionInvocation → RawChatClient

新しいパイプラインの順序:

FunctionInvocation → ChatMiddleware → ChatTelemetry → RawChatClient

エージェント呼び出しごとに 1 回だけ実行されると想定したカスタム チャット ミドルウェアがある場合 (ツール呼び出しループ全体をラップ)、繰り返し実行しても安全に更新してください。 チャット ミドルウェアは、ツールの結果をモデルに送り返す要求を含め、個々の LLM 要求ごとに呼び出されるようになりました。

さらに、 ChatTelemetry はパイプライン内の ChatMiddleware とは別のレイヤーになり、 RawChatClientに最も近い場所で実行されるようになりました。

🔴 パブリック ランタイム kwargs が明示的なバケットに分割される

PR:#4581

パブリック Python エージェントとチャット API では、一括パブリック **kwargs 転送がプライマリ ランタイム データ メカニズムとして扱われなくなりました。 ランタイム値が目的別に分割されるようになりました。

  • ツールまたは関数ミドルウェアのみが表示する必要がある値には、 function_invocation_kwargs を使用します。
  • クライアント層の kwargs とクライアント ミドルウェアの構成には、 client_kwargs を使用します。
  • FunctionInvocationContext (ctx.kwargsctx.session) を使用してツール/ランタイム データにアクセスします。
  • **kwargsではなく、挿入されたコンテキスト パラメーターを使用してツールを定義します。挿入されたコンテキスト パラメーターは、モデルに表示されるスキーマには表示されません。
  • サブエージェントにツールとして委任するときは、子エージェントが呼び出し元のセッションを共有する必要がある場合は、 agent.as_tool(propagate_session=True) を使用します。

Before:

from typing import Any

from agent_framework import tool


@tool
def send_email(address: str, **kwargs: Any) -> str:
    return f"Queued email for {kwargs['user_id']}"


response = await agent.run(
    "Send the update to finance@example.com",
    user_id="user-123",
    request_id="req-789",
)

After:

from agent_framework import FunctionInvocationContext, tool


@tool
def send_email(address: str, ctx: FunctionInvocationContext) -> str:
    user_id = ctx.kwargs["user_id"]
    session_id = ctx.session.session_id if ctx.session else "no-session"
    return f"Queued email for {user_id} in {session_id}"


response = await agent.run(
    "Send the update to finance@example.com",
    session=agent.create_session(),
    function_invocation_kwargs={
        "user_id": "user-123",
        "request_id": "req-789",
    },
)

カスタム パブリック run() または get_response() メソッドを実装する場合は、それらのシグネチャに function_invocation_kwargsclient_kwargs を追加します。 ツールの場合は、 FunctionInvocationContext として注釈が付けられたパラメーターを使用します。パラメーターには、 ctxcontext、またはその他の注釈付き名前を指定できます。 明示的なスキーマ/入力モデルを指定すると、 ctx という名前のプレーンな未指定のパラメーターも認識されます。 関数ミドルウェアでも同じコンテキスト オブジェクトを使用でき、ランタイム関数 kwargs とセッション状態がライブになります。 **kwargsに依存しているツール定義では、従来の互換性パスのみが使用され、削除されます。


python-1.0.0rc4 / python-1.0.0b260311 (2026 年 3 月 11 日)

リリース ノート:python-1.0.0rc4

🔴 Azure AI 統合が 2.0 GA azure-ai-projects ターゲットになりました

PR:#4536

Python Azure AI 統合では、GA 2.0 azure-ai-projects サーフェスが想定されるようになりました。

  • サポートされている依存関係の範囲が azure-ai-projects>=2.0.0,<3.0になりました。
  • foundry_features パススルーが Azure AI エージェントの作成から削除されました。
  • プレビュー動作では、サポートされているクライアント/プロバイダーで allow_preview=True が使用されるようになりました。
  • ベータ版とGA版の互換性を保つためのシム機能が削除されたため、すべてのインポートと型名を、2.0 GA SDK のインターフェースに更新してください。

🔴 GitHub Copilot ツール ハンドラーで ToolInvocation / ToolResult と Python 3.11 以降が使用されるようになりました

PR:#4551

agent-framework-github-copilotgithub-copilot-sdk>=0.1.32を追跡するようになりました。

  • ツール ハンドラーは、生のToolInvocationではなく、dictデータクラスを受け取ります。
  • ToolResultresult_typeなどのsnake_caseフィールドを使用してtext_result_for_llmを返します。
  • agent-framework-github-copilot パッケージには Python 3.11 以降が必要になりました。

Before:

from typing import Any


def handle_tool(invocation: dict[str, Any]) -> dict[str, Any]:
    args = invocation.get("arguments", {})
    return {
        "resultType": "success",
        "textResultForLlm": f"Handled {args.get('city', 'request')}",
    }

After:

from copilot.types import ToolInvocation, ToolResult


def handle_tool(invocation: ToolInvocation) -> ToolResult:
    args = invocation.arguments
    return ToolResult(
        result_type="success",
        text_result_for_llm=f"Handled {args.get('city', 'request')}",
    )

python-1.0.0rc3 / python-1.0.0b260304 (2026 年 3 月 4 日)

リリース ノート:python-1.0.0rc3

🔴 コードで定義された内容についてのスキル プロバイダーの決定確定 Skill / SkillResource

PR:#4387

Python エージェント スキルでは、ファイル ベースのスキルと共にコード定義の Skill オブジェクトと SkillResource オブジェクトがサポートされるようになりました。パブリック プロバイダーサーフェスは SkillsProviderで標準化されています。

  • 以前のプレビュー/内部 FileAgentSkillsProviderをまだインポートしている場合は、 SkillsProviderに切り替えます。
  • ファイルベースのリソース参照は、 SKILL.mdのバックティック引用符で囲まれた参照に依存しなくなりました。リソースは、代わりにスキル ディレクトリから検出されます。

FileAgentSkillsProviderインポートしたプレビュー/内部コードがある場合は、現在のパブリック サーフェスに切り替えます。

from agent_framework import Skill, SkillResource, SkillsProvider

python-1.0.0rc2 / python-1.0.0b260226 (2026 年 2 月 26 日)

リリース ノート:python-1.0.0rc2

🔴 宣言型ワークフローは、 InvokeTool を次のように置き換えます InvokeFunctionTool

PR:#3716

宣言型 Python ワークフローでは、古い InvokeTool アクションの種類が使用されなくなりました。 これを InvokeFunctionTool に置き換え、Python 呼び出し可能ファイルを WorkflowFactory.register_tool()に登録します。

Before:

actions:
  - kind: InvokeTool
    toolName: send_email

After:

factory = WorkflowFactory().register_tool("send_email", send_email)
actions:
  - kind: InvokeFunctionTool
    functionName: send_email

python-1.0.0rc1 / python-1.0.0b260219 (2026 年 2 月 19 日)

Release:agent-framework-coreおよびagent-framework-azure-ai1.0.0rc1に昇格しました。 その他のすべてのパッケージが 1.0.0b260219に更新されました。

🔴 すべてのパッケージで統合された Azure 資格情報の処理

PR:#4088

ad_tokenad_token_provider、およびget_entra_auth_tokenパラメーター/ヘルパーは、Azure 関連のすべての Python パッケージで統一されたcredential パラメーターに置き換えられました。 新しい方法では、トークンの自動キャッシュと更新に azure.identity.get_bearer_token_provider を使用します。

影響を受けるクラス:AzureOpenAIChatClientAzureOpenAIResponsesClientAzureOpenAIAssistantsClientAzureAIClientAzureAIAgentClientAzureAIProjectAgentProviderAzureAIAgentsProviderAzureAISearchContextProviderPurviewClientPurviewPolicyMiddlewarePurviewChatPolicyMiddleware

Before:

from azure.identity import AzureCliCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    AzureCliCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAIResponsesClient(
    azure_ad_token_provider=token_provider,
    ...
)

After:

from azure.identity import AzureCliCredential

client = AzureOpenAIResponsesClient(
    credential=AzureCliCredential(),
    ...
)

credential パラメーターは、TokenCredentialAsyncTokenCredential、または呼び出し可能なトークン プロバイダーを受け取ります。 トークンのキャッシュと更新は自動的に処理されます。


🔴 再設計された Python 例外階層

PR:#4082

フラット ServiceException ファミリは、単一の AgentFrameworkException ルートの下にあるドメイン スコープの例外分岐に置き換えられました。 これにより、呼び出し元は正確な except ターゲットと明確なエラー セマンティクスが提供されます。

新しい階層:

AgentFrameworkException
├── AgentException
│   ├── AgentInvalidAuthException
│   ├── AgentInvalidRequestException
│   ├── AgentInvalidResponseException
│   └── AgentContentFilterException
├── ChatClientException
│   ├── ChatClientInvalidAuthException
│   ├── ChatClientInvalidRequestException
│   ├── ChatClientInvalidResponseException
│   └── ChatClientContentFilterException
├── IntegrationException
│   ├── IntegrationInitializationError
│   ├── IntegrationInvalidAuthException
│   ├── IntegrationInvalidRequestException
│   ├── IntegrationInvalidResponseException
│   └── IntegrationContentFilterException
├── ContentError
├── WorkflowException
│   ├── WorkflowRunnerException
│   ├── WorkflowValidationError
│   └── WorkflowActionError
├── ToolExecutionException
├── MiddlewareTermination
└── SettingNotFoundError

例外 (ServiceExceptionServiceInitializationErrorServiceResponseExceptionServiceContentFilterExceptionServiceInvalidAuthErrorServiceInvalidExecutionSettingsErrorServiceInvalidRequestErrorServiceInvalidResponseErrorAgentExecutionExceptionAgentInvocationErrorAgentInitializationErrorAgentSessionExceptionChatClientInitializationErrorCheckpointDecodingError) を削除しました。

Before:

from agent_framework.exceptions import ServiceException, ServiceResponseException

try:
    result = await agent.run("Hello")
except ServiceResponseException:
    ...
except ServiceException:
    ...

After:

from agent_framework.exceptions import AgentException, AgentInvalidResponseException, AgentFrameworkException

try:
    result = await agent.run("Hello")
except AgentInvalidResponseException:
    ...
except AgentException:
    ...
except AgentFrameworkException:
    # catch-all for any Agent Framework error
    ...

Init 検証エラーで、カスタム例外の代わりに組み込みの ValueError/TypeError が使用されるようになりました。 エージェント フレームワークの例外は、ドメイン レベルの障害のために予約されています。


🔴 プロバイダーによってスコープされた状態 source_id

PR:#3995

プロバイダー フックは、完全なセッション状態ではなく、プロバイダー スコープの状態ディクショナリ (state.setdefault(provider.source_id, {})) を受け取るようになりました。 つまり、以前に state[self.source_id]["key"] 経由で入れ子になった状態にアクセスしたプロバイダーの実装は、 state["key"] に直接アクセスする必要があります。

さらに、既定InMemoryHistoryProvidersource_id"memory"から"in_memory"に変更されます。

Before:

# In a custom provider hook:
async def on_before_agent(self, state: dict, **kwargs):
    my_data = state[self.source_id]["my_key"]

# InMemoryHistoryProvider default source_id
provider = InMemoryHistoryProvider("memory")

After:

# Provider hooks receive scoped state — no nested access needed:
async def on_before_agent(self, state: dict, **kwargs):
    my_data = state["my_key"]

# InMemoryHistoryProvider default source_id changed
provider = InMemoryHistoryProvider("in_memory")

🔴 チャット/エージェント メッセージ入力の配置 (runget_response)

PR:#3920

チャット クライアント get_response の実装が一貫して Sequence[Message]を受け取るようになりました。 agent.run(...) は柔軟性を維持し (strContentMessage、シーケンスなど)、チャット クライアントを呼び出す前に入力を正規化します。

Before:

async def get_response(self, messages: str | Message | list[Message], **kwargs): ...

After:

from collections.abc import Sequence
from agent_framework import Message

async def get_response(self, messages: Sequence[Message], **kwargs): ...

🔴 FunctionTool[Any] スキーマ パススルーの汎用セットアップが削除されました

PR:#3907

スキーマ ベースのツール パスは、以前の FunctionTool[Any] の一般的な動作に依存しなくなりました。 FunctionToolを直接使用し、必要に応じて pydantic BaseModel または明示的なスキーマ (たとえば、@tool(schema=...)) を指定します。

Before:

placeholder: FunctionTool[Any] = FunctionTool(...)

After:

placeholder: FunctionTool = FunctionTool(...)

🔴 Pydantic設定はTypedDict + load_settings()に置き換えられました。

PR:#3843#4032

pydantic-settingsベースのAFBaseSettings クラスは、TypedDictload_settings()を使用する軽量の関数ベースの設定システムに置き換えられました。 pydantic-settingsの依存関係が完全に削除されました。

すべての設定クラス ( OpenAISettingsAzureOpenAISettingsAnthropicSettingsなど) が TypedDict 定義になり、設定値は属性アクセスではなくディクショナリ構文を使用してアクセスされるようになりました。

Before:

from agent_framework.openai import OpenAISettings

settings = OpenAISettings()  # pydantic-settings auto-loads from env
api_key = settings.api_key
model_id = settings.model_id

After:

from agent_framework.openai import OpenAISettings, load_settings

settings = load_settings(OpenAISettings, env_prefix="OPENAI_")
api_key = settings["api_key"]
model = settings["model"]

Important

Agent Framework は、 ファイルから値を自動的に読み込.env.env の読み込みを選択するには、次のいずれかを明示的に実行する必要があります。

  • アプリケーションの開始時にload_dotenv() パッケージからpython-dotenvを呼び出す
  • env_file_path=".env"load_settings()に渡す
  • シェルまたは IDE で環境変数を直接設定する

解決の順序は、明示的オーバーライド→ load_settingsファイル値 (.envが指定されている場合) →環境変数→デフォルトです。 env_file_pathを指定した場合、そのファイルが存在しないとFileNotFoundErrorが発生します。


🟡 推論モデル ワークフローのハンドオフと履歴のシリアル化を修正する

PR:#4083

マルチエージェント ワークフローで推論モデル (gpt-5-mini、gpt-5.2 など) を使用する場合の複数のエラーを修正します。 Responses API からの推論項目が正しくシリアル化され、 function_call が存在する場合にのみ履歴に含まれるようになり、API エラーを防ぎます。 暗号化/非表示の推論コンテンツが正しく出力され、 summary フィールド形式が修正されました。 また、service_session_id はハンドオフ時にクリアされ、エージェント間での状態漏洩を防ぎます。


🟡 Bedrock がcore[all]に追加され、ツール選択のデフォルトが修正されました

PR:#3953

Amazon Bedrock は現在、 agent-framework-core[all] のエクストラに含まれており、 agent_framework.amazon 遅延インポートサーフェイスを介して利用できます。 ツール選択の動作も修正されました。ツール選択の値の設定を解除しても、プロバイダーはサービスの既定値を使用し、明示的に設定された値は保持されます。

from agent_framework.amazon import BedrockClient

🟡 サポートされていないランタイムのオーバーライドに関する AzureAIClient の警告

PR:#3919

この変更時に、ランタイムのAzureAIClientまたはtoolsがエージェントの作成時の構成と異なる場合、structured_outputは警告をログに記録しました。 その Python サーフェスは削除されました。 現在の Python コードでは、アプリ所有のツール/ランタイム構成が必要な場合は FoundryChatClient を使用するか、動的オーバーライドを必要とする直接応答 API シナリオの OpenAIChatClient を使用します。


🟡 workflow.as_agent() プロバイダーの設定が解除されたときにローカル履歴が既定に設定されるようになりました

PR:#3918

workflow.as_agent()なしでcontext_providersが作成されると、既定でInMemoryHistoryProvider("memory")が追加されるようになりました。 コンテキスト プロバイダーが明示的に指定されている場合、そのリストは変更されずに保持されます。

workflow_agent = workflow.as_agent(name="MyWorkflowAgent")
# Default local history provider is injected when none are provided.

🟡 OpenTelemetry のトレース コンテキストが MCP 要求に伝達される

PR:#3780

OpenTelemetry がインストールされると、トレース コンテキスト (W3C traceparent など) が、 params._meta経由で MCP 要求に自動的に挿入されます。 これにより、エージェント→ MCP サーバー呼び出し間でのエンドツーエンドの分散トレースが可能になります。 コードの変更は必要ありません。これは、有効なスパン コンテキストが存在する場合にアクティブ化される追加動作です。


🟡 Azure Functions の永続的なワークフローのサポート

PR:#3630

agent-framework-azurefunctions パッケージでは、Azure Durable Functions でのWorkflow グラフの実行がサポートされるようになりました。 エージェント エンティティ、アクティビティ関数、および HTTP エンドポイントを自動的に登録するworkflowに、AgentFunctionApp パラメーターを渡します。

from agent_framework.azurefunctions import AgentFunctionApp

app = AgentFunctionApp(workflow=my_workflow)
# Automatically registers:
#   POST /api/workflow/run          — start a workflow
#   GET  /api/workflow/status/{id}  — check status
#   POST /api/workflow/respond/{id}/{requestId} — HITL response

ファンアウト/ファンイン、共有状態、およびヒューマン イン ザ ループ パターンをサポートし、構成可能なタイムアウトと期限切れ時の自動拒否をサポートします。


python-1.0.0b260212 (2026 年 2 月 12 日)

リリース ノート:python-1.0.0b260212

🔴 Hosted*Tool クライアント get_*_tool() メソッドに置き換えられたクラス

PR:#3634

ホストされているツール クラスは、クライアント スコープのファクトリ メソッドを優先して削除されました。 これにより、プロバイダーによるツールの可用性が明示的になります。

削除されたクラス Replacement
HostedCodeInterpreterTool client.get_code_interpreter_tool()
HostedWebSearchTool client.get_web_search_tool()
HostedFileSearchTool client.get_file_search_tool(...)
HostedMCPTool client.get_mcp_tool(...)
HostedImageGenerationTool client.get_image_generation_tool(...)

Before:

from agent_framework import HostedCodeInterpreterTool, HostedWebSearchTool

tools = [HostedCodeInterpreterTool(), HostedWebSearchTool()]

After:

from agent_framework.openai import OpenAIResponsesClient

client = OpenAIResponsesClient()
tools = [client.get_code_interpreter_tool(), client.get_web_search_tool()]

🔴 セッション/コンテキスト プロバイダー パイプラインの最終処理 (AgentSessioncontext_providers)

PR:#3850

Python セッションとコンテキスト プロバイダーの移行が完了しました。 AgentThread 以前のコンテキスト プロバイダー型が削除されました。

  • AgentThreadAgentSession
  • agent.get_new_thread()agent.create_session()
  • agent.get_new_thread(service_thread_id=...)agent.get_session(service_session_id=...)
  • context_provider= / chat_message_store_factory= パターンは次のように置き換えられます。 context_providers=[...]

Before:

thread = agent.get_new_thread()
response = await agent.run("Hello", thread=thread)

After:

session = agent.create_session()
response = await agent.run("Hello", session=session)

🔴 チェックポイント モデルとストレージの動作がリファクタリングされました

PR:#3744

チェックポイント内部が再設計されました。これは、永続化されたチェックポイントの互換性とカスタム ストレージの実装に影響します。

  • WorkflowCheckpoint ライブ オブジェクトが格納されるようになりました (シリアル化はチェックポイント ストレージで行われます)
  • FileCheckpointStorage は現在、pickle シリアライズを使用しています
  • workflow_id 削除され、 previous_checkpoint_id が追加されました
  • 非推奨のチェックポイント フックが削除されました

バージョン間でチェックポイントを保持する場合は、ワークフローを再開する前に既存のチェックポイント成果物を再生成または移行します。


🟡 Foundry プロジェクト エンドポイントは当初AzureOpenAIResponsesClientを通じて表面化しました

PR:#3814

このプレビュー機能は、当初、 AzureOpenAIResponsesClient が Foundry プロジェクト エンドポイントに接続することを許可しました。 現在の Python ガイダンスでは、削除されたAzureOpenAIResponsesClientではなく、Foundry プロジェクトの推論にはFoundryChatClientを、サービスマネージド Foundry エージェントにはFoundryAgentを使用しています。

from azure.identity import DefaultAzureCredential
from agent_framework.foundry import FoundryChatClient

client = FoundryChatClient(
    project_endpoint="https://<your-project>.services.ai.azure.com",
    model="gpt-4o-mini",
    credential=DefaultAzureCredential(),
)

🔴 ミドルウェア call_next が受け入れなくなりました context

PR:#3829

ミドルウェアの継続は現在、引数を受け付けません。 ミドルウェアが引き続き call_next(context)を呼び出す場合は、 call_next()に更新します。

Before:

async def telemetry_middleware(context, call_next):
    # ...
    return await call_next(context)

After:

async def telemetry_middleware(context, call_next):
    # ...
    return await call_next()

python-1.0.0b260210 (2026 年 2 月 10 日)

リリース ノート:python-1.0.0b260210

🔴 から削除されたワークフロー ファクトリ メソッド WorkflowBuilder

PR:#3781

register_executor()register_agent()WorkflowBuilderから削除されました。 すべてのビルダー メソッド (add_edgeadd_fan_out_edgesadd_fan_in_edgesadd_chainadd_switch_case_edge_groupadd_multi_selection_edge_group) と start_executor は文字列名を受け入れなくなりました。これらは、Executor またはエージェント インスタンスを直接必要とします。

状態を分離するために、Executor/agent のインスタンス化とワークフローのビルドをヘルパー メソッド内でラップして、各呼び出しで新しいインスタンスが生成されるようにします。

WorkflowBuilder executor を用いて

Before:

workflow = (
    WorkflowBuilder(start_executor="UpperCase")
    .register_executor(lambda: UpperCaseExecutor(id="upper"), name="UpperCase")
    .register_executor(lambda: ReverseExecutor(id="reverse"), name="Reverse")
    .add_edge("UpperCase", "Reverse")
    .build()
)

After:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = WorkflowBuilder(start_executor=upper).add_edge(upper, reverse).build()

WorkflowBuilder エージェントと一緒に

Before:

builder = WorkflowBuilder(start_executor="writer_agent")
builder.register_agent(factory_func=create_writer_agent, name="writer_agent")
builder.register_agent(factory_func=create_reviewer_agent, name="reviewer_agent")
builder.add_edge("writer_agent", "reviewer_agent")

workflow = builder.build()

After:

writer_agent = create_writer_agent()
reviewer_agent = create_reviewer_agent()

workflow = WorkflowBuilder(start_executor=writer_agent).add_edge(writer_agent, reviewer_agent).build()

ヘルパー メソッドを使用した状態の分離

呼び出しごとに分離状態を必要とするワークフローの場合は、ヘルパー メソッドで構築をラップします。

def create_workflow() -> Workflow:
    """Each call produces fresh executor instances with independent state."""
    upper = UpperCaseExecutor(id="upper")
    reverse = ReverseExecutor(id="reverse")

    return WorkflowBuilder(start_executor=upper).add_edge(upper, reverse).build()

workflow_a = create_workflow()
workflow_b = create_workflow()

🔴 ChatAgentAgentに名前を変更し、ChatMessageMessageに名前を変更しました。

PR:#3747

冗長な Chat プレフィックスを削除することで、Python のコア型が簡略化されました。 下位互換性エイリアスは提供されません。

以前は クリック後
ChatAgent Agent
RawChatAgent RawAgent
ChatMessage Message
ChatClientProtocol SupportsChatGetResponse

インポートの更新

Before:

from agent_framework import ChatAgent, ChatMessage

After:

from agent_framework import Agent, Message

型参照を更新する

Before:

agent = ChatAgent(
    chat_client=client,
    name="assistant",
    instructions="You are a helpful assistant.",
)

message = ChatMessage(role="user", contents=[Content.from_text("Hello")])

After:

agent = Agent(
    client=client,
    name="assistant",
    instructions="You are a helpful assistant.",
)

message = Message(role="user", contents=[Content.from_text("Hello")])

ChatClientChatResponseChatOptions、および ChatMessageStore は、この変更によって名前が変更 されません


🔴 Types API は、応答/メッセージ モデル間で更新を確認します

PR:#3647

このリリースには、メッセージ/応答の入力とヘルパー API の広範で破壊的なクリーンアップが含まれています。

  • Role FinishReasonは、既知の値のNewTypestrRoleLiteralを持つ/のラッパーをFinishReasonLiteralするようになりました。 それらを文字列として扱います ( .value 使用法はありません)。
  • Message 構築は Message(role, contents=[...])で標準化されています。 contents 内の文字列はテキスト コンテンツに自動的に変換されます。
  • ChatResponse AgentResponseコンストラクターがmessages= (単一のMessageまたはシーケンス) を中心とするようになりました。従来のtext=コンストラクターの使用は応答から削除されました。
  • ChatResponseUpdate AgentResponseUpdate text=を受け入れなくなりました。contents=[Content.from_text(...)]を使用します。
  • 更新の組み合わせヘルパー名が簡略化されました。
  • try_parse_valueChatResponse および AgentResponseから削除されました。

ヘルパー メソッドの名前変更

以前は クリック後
ChatResponse.from_chat_response_updates(...) ChatResponse.from_updates(...)
ChatResponse.from_chat_response_generator(...) ChatResponse.from_update_generator(...)
AgentResponse.from_agent_run_response_updates(...) AgentResponse.from_updates(...)

応答更新構築の更新

Before:

update = AgentResponseUpdate(text="Processing...", role="assistant")

After:

from agent_framework import AgentResponseUpdate, Content

update = AgentResponseUpdate(
    contents=[Content.from_text("Processing...")],
    role="assistant",
)

try_parse_valuetry/except.value上で置き換える

Before:

if parsed := response.try_parse_value(MySchema):
    print(parsed.name)

After:

from pydantic import ValidationError

try:
    parsed = response.value
    if parsed:
        print(parsed.name)
except ValidationError as err:
    print(f"Validation failed: {err}")

🔴 統合 run/get_response モデルと ResponseStream の使用

PR:#3379

Python API は、 agent.run(...)client.get_response(...)を中心に統合され、ストリーミングは ResponseStreamで表されました。

Before:

async for update in agent.run_stream("Hello"):
    print(update)

After:

stream = agent.run("Hello", stream=True)
async for update in stream:
    print(update)

🔴 コア コンテキスト/プロトコルの種類の名前変更

PR:#3714#3717

以前は クリック後
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

インポートと型の注釈を適宜更新します。


🔴 ミドルウェア継続パラメーターの名前が次に変更されました call_next

PR:#3735

ミドルウェアシグネチャでは、call_nextの代わりにnextを使用する必要があります。

Before:

async def my_middleware(context, next):
    return await next(context)

After:

async def my_middleware(context, call_next):
    return await call_next(context)

🔴 標準化された TypeVar 名 (TNameNameT)

PR:#3770

コードベースは、サフィックス T が使用される一貫した TypeVar 名前付けスタイルに従うようになりました。

Before:

TMessage = TypeVar("TMessage")

After:

MessageT = TypeVar("MessageT")

フレームワーク ジェネリックに関するカスタム ラッパーを維持する場合は、ローカルの TypeVar 名を新しい規則に合わせて調整して、注釈のチャーンを減らします。


🔴 エージェントとしてのワークフローの出力とストリーミングの変更

PR:#3649

workflow.as_agent() の動作が更新され、出力とストリーミングが標準のエージェント応答パターンに合わせて調整されました。 従来の出力/更新処理に依存するエージェントとしてのワークフロー コンシューマーを確認し、現在の AgentResponse/AgentResponseUpdate フローに更新します。


🔴 Fluent Builder メソッドがコンストラクター パラメーターに移動されました

PR:#3693

6 つのビルダー (WorkflowBuilderSequentialBuilderConcurrentBuilderGroupChatBuilderMagenticBuilderHandoffBuilder) の単一構成 fluent メソッドがコンストラクター パラメーターに移行されました。 設定の唯一の構成パスであった Fluent メソッドは、コンストラクター引数を優先して削除されます。

WorkflowBuilder

set_start_executor()with_checkpointing()、および with_output_from() が削除されます。 代わりにコンストラクター パラメーターを使用してください。

Before:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = (
    WorkflowBuilder(start_executor=upper)
    .add_edge(upper, reverse)
    .set_start_executor(upper)
    .with_checkpointing(storage)
    .build()
)

After:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = (
    WorkflowBuilder(start_executor=upper, checkpoint_storage=storage)
    .add_edge(upper, reverse)
    .build()
)

SequentialBuilder / ConcurrentBuilder

participants()register_participants()with_checkpointing()、および with_intermediate_outputs() が削除されます。 代わりにコンストラクター パラメーターを使用してください。

Before:

workflow = SequentialBuilder().participants([agent_a, agent_b]).with_checkpointing(storage).build()

After:

workflow = SequentialBuilder(participants=[agent_a, agent_b], checkpoint_storage=storage).build()

GroupChatBuilder

participants()register_participants()with_orchestrator()with_termination_condition()with_max_rounds()with_checkpointing()、および with_intermediate_outputs() は削除されます。 代わりにコンストラクター パラメーターを使用してください。

Before:

workflow = (
    GroupChatBuilder()
    .with_orchestrator(selection_func=selector)
    .participants([agent1, agent2])
    .with_termination_condition(lambda conv: len(conv) >= 4)
    .with_max_rounds(10)
    .build()
)

After:

workflow = GroupChatBuilder(
    participants=[agent1, agent2],
    selection_func=selector,
    termination_condition=lambda conv: len(conv) >= 4,
    max_rounds=10,
).build()

MagenticBuilder

participants()register_participants()with_manager()with_plan_review()with_checkpointing()、および with_intermediate_outputs() は削除されます。 代わりにコンストラクター パラメーターを使用してください。

Before:

workflow = (
    MagenticBuilder()
    .participants([researcher, coder])
    .with_manager(agent=manager_agent)
    .with_plan_review()
    .build()
)

After:

workflow = MagenticBuilder(
    participants=[researcher, coder],
    manager_agent=manager_agent,
    enable_plan_review=True,
).build()

HandoffBuilder

with_checkpointing()with_termination_condition() が削除されます。 代わりにコンストラクター パラメーターを使用してください。

Before:

workflow = (
    HandoffBuilder(participants=[triage, specialist])
    .with_start_agent(triage)
    .with_termination_condition(lambda conv: len(conv) > 5)
    .with_checkpointing(storage)
    .build()
)

After:

workflow = (
    HandoffBuilder(
        participants=[triage, specialist],
        termination_condition=lambda conv: len(conv) > 5,
        checkpoint_storage=storage,
    )
    .with_start_agent(triage)
    .build()
)

検証の変更

  • WorkflowBuilder コンストラクター引数として start_executor が必要になりました (以前は fluent メソッドを使用して設定しました)
  • SequentialBuilderConcurrentBuilderGroupChatBuilder、および MagenticBuilder では、構築時に participants または participant_factories が必要です。どちらも渡されなかった場合は ValueError が発生します。

HandoffBuilder は既にコンストラクター パラメーターとして participants/participant_factories を受け入れ、この点で変更されていません。


🔴 ワークフローイベントは WorkflowEvent 識別子を使用して、単一の type に統合されました。

PR:#3690

個々のすべてのワークフロー イベント サブクラスは、単一のジェネリック WorkflowEvent[DataT] クラスに置き換えられました。 isinstance()チェックを使用してイベントの種類を識別する代わりに、event.type文字列リテラル (たとえば、"output""request_info""status") を確認します。 これは、Contentからのpython-1.0.0b260123 クラス統合と同じパターンに従います。

イベント クラスを削除しました

次のエクスポートされたイベント サブクラスは存在しなくなりました。

旧クラス 新しい event.type
WorkflowOutputEvent "output"
RequestInfoEvent "request_info"
WorkflowStatusEvent "status"
WorkflowStartedEvent "started"
WorkflowFailedEvent "failed"
ExecutorInvokedEvent "executor_invoked"
ExecutorCompletedEvent "executor_completed"
ExecutorFailedEvent "executor_failed"
SuperStepStartedEvent "superstep_started"
SuperStepCompletedEvent "superstep_completed"

インポートの更新

Before:

from agent_framework import (
    WorkflowOutputEvent,
    RequestInfoEvent,
    WorkflowStatusEvent,
    ExecutorCompletedEvent,
)

After:

from agent_framework import WorkflowEvent
# Individual event classes no longer exist; use event.type to discriminate

イベントの種類のチェックを更新する

Before:

async for event in workflow.run_stream(input_message):
    if isinstance(event, WorkflowOutputEvent):
        print(f"Output from {event.executor_id}: {event.data}")
    elif isinstance(event, RequestInfoEvent):
        requests[event.request_id] = event.data
    elif isinstance(event, WorkflowStatusEvent):
        print(f"Status: {event.state}")

After:

async for event in workflow.run_stream(input_message):
    if event.type == "output":
        print(f"Output from {event.executor_id}: {event.data}")
    elif event.type == "request_info":
        requests[event.request_id] = event.data
    elif event.type == "status":
        print(f"Status: {event.state}")

AgentResponseUpdate を使用したストリーミング

Before:

from agent_framework import AgentResponseUpdate, WorkflowOutputEvent

async for event in workflow.run_stream("Write a blog post about AI agents."):
    if isinstance(event, WorkflowOutputEvent) and isinstance(event.data, AgentResponseUpdate):
        print(event.data, end="", flush=True)
    elif isinstance(event, WorkflowOutputEvent):
        print(f"Final output: {event.data}")

After:

from agent_framework import AgentResponseUpdate

async for event in workflow.run_stream("Write a blog post about AI agents."):
    if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
        print(event.data, end="", flush=True)
    elif event.type == "output":
        print(f"Final output: {event.data}")

型の注釈

Before:

pending_requests: list[RequestInfoEvent] = []
output: WorkflowOutputEvent | None = None

After:

from typing import Any
from agent_framework import WorkflowEvent

pending_requests: list[WorkflowEvent[Any]] = []
output: WorkflowEvent | None = None

WorkflowEvent はジェネリック (WorkflowEvent[DataT]) ですが、混合イベントのコレクションには、 WorkflowEvent[Any] またはパラメーター化されていない WorkflowEventを使用します。


🔴 workflow.send_responses* 削除;使用 workflow.run(responses=...)

PR:#3720

send_responses() send_responses_streaming()Workflowから削除されました。 応答を run()に直接渡すことで、一時停止したワークフローを続行します。

Before:

async for event in workflow.send_responses_streaming(
    checkpoint_id=checkpoint_id,
    responses=[approved_response],
):
    ...

After:

async for event in workflow.run(
    checkpoint_id=checkpoint_id,
    responses=[approved_response],
):
    ...

🔴 SharedState Stateに名前が変更されました。ワークフロー状態 API は同期的です

PR:#3667

状態 API では awaitが不要になり、名前付けは標準化されました。

以前は クリック後
ctx.shared_state ctx.state
await ctx.get_shared_state("k") ctx.get_state("k")
await ctx.set_shared_state("k", v) ctx.set_state("k", v)
checkpoint.shared_state checkpoint.state

🔴 オーケストレーション ビルダーが移動されました agent_framework.orchestrations

PR:#3685

オーケストレーション ビルダーが専用のパッケージ名前空間に追加されました。

Before:

from agent_framework import SequentialBuilder, GroupChatBuilder

After:

from agent_framework.orchestrations import SequentialBuilder, GroupChatBuilder

🟡 実行時間の長いバックグラウンド応答と継続トークン

PR:#3808

options={"background": True}continuation_tokenを介した Python エージェントの実行で、バックグラウンド応答がサポートされるようになりました。

response = await agent.run("Long task", options={"background": True})
while response.continuation_token is not None:
    response = await agent.run(options={"continuation_token": response.continuation_token})

🟡 セッション/コンテキスト プロバイダーのプレビューの種類がサイド バイ サイドで追加されました

PR:#3763

SessionContextBaseContextProviderなど、増分移行用のレガシ API と共に、新しいセッション/コンテキスト パイプラインの種類が導入されました。


🟡 コード インタープリター ストリーミングに増分コード デルタが含まれるようになりました

PR:#3775

ストリーミング コード インタープリターは現在、ストリーミング コンテンツ内でコードの差分の更新を確認できるため、UIが生成されたコードを段階的にレンダリング可能になっています。


🟡 @tool では、明示的なスキーマ処理がサポートされます

PR:#3734

推定されたスキーマ出力でカスタマイズが必要な場合に、ツール定義で明示的なスキーマ処理を使用できるようになりました。


python-1.0.0b260130 (2026 年 1 月 30 日)

リリース ノート:python-1.0.0b260130

🟡 ChatOptionsChatResponse/AgentResponseは現在、応答形式を考慮したジェネリックになっています

PR:#3305

ChatOptionsChatResponse、および AgentResponse は、応答形式の型によってパラメーター化されたジェネリック型になりました。 これにより、 response_formatで構造化された出力を使用する場合の型推論が向上します。

Before:

from agent_framework import ChatOptions, ChatResponse
from pydantic import BaseModel

class MyOutput(BaseModel):
    name: str
    score: int

options: ChatOptions = {"response_format": MyOutput}  # No type inference
response: ChatResponse = await client.get_response("Query", options=options)
result = response.value  # Type: Any

After:

from agent_framework import ChatOptions, ChatResponse
from pydantic import BaseModel

class MyOutput(BaseModel):
    name: str
    score: int

options: ChatOptions[MyOutput] = {"response_format": MyOutput}  # Generic parameter
response: ChatResponse[MyOutput] = await client.get_response("Query", options=options)
result = response.value  # Type: MyOutput | None (inferred!)

ヒント

これは、重大ではない機能強化です。 型パラメーターのない既存のコードは引き続き機能します。 上記のコード スニペットでオプションと応答に型を指定する必要はありません。これらはわかりやすくするためにここに示されています。


🟡 BaseAgent Claude Agent SDK のサポートが追加されました

PR:#3509

Python SDK には、Claude Agent SDK の BaseAgent 実装が含まれるようになり、Agent Framework でのファースト クラスのアダプター ベースの使用が可能になりました。


python-1.0.0b260128 (2026 年 1 月 28 日)

リリース ノート:python-1.0.0b260128

🔴 AIFunctionFunctionToolに名前を変更し、@ai_function@toolに名前を変更

PR:#3413

クラスとデコレーターは、業界用語との明確さと一貫性を保つため、名前が変更されました。

Before:

from agent_framework.core import ai_function, AIFunction

@ai_function
def get_weather(city: str) -> str:
    """Get the weather for a city."""
    return f"Weather in {city}: Sunny"

# Or using the class directly
func = AIFunction(get_weather)

After:

from agent_framework.core import tool, FunctionTool

@tool
def get_weather(city: str) -> str:
    """Get the weather for a city."""
    return f"Weather in {city}: Sunny"

# Or using the class directly
func = FunctionTool(get_weather)

🔴 GroupChat およびマゼンティックにファクトリパターンが追加されました; API の名前が変更されました

PR:#3224

グループ チャットに参加者ファクトリとオーケストレーター ファクトリを追加しました。 名前の変更も含まれます。

  • with_standard_managerwith_manager
  • participant_factoriesregister_participant

Before:

from agent_framework.workflows import MagenticBuilder

builder = MagenticBuilder()
builder.with_standard_manager(manager)
builder.participant_factories(factory1, factory2)

After:

from agent_framework.workflows import MagenticBuilder

builder = MagenticBuilder()
builder.with_manager(manager)
builder.register_participant(factory1)
builder.register_participant(factory2)

🔴 Github に名前を変更しました GitHub

PR:#3486

正しい大文字と小文字を使用するように、クラス名とパッケージ名が更新されました。

Before:

from agent_framework_github_copilot import GithubCopilotAgent

agent = GithubCopilotAgent(...)

After:

from agent_framework_github_copilot import GitHubCopilotAgent

agent = GitHubCopilotAgent(...)

python-1.0.0b260127 (2026 年 1 月 27 日)

リリース ノート:python-1.0.0b260127

🟡 BaseAgent GitHub Copilot SDK のサポートが追加されました

PR:#3404

Python SDK には、GitHub Copilot SDK 統合用の BaseAgent 実装が含まれるようになりました。


python-1.0.0b260123 (2026 年 1 月 23 日)

リリース ノート:python-1.0.0b260123

🔴 classmethod コンストラクターを使用して 1 つのクラスに簡略化されたコンテンツ タイプ

PR:#3252

( BaseContentから派生した) すべての古いコンテンツ タイプを、classmethods で単一の Content クラスに置き換えて、特定の型を作成しました。

完全な移行リファレンス

旧型 新しいメソッド
TextContent(text=...) Content.from_text(text=...)
DataContent(data=..., media_type=...) Content.from_data(data=..., media_type=...)
UriContent(uri=..., media_type=...) Content.from_uri(uri=..., media_type=...)
ErrorContent(message=...) Content.from_error(message=...)
HostedFileContent(file_id=...) Content.from_hosted_file(file_id=...)
FunctionCallContent(name=..., arguments=..., call_id=...) Content.from_function_call(name=..., arguments=..., call_id=...)
FunctionResultContent(call_id=..., result=...) Content.from_function_result(call_id=..., result=...)
FunctionApprovalRequestContent(...) Content.from_function_approval_request(...)
FunctionApprovalResponseContent(...) Content.from_function_approval_response(...)

追加の新しいメソッド (直接先行操作なし):

  • Content.from_text_reasoning(...) — 推論や思考に関する内容
  • Content.from_hosted_vector_store(...) — ベクターストアの参照の場合
  • Content.from_usage(...) — 使用状況/トークン情報の場合
  • Content.from_mcp_server_tool_call(...) / Content.from_mcp_server_tool_result(...) — MCP サーバー ツールの場合
  • Content.from_code_interpreter_tool_call(...) / Content.from_code_interpreter_tool_result(...) — コード インタープリターの場合
  • Content.from_image_generation_tool_call(...) / Content.from_image_generation_tool_result(...) — 画像生成用

型チェック

isinstance()チェックの代わりに、type プロパティを使用します。

Before:

from agent_framework.core import TextContent, FunctionCallContent

if isinstance(content, TextContent):
    print(content.text)
elif isinstance(content, FunctionCallContent):
    print(content.name)

After:

from agent_framework.core import Content

if content.type == "text":
    print(content.text)
elif content.type == "function_call":
    print(content.name)

基本的な例

Before:

from agent_framework.core import TextContent, DataContent, UriContent

text = TextContent(text="Hello world")
data = DataContent(data=b"binary", media_type="application/octet-stream")
uri = UriContent(uri="https://example.com/image.png", media_type="image/png")

After:

from agent_framework.core import Content

text = Content.from_text("Hello world")
data = Content.from_data(data=b"binary", media_type="application/octet-stream")
uri = Content.from_uri(uri="https://example.com/image.png", media_type="image/png")

🔴 注釈型はAnnotationおよびTextSpanRegion TypedDicts に簡略化されました。

PR:#3252

クラス ベースの注釈型を、より単純な TypedDict 定義に置き換えられました。

旧型 新しいタイプ
CitationAnnotation (クラス) Annotation (typedDict with type="citation")
BaseAnnotation (クラス) Annotation (TypedDict)
TextSpanRegion ( SerializationMixinを持つクラス) TextSpanRegion (TypedDict)
Annotations (型エイリアス) Annotation
AnnotatedRegions (型エイリアス) TextSpanRegion

Before:

from agent_framework import CitationAnnotation, TextSpanRegion

region = TextSpanRegion(start_index=0, end_index=25)
citation = CitationAnnotation(
    annotated_regions=[region],
    url="https://example.com/source",
    title="Source Title"
)

After:

from agent_framework import Annotation, TextSpanRegion

region: TextSpanRegion = {"start_index": 0, "end_index": 25}
citation: Annotation = {
    "type": "citation",
    "annotated_regions": [region],
    "url": "https://example.com/source",
    "title": "Source Title"
}

AnnotationTextSpanRegionTypedDictになったため、クラス インスタンスではなくディクショナリとして作成します。


🔴 response_format 検証エラーがユーザーに表示されるようになりました

PR:#3274

ChatResponse.valueおよびAgentResponse.valueは、スキーマ検証が失敗したとき、ValidationErrorを自動的に返すのではなくNoneを発生させるようになりました。

Before:

response = await agent.run(query, options={"response_format": MySchema})
if response.value:  # Returns None on validation failure - no error details
    print(response.value.name)

After:

from pydantic import ValidationError

# Option 1: Catch validation errors
try:
    print(response.value.name)  # Raises ValidationError on failure
except ValidationError as e:
    print(f"Validation failed: {e}")

# Option 2: Safe parsing (returns None on failure)
if result := response.try_parse_value(MySchema):
    print(result.name)

🔴 AG-UI 実行ロジックが簡略化されました。MCP と Anthropic クライアントの修正

PR:#3322

AG-UI での run メソッドのシグネチャと動作が簡略化されました。

Before:

from agent_framework.ag_ui import AGUIEndpoint

endpoint = AGUIEndpoint(agent=agent)
result = await endpoint.run(
    request=request,
    run_config={"streaming": True, "timeout": 30}
)

After:

from agent_framework.ag_ui import AGUIEndpoint

endpoint = AGUIEndpoint(agent=agent)
result = await endpoint.run(
    request=request,
    streaming=True,
    timeout=30
)

🟡 Anthropic クライアントで response_format 構造化された出力がサポートされるようになりました

PR:#3301

OpenAI クライアントや Azure クライアントと同様に、 response_format経由で Anthropic クライアントで構造化された出力解析を使用できるようになりました。


🟡 拡張された Azure AI 構成 (reasoningrai_config)

PR:#3403#3265

Azure AI のサポートは、エージェントの作成時に推論構成のサポートと rai_config によって拡張されました。


python-1.0.0b260116 (2026 年 1 月 16 日)

リリース ノート:python-1.0.0b260116

🔴 create_agent に名前を変更しました as_agent

PR:#3249

目的をより明確にするためにメソッドの名前が変更されました。

Before:

from agent_framework.core import ChatClient

client = ChatClient(...)
agent = client.create_agent()

After:

from agent_framework.core import ChatClient

client = ChatClient(...)
agent = client.as_agent()

🔴 WorkflowOutputEvent.source_executor_id に名前を変更しました executor_id

PR:#3166

API の整合性のために名前が変更されたプロパティ。

Before:

async for event in workflow.run_stream(...):
    if isinstance(event, WorkflowOutputEvent):
        executor = event.source_executor_id

After:

async for event in workflow.run_stream(...):
    if isinstance(event, WorkflowOutputEvent):
        executor = event.executor_id

🟡 AG-UI では、サービスで管理されるセッション継続性がサポートされます

PR:#3136

AG-UI では、複数ターンの継続性を維持するために、サービスで管理される会話 ID (Foundry マネージド セッション/スレッドなど) が保持されるようになりました。


python-1.0.0b260114 (2026 年 1 月 14 日)

リリース ノート:python-1.0.0b260114

🔴 リファクタリングされたオーケストレーション

PR:#3023

Agent Framework ワークフローでのオーケストレーションの広範なリファクタリングと簡略化:

  • グループ チャット: オーケストレーター Executor を専用のエージェント ベースと関数ベース (BaseGroupChatOrchestratorGroupChatOrchestratorAgentBasedGroupChatOrchestrator) に分割します。 ブロードキャスト モデルを使用して、スター トポロジに簡略化されました。
  • ハンドオフ: 単一レベル、コーディネーター、およびカスタム Executor のサポートが削除されました。 HandoffAgentExecutorで放送モデルに移行。
  • シーケンシャルと同時実行: AgentApprovalExecutorAgentRequestInfoExecutorを介してサブワークフローに依存する簡略化された要求情報メカニズム。

Before:

from agent_framework.workflows import GroupChat, HandoffOrchestrator

# Group chat with custom coordinator
group = GroupChat(
    participants=[agent1, agent2],
    coordinator=my_coordinator
)

# Handoff with single tier
handoff = HandoffOrchestrator(
    agents=[agent1, agent2],
    tier="single"
)

After:

from agent_framework.workflows import (
    GroupChatOrchestrator,
    HandoffAgentExecutor,
    AgentApprovalExecutor
)

# Group chat with star topology
group = GroupChatOrchestrator(
    participants=[agent1, agent2]
)

# Handoff with executor-based approach
handoff = HandoffAgentExecutor(
    agents=[agent1, agent2]
)

🔴 TypedDict および Generic として導入されたオプション

PR:#3140

型の安全性と IDE オートコンプリートを向上させるために、TypedDict を使用してオプションが型定義されています。

📖 完全な移行手順については、「 型指定されたオプション ガイド」を参照してください。

Before:

response = await client.get_response(
    "Hello!",
    model_id="gpt-4",
    temperature=0.7,
    max_tokens=1000,
)

After:

response = await client.get_response(
    "Hello!",
    options={
        "model": "gpt-4",
        "temperature": 0.7,
        "max_tokens": 1000,
    },
)

🔴 display_name 削除;単数形に context_provider ; middleware はリストである必要があります

PR:#3139

  • display_name エージェントから削除されたパラメーター
  • context_providers (複数形、受け入れリスト) を context_provider に変更 (単数形、1 個のみ可)
  • middleware リストが必要になりました (1 つのインスタンスを受け入れなくなりました)
  • AggregateContextProvider コードから削除された (必要に応じてサンプル実装を使用する)

Before:

from agent_framework.core import Agent, AggregateContextProvider

agent = Agent(
    name="my-agent",
    display_name="My Agent",
    context_providers=[provider1, provider2],
    middleware=my_middleware,  # single instance was allowed
)

aggregate = AggregateContextProvider([provider1, provider2])

After:

from agent_framework.core import Agent

# Only one context provider allowed; combine manually if needed
agent = Agent(
    name="my-agent",  # display_name removed
    context_provider=provider1,  # singular, only 1
    middleware=[my_middleware],  # must be a list now
)

# For multiple context providers, create your own aggregate
class MyAggregateProvider:
    def __init__(self, providers):
        self.providers = providers
    # ... implement aggregation logic

🔴 AgentRunResponse* に名前を変更しました AgentResponse*

PR:#3207

AgentRunResponse AgentRunResponseUpdateの名前が AgentResponse および AgentResponseUpdate に変更されました。

Before:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

After:

from agent_framework import AgentResponse, AgentResponseUpdate

🟡 YAML 定義ワークフロー用に追加された宣言型ワークフロー ランタイム

PR:#2815

宣言型 YAML ワークフローを実行するためのグラフ ベースのランタイムが追加され、カスタム ランタイム コードなしでマルチエージェント オーケストレーションが有効になりました。


🟡 MCP の読み込み/信頼性の向上

PR:#3154

MCP 統合により、接続損失の動作、読み込み時の改ページ位置のサポート、および表現制御オプションが改善されました。


🟡 Foundry A2ATool でターゲット URL のない接続がサポートされるようになりました

PR:#3127

A2ATool では、直接ターゲット URL が構成されていない場合でも、プロジェクト接続メタデータを介して Foundry でサポートされる A2A 接続を解決できるようになりました。


python-1.0.0b260107 (2026 年 1 月 7 日)

リリース ノート:python-1.0.0b260107

このリリースでは大きな変更はありません。


python-1.0.0b260106 (2026 年 1 月 6 日)

リリース ノート:python-1.0.0b260106

このリリースでは大きな変更はありません。


概要テーブル

リリース リリース ノート タイプ 変更 PR
1.0.0 PR のみ 🔴 速報 Message(..., text=...) 構造が完全に削除されました。代わりに contents=[...] を使用してテキスト メッセージを作成する #5062
1.0.0 PR のみ 🟡 強化 リリースされた Python パッケージ (agent-frameworkagent-framework-coreagent-framework-openaiagent-framework-foundry) では、 --preは不要になります。ベータ 版コネクタでは引き続き #5062
1.0.0 PR のみ 🔴 速報 python 埋め込みをagent_framework.foundryに移動しました。削除されたagent-framework-foundry パッケージの代わりに、FoundryEmbeddingClientFOUNDRY_MODELS_*agent-framework-azure-aiの設定を使用します #5056
1.0.0 PR のみ 🔴 速報 workflow.run() では、明示的な function_invocation_kwargs / client_kwargsが使用されるようになりました。グローバルと Executor ごとのターゲットは、Executor ID によって決定されます #5010
1.0.0 PR のみ 🟡 強化 GitHubCopilotAgent コンテキスト プロバイダー before_run / after_run フックを呼び出し、プロバイダーによって追加されたプロンプト コンテキストが含まれるようになりました #5013
1.0.0 PR のみ 🟡 強化 Python の構造化出力は、response_formatとして JSON スキーマ マッピングを受け入れ、response.valueに解析された JSON を表示するようになりました。 #5022
1.0.0rc6 PR のみ 🔴 速報 非推奨の Azure/OpenAI 互換性サーフェスが削除されました。代わりにプロバイダーをリードする OpenAI クライアントまたは Foundry Python クライアントを使用する #4990
1.0.0rc6 PR のみ 🔴 速報 プロバイダーをリードするリファクタリング: agent-framework-openaiagent-framework-foundryagent-framework-foundry-localの分割、OpenAI クライアントの名前変更、Foundry の agent_framework.foundryへの移行、Azure AI とアシスタントの互換性パスの廃止 #4818
1.0.0rc6 PR のみ 🔴 速報 agent-framework-core は意図的にスリムになりました。 agent-framework-openaiagent-framework-foundryなどの明示的なプロバイダー パッケージをインストールし、最小限のインストールで MCP ツールの mcp を手動でインストールするか、 agent-framework メタ パッケージを使用してより広範な既定のエクスペリエンスを実現する #4904
1.0.0rc6 PR のみ 🔴 速報 汎用 agent_framework.openai クライアントが明示的なルーティング信号を優先するようになりました。 OPENAI_API_KEY が設定されている場合、OpenAI は OpenAI にとどまり、Azure シナリオでは、 credentialazure_endpointなどの明示的な Azure ルーティング入力を渡してから、構成する必要があります api_version #4925
1.0.0rc5 / 1.0.0b260318 N/A (スケジュール済み) 🔴 速報 パブリックランタイムのkwargsはfunction_invocation_kwargsclient_kwargsに分割されました。ツールは現在、FunctionInvocationContext / ctx.sessionを使用しています。 #4581
1.0.0rc4 / 1.0.0b260311 Notes 🔴 速報 Azure AI の統合は現在azure-ai-projects 2.0 GA をターゲットとしており、foundry_features が削除され、allow_preview はプレビューのオプトインになっています。 #4536
1.0.0rc4 / 1.0.0b260311 Notes 🔴 速報 GitHub Copilot 統合で ToolInvocation / ToolResult が使用されるようになりました。 agent-framework-github-copilot には Python 3.11 以降が必要です #4551
1.0.0rc3 / 1.0.0b260304 Notes 🔴 速報 スキル提供者がコード定義のSkill / SkillResourceを追加します。以前のFileAgentSkillsProviderインポートとバックティックで囲まれたリソース参照を更新する必要があります。 #4387
1.0.0rc2 / 1.0.0b260226 Notes 🔴 速報 宣言型ワークフローは、InvokeToolInvokeFunctionToolWorkflowFactory.register_tool() に置き換えます。 #3716
1.0.0rc1 / 1.0.0b260219 Notes 🔴 速報 Azure パッケージ全体での統合 Azure 資格情報の処理 #4088
1.0.0rc1 / 1.0.0b260219 Notes 🔴 速報 Python 例外階層のAgentFrameworkExceptionにおける再設計 #4082
1.0.0rc1 / 1.0.0b260219 Notes 🔴 速報 プロバイダーの状態のスコープは次のとおりです。 source_id #3995
1.0.0rc1 / 1.0.0b260219 Notes 🔴 速報 カスタムget_response() の実装は Sequence[Message] を受け入れる必要があります。 #3920
1.0.0rc1 / 1.0.0b260219 Notes 🔴 速報 FunctionTool[Any] スキーマ パススルーのシムが削除されました #3907
1.0.0rc1 / 1.0.0b260219 Notes 🔴 速報 設定がAFBaseSettings/pydantic-settings からTypedDict + load_settings()に移動しました。 #3843#4032
1.0.0rc1 / 1.0.0b260219 Notes 🟡 強化 Reasoning-model ワークフローのハンドオフと履歴のシリアル化が修正されました #4083
1.0.0rc1 / 1.0.0b260219 Notes 🟡 強化 Bedrockがcore[all]に追加され、ツール選択の既定値が修正されました。 #3953
1.0.0rc1 / 1.0.0b260219 Notes 🟡 強化 AzureAIClient サポートされていないランタイムオーバーライドに関する警告 #3919
1.0.0rc1 / 1.0.0b260219 Notes 🟡 強化 workflow.as_agent() プロバイダーが設定されていない場合にローカル履歴を挿入する #3918
1.0.0rc1 / 1.0.0b260219 Notes 🟡 強化 OpenTelemetry トレース コンテキストが MCP 要求に伝搬される #3780
1.0.0rc1 / 1.0.0b260219 Notes 🟡 強化 Azure Functions に対する永続的なワークフローのサポートが追加されました #3630
1.0.0b260212 Notes 🔴 速報 Hosted*Tool クラスが削除されました。クライアント get_*_tool() メソッドを使用してホステッド ツールを作成する #3634
1.0.0b260212 Notes 🔴 速報 セッション/コンテキスト プロバイダー パイプラインの最終処理: AgentThread 削除、使用 AgentSession + context_providers #3850
1.0.0b260212 Notes 🔴 速報 チェックポイント モデル/ストレージリファクタリング (workflow_id 削除、 previous_checkpoint_id 追加、ストレージ動作の変更) #3744
1.0.0b260212 Notes 🟡 強化 AzureOpenAIResponsesClient は Foundry プロジェクト エンドポイントから、またはAIProjectClientから作成できます。 #3814
1.0.0b260212 Notes 🔴 速報 ミドルウェアの継続がcontextを受け入れなくなりました。call_next(context)call_next()に更新してください。 #3829
1.0.0b260210 Notes 🔴 速報 send_responses() / send_responses_streaming() 削除;使用 workflow.run(responses=...) #3720
1.0.0b260210 Notes 🔴 速報 SharedStateState; ワークフロー状態 API が同期しており、チェックポイント状態フィールドの名前が変更されました #3667
1.0.0b260210 Notes 🔴 速報 オーケストレーション ビルダーがagent_framework.orchestrationsパッケージに移動しました #3685
1.0.0b260210 Notes 🟡 強化 Python エージェントの応答に追加されたバックグラウンド応答と continuation_token サポート #3808
1.0.0b260210 Notes 🟡 強化 サイド バイ サイドで追加されたセッション/コンテキスト プレビューの種類 (SessionContextBaseContextProvider) #3763
1.0.0b260210 Notes 🟡 強化 ストリーミング コード インタープリターの更新に、増分コード デルタが含まれるようになりました #3775
1.0.0b260210 Notes 🟡 強化 @tool デコレーターが明示的なスキーマ処理のサポートを追加 #3734
1.0.0b260210 Notes 🔴 速報 register_executor() / register_agent() WorkflowBuilderから削除されました。インスタンスを直接使用し、状態を分離するヘルパー メソッドを使用してください。 #3781
1.0.0b260210 Notes 🔴 速報 ChatAgentAgentChatMessageMessageRawChatAgentRawAgentChatClientProtocolSupportsChatGetResponse #3747
1.0.0b260210 Notes 🔴 速報 型 API レビュー: Role/FinishReason 型の変更、応答/更新コンストラクターの厳密化、補助関数の名前が from_updates に変更されること、および try_parse_value の削除 #3647
1.0.0b260210 Notes 🔴 速報 run / get_responseResponseStreamを中心に統合されたAPIたち #3379
1.0.0b260210 Notes 🔴 速報 AgentRunContext に名前が変更された AgentContext #3714
1.0.0b260210 Notes 🔴 速報 AgentProtocol に名前が変更された SupportsAgentRun #3717
1.0.0b260210 Notes 🔴 速報 ミドルウェア next パラメーターの名前が次に変更されました call_next #3735
1.0.0b260210 Notes 🔴 速報 TypeVar の名前付けの標準化 (TNameNameT) #3770
1.0.0b260210 Notes 🔴 速報 現在のエージェント応答フローに合わせた、エージェントとしてのワークフローの出力/ストリーム動作 #3649
1.0.0b260210 Notes 🔴 速報 Fluent ビルダー メソッドが 6 つのビルダー間でコンストラクター パラメーターに移動されました #3693
1.0.0b260210 Notes 🔴 速報 WorkflowEvent判別機能を使用して単一のtypeに統合されたワークフロー イベント。isinstance()event.type == "..." #3690
1.0.0b260130 Notes 🟡 強化 ChatOptions / ChatResponse / AgentResponse 汎用的な応答フォーマット #3305
1.0.0b260130 Notes 🟡 強化 BaseAgent Claude Agent SDK 統合のサポートが追加されました #3509
1.0.0b260128 Notes 🔴 速報 AIFunctionFunctionTool@ai_function@tool #3413
1.0.0b260128 Notes 🔴 速報 GroupChat/Magentic のファクトリ パターン。 with_standard_managerwith_managerparticipant_factoriesregister_participant #3224
1.0.0b260128 Notes 🔴 速報 GithubGitHub #3486
1.0.0b260127 Notes 🟡 強化 BaseAgent GitHub Copilot SDK 統合のサポートが追加されました #3404
1.0.0b260123 Notes 🔴 速報 classmethods を使用して単一の Content クラスに統合されたコンテンツ タイプ #3252
1.0.0b260123 Notes 🔴 速報 response_format 検証エラーが発生するようになりました ValidationError #3274
1.0.0b260123 Notes 🔴 速報 AG-UI 実行ロジックが簡略化されました #3322
1.0.0b260123 Notes 🟡 強化 Anthropic クライアントが構造化出力 response_format サポートを追加 #3301
1.0.0b260123 Notes 🟡 強化 reasoningrai_configのサポートによって拡張された Azure AI 構成 #3403#3265
1.0.0b260116 Notes 🔴 速報 create_agentas_agent #3249
1.0.0b260116 Notes 🔴 速報 source_executor_idexecutor_id #3166
1.0.0b260116 Notes 🟡 強化 AG-UI では、サービスで管理されるセッション/スレッドの継続性がサポートされます #3136
1.0.0b260114 Notes 🔴 速報 リファクタリングされたオーケストレーション (GroupChat、ハンドオフ、シーケンシャル、同時実行) #3023
1.0.0b260114 Notes 🔴 速報 TypedDict および Generic としてのオプション #3140
1.0.0b260114 Notes 🔴 速報 display_name 削除; context_providerscontext_provider (単数形)、 middleware はリストである必要があります #3139
1.0.0b260114 Notes 🔴 速報 AgentRunResponse / AgentRunResponseUpdate に名前を変更しました AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 Notes 🟡 強化 YAML 定義ワークフロー用に追加された宣言型ワークフロー ランタイム #2815
1.0.0b260114 Notes 🟡 強化 MCP の読み込み/信頼性の向上 (接続損失処理、改ページ位置、表現制御) #3154
1.0.0b260114 Notes 🟡 強化 Foundry A2ATool では、明示的なターゲット URL のない接続がサポートされます #3127
1.0.0b260107 Notes 重要な変更なし
1.0.0b260106 Notes 重要な変更なし

次のステップ