このドキュメントでは、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-framework、agent-framework-core、agent-framework-openai、およびagent-framework-foundryがリリースされ、--preは不要になりました。 -
agent-framework-ag-ui、agent-framework-azurefunctions、agent-framework-copilotstudio、agent-framework-foundry-local、agent-framework-github-copilot、agent-framework-mem0、agent-framework-ollamaなどのベータ コネクタには、引き続き--preが必要です。 - 1 つのインストール コマンドにベータ パッケージが含まれている場合は、そのコマンドに
--preしてください。
🔴 Foundry が Python 埋め込みとモデルエンドポイント設定を所有するようになりました
PR:#5056
PR #5056 は、スタンドアロンの agent-framework-azure-ai パッケージを削除し、Python 埋め込みサーフェスを agent-framework-foundry および agent_framework.foundryに移動します。
-
FoundryEmbeddingClientからFoundryEmbeddingOptions、FoundryEmbeddingSettings、およびagent_framework.foundryを使用します。 - Foundry チャット、サービスマネージド エージェント、メモリ プロバイダー、埋め込み用の
agent-framework-foundryをインストールします。 -
agent_framework.azureは、AzureAIInferenceEmbeddingClient、AzureAIInferenceEmbeddingOptions、AzureAIInferenceEmbeddingSettings、またはAzureAISettingsをエクスポートしなくなりました。 - Foundry 埋め込みでは、
FOUNDRY_MODELS_ENDPOINT、FOUNDRY_MODELS_API_KEY、FOUNDRY_EMBEDDING_MODEL、オプションのFOUNDRY_IMAGE_EMBEDDING_MODELが使用されるようになりました。 -
FoundryChatClientFoundryAgentFOUNDRY_PROJECT_ENDPOINTやFOUNDRY_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_kwargsとclient_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_MODEL、OPENAI_CHAT_MODEL、OPENAI_CHAT_COMPLETION_MODEL、およびOPENAI_EMBEDDING_MODELが使用されるようになりました。 - Azure OpenAI の設定で、
AZURE_OPENAI_MODEL、AZURE_OPENAI_CHAT_MODEL、AZURE_OPENAI_CHAT_COMPLETION_MODEL、およびAZURE_OPENAI_EMBEDDING_MODELが使用されるようになりました。 - Anthropic では
ANTHROPIC_CHAT_MODELが使用され、Foundry Local ではFOUNDRY_LOCAL_MODELが使用されるようになりました。 - Anthropic パッケージには、
AnthropicFoundryClient、AnthropicBedrockClient、AnthropicVertexClientなどのプロバイダーホスト型ラッパーも追加されます。
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 コンテキスト プロバイダー パイプラインと、複数呼び出しの実行中にフレームワークで管理される履歴を保持する方法を更新します。
-
ContextProviderHistoryProviderが正規の Python 基底クラスになりました。 -
BaseContextProviderとBaseHistoryProvider互換性のために非推奨のエイリアスとして一時的に残りますが、新しいコードは新しい名前に移行する必要があります。 -
SessionContextでは、プロバイダーが追加したチャットまたは関数ミドルウェアをextend_middleware()で収集し、get_middleware()を介してフラット化されたリストを公開できるようになりました。 -
Agent(..., require_per_service_call_history_persistence=True)は、完全なrun()の後に 1 回行うのではなく、各モデル呼び出しごとに履歴プロバイダーを実行します。 - このモードは、フレームワークで管理されたローカル履歴を対象としており、
session.service_session_idやoptions={"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 シナリオには、
OpenAIChatClient、OpenAIChatCompletionClient、およびOpenAIEmbeddingClientを使用します。 - Foundry プロジェクトの推論に
FoundryChatClientを使用し、プロンプト エージェントまたは HostedAgents にFoundryAgentします。 - 現在の
agent_framework.azure名前空間では、Azure AI Search、Cosmos 履歴、Azure Functions、永続的なワークフローなど、残りの Azure 統合が対象になりました。 Foundry チャット、エージェント、メモリ、および埋め込みクライアントは、agent_framework.foundryの下に配置されています。
古い Python コードを移行する場合は、次の代替コードを使用します。
-
AzureOpenAIResponsesClient→OpenAIChatClient -
AzureOpenAIChatClient→OpenAIChatCompletionClient -
AzureOpenAIEmbeddingClient→OpenAIEmbeddingClient -
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_id、deployment_name、model_deployment_nameなどの古いパラメーターを置き換えます。 - 新しい Azure OpenAI コードの場合は、
agent_framework.openaiクライアントを使用します。 以前の互換性シムAzureOpenAI*は、その後#4990で削除されました。 - 新しい Foundry コードの場合は、直接プロジェクトの推論、プロンプト エージェントと HostedAgents の
FoundryChatClient、ローカル ランタイムのFoundryAgentにFoundryLocalClientを使用します。 -
AzureAIClient、AzureAIProjectAgentProvider、AzureAIAgentClient、AzureAIAgentsProvider、および 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 クラスにマップします。
-
AzureOpenAIResponsesClient→OpenAIChatClient -
AzureOpenAIChatClient→OpenAIChatCompletionClient -
AzureOpenAIEmbeddingClient→OpenAIEmbeddingClient -
AzureOpenAIAssistantsClientの応答 API を直接移行するにはOpenAIChatClientを使用するか、サービスで管理されている Foundry エージェントが必要な場合はFoundryAgentを使用してください。
コードの変更は、ほとんどの場合、クラス名の移動と deployment_name → modelです。 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用のOpenAIChatClient、AZURE_OPENAI_CHAT_COMPLETION_MODEL用のOpenAIChatCompletionClient、および共有フォールバックとしてAZURE_OPENAI_MODELが使用されるようになりました。 - Azure OpenAI リソース URL の
azure_endpointを使用するか、完全なbase_urlURL を既に持っている場合は.../openai/v1し、使用している Azure OpenAI API サーフェスのapi_versionを設定します - cloud Foundry クライアントの
FOUNDRY_PROJECT_ENDPOINT、FOUNDRY_MODEL、FOUNDRY_AGENT_NAME、FOUNDRY_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が構成されている場合、credentialやazure_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(),
)
埋め込みシナリオの場合は、次をマップします。
-
AzureOpenAIEmbeddingClient→OpenAIEmbeddingClient -
AZURE_OPENAI_EMBEDDING_MODEL→model -
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.kwargsとctx.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_kwargs と client_kwargs を追加します。 ツールの場合は、 FunctionInvocationContext として注釈が付けられたパラメーターを使用します。パラメーターには、 ctx、 context、またはその他の注釈付き名前を指定できます。 明示的なスキーマ/入力モデルを指定すると、 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-copilotはgithub-copilot-sdk>=0.1.32を追跡するようになりました。
- ツール ハンドラーは、生の
ToolInvocationではなく、dictデータクラスを受け取ります。 -
ToolResultやresult_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_token、ad_token_provider、およびget_entra_auth_tokenパラメーター/ヘルパーは、Azure 関連のすべての Python パッケージで統一されたcredential パラメーターに置き換えられました。 新しい方法では、トークンの自動キャッシュと更新に azure.identity.get_bearer_token_provider を使用します。
影響を受けるクラス:AzureOpenAIChatClient、 AzureOpenAIResponsesClient、 AzureOpenAIAssistantsClient、 AzureAIClient、 AzureAIAgentClient、 AzureAIProjectAgentProvider、 AzureAIAgentsProvider、 AzureAISearchContextProvider、 PurviewClient、 PurviewPolicyMiddleware、 PurviewChatPolicyMiddleware。
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 パラメーターは、TokenCredential、AsyncTokenCredential、または呼び出し可能なトークン プロバイダーを受け取ります。 トークンのキャッシュと更新は自動的に処理されます。
🔴 再設計された 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
例外 (ServiceException、 ServiceInitializationError、 ServiceResponseException、 ServiceContentFilterException、 ServiceInvalidAuthError、 ServiceInvalidExecutionSettingsError、 ServiceInvalidRequestError、 ServiceInvalidResponseError、 AgentExecutionException、 AgentInvocationError、 AgentInitializationError、 AgentSessionException、 ChatClientInitializationError、 CheckpointDecodingError) を削除しました。
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")
🔴 チャット/エージェント メッセージ入力の配置 (run と get_response)
PR:#3920
チャット クライアント get_response の実装が一貫して Sequence[Message]を受け取るようになりました。
agent.run(...) は柔軟性を維持し (str、 Content、 Message、シーケンスなど)、チャット クライアントを呼び出す前に入力を正規化します。
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()に置き換えられました。
pydantic-settingsベースのAFBaseSettings クラスは、TypedDictとload_settings()を使用する軽量の関数ベースの設定システムに置き換えられました。
pydantic-settingsの依存関係が完全に削除されました。
すべての設定クラス ( OpenAISettings、 AzureOpenAISettings、 AnthropicSettingsなど) が 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()]
🔴 セッション/コンテキスト プロバイダー パイプラインの最終処理 (AgentSession、 context_providers)
PR:#3850
Python セッションとコンテキスト プロバイダーの移行が完了しました。
AgentThread 以前のコンテキスト プロバイダー型が削除されました。
-
AgentThread→AgentSession -
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_edge、 add_fan_out_edges、 add_fan_in_edges、 add_chain、 add_switch_case_edge_group、 add_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()
🔴
ChatAgentはAgentに名前を変更し、ChatMessageはMessageに名前を変更しました。
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")])
注
ChatClient、 ChatResponse、 ChatOptions、および ChatMessageStore は、この変更によって名前が変更 されません 。
🔴 Types API は、応答/メッセージ モデル間で更新を確認します
PR:#3647
このリリースには、メッセージ/応答の入力とヘルパー API の広範で破壊的なクリーンアップが含まれています。
-
RoleFinishReasonは、既知の値のNewTypestrRoleLiteralを持つ/のラッパーをFinishReasonLiteralするようになりました。 それらを文字列として扱います (.value使用法はありません)。 -
Message構築はMessage(role, contents=[...])で標準化されています。contents内の文字列はテキスト コンテンツに自動的に変換されます。 -
ChatResponseAgentResponseコンストラクターがmessages=(単一のMessageまたはシーケンス) を中心とするようになりました。従来のtext=コンストラクターの使用は応答から削除されました。 -
ChatResponseUpdateAgentResponseUpdatetext=を受け入れなくなりました。contents=[Content.from_text(...)]を使用します。 - 更新の組み合わせヘルパー名が簡略化されました。
-
try_parse_valueがChatResponseおよび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_valueをtry/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)
🔴 コア コンテキスト/プロトコルの種類の名前変更
| 以前は | クリック後 |
|---|---|
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 名 (TName → NameT)
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 つのビルダー (WorkflowBuilder、 SequentialBuilder、 ConcurrentBuilder、 GroupChatBuilder、 MagenticBuilder、 HandoffBuilder) の単一構成 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 メソッドを使用して設定しました) -
SequentialBuilder、ConcurrentBuilder、GroupChatBuilder、および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
SessionContextやBaseContextProviderなど、増分移行用のレガシ API と共に、新しいセッション/コンテキスト パイプラインの種類が導入されました。
🟡 コード インタープリター ストリーミングに増分コード デルタが含まれるようになりました
PR:#3775
ストリーミング コード インタープリターは現在、ストリーミング コンテンツ内でコードの差分の更新を確認できるため、UIが生成されたコードを段階的にレンダリング可能になっています。
🟡
@tool では、明示的なスキーマ処理がサポートされます
PR:#3734
推定されたスキーマ出力でカスタマイズが必要な場合に、ツール定義で明示的なスキーマ処理を使用できるようになりました。
python-1.0.0b260130 (2026 年 1 月 30 日)
リリース ノート:python-1.0.0b260130
🟡
ChatOptionsとChatResponse/AgentResponseは現在、応答形式を考慮したジェネリックになっています
PR:#3305
ChatOptions、 ChatResponse、および 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
🔴
AIFunctionをFunctionToolに名前を変更し、@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_manager→with_manager -
participant_factories→register_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"
}
注
AnnotationとTextSpanRegionがTypedDictになったため、クラス インスタンスではなくディクショナリとして作成します。
🔴
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 構成 (reasoning、 rai_config)
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 を専用のエージェント ベースと関数ベース (
BaseGroupChatOrchestrator、GroupChatOrchestrator、AgentBasedGroupChatOrchestrator) に分割します。 ブロードキャスト モデルを使用して、スター トポロジに簡略化されました。 -
ハンドオフ: 単一レベル、コーディネーター、およびカスタム Executor のサポートが削除されました。
HandoffAgentExecutorで放送モデルに移行。 -
シーケンシャルと同時実行:
AgentApprovalExecutorとAgentRequestInfoExecutorを介してサブワークフローに依存する簡略化された要求情報メカニズム。
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-framework、 agent-framework-core、 agent-framework-openai、 agent-framework-foundry) では、 --preは不要になります。ベータ 版コネクタでは引き続き |
#5062 |
| 1.0.0 | PR のみ | 🔴 速報 | python 埋め込みをagent_framework.foundryに移動しました。削除されたagent-framework-foundry パッケージの代わりに、FoundryEmbeddingClient、FOUNDRY_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-openai、 agent-framework-foundry、 agent-framework-foundry-localの分割、OpenAI クライアントの名前変更、Foundry の agent_framework.foundryへの移行、Azure AI とアシスタントの互換性パスの廃止 |
#4818 |
| 1.0.0rc6 | PR のみ | 🔴 速報 |
agent-framework-core は意図的にスリムになりました。 agent-framework-openai や agent-framework-foundryなどの明示的なプロバイダー パッケージをインストールし、最小限のインストールで MCP ツールの mcp を手動でインストールするか、 agent-framework メタ パッケージを使用してより広範な既定のエクスペリエンスを実現する |
#4904 |
| 1.0.0rc6 | PR のみ | 🔴 速報 | 汎用 agent_framework.openai クライアントが明示的なルーティング信号を優先するようになりました。 OPENAI_API_KEY が設定されている場合、OpenAI は OpenAI にとどまり、Azure シナリオでは、 credential や azure_endpointなどの明示的な Azure ルーティング入力を渡してから、構成する必要があります api_version |
#4925 |
| 1.0.0rc5 / 1.0.0b260318 | N/A (スケジュール済み) | 🔴 速報 | パブリックランタイムのkwargsはfunction_invocation_kwargsとclient_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 | 🔴 速報 | 宣言型ワークフローは、InvokeTool を InvokeFunctionTool と WorkflowFactory.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 | 🔴 速報 |
SharedState → State; ワークフロー状態 API が同期しており、チェックポイント状態フィールドの名前が変更されました |
#3667 |
| 1.0.0b260210 | Notes | 🔴 速報 | オーケストレーション ビルダーがagent_framework.orchestrationsパッケージに移動しました |
#3685 |
| 1.0.0b260210 | Notes | 🟡 強化 | Python エージェントの応答に追加されたバックグラウンド応答と continuation_token サポート |
#3808 |
| 1.0.0b260210 | Notes | 🟡 強化 | サイド バイ サイドで追加されたセッション/コンテキスト プレビューの種類 (SessionContext、 BaseContextProvider) |
#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 | 🔴 速報 |
ChatAgent → Agent、 ChatMessage → Message、 RawChatAgent → RawAgent、 ChatClientProtocol → SupportsChatGetResponse |
#3747 |
| 1.0.0b260210 | Notes | 🔴 速報 | 型 API レビュー: Role/FinishReason 型の変更、応答/更新コンストラクターの厳密化、補助関数の名前が from_updates に変更されること、および try_parse_value の削除 |
#3647 |
| 1.0.0b260210 | Notes | 🔴 速報 |
run
/
get_responseとResponseStreamを中心に統合された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 の名前付けの標準化 (TName → NameT) |
#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 | 🔴 速報 |
AIFunction → FunctionTool、 @ai_function → @tool |
#3413 |
| 1.0.0b260128 | Notes | 🔴 速報 | GroupChat/Magentic のファクトリ パターン。 with_standard_manager → with_manager、 participant_factories → register_participant |
#3224 |
| 1.0.0b260128 | Notes | 🔴 速報 |
Github → GitHub |
#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 | 🟡 強化 |
reasoningとrai_configのサポートによって拡張された Azure AI 構成 |
#3403、 #3265 |
| 1.0.0b260116 | Notes | 🔴 速報 |
create_agent → as_agent |
#3249 |
| 1.0.0b260116 | Notes | 🔴 速報 |
source_executor_id → executor_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_providers → context_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 | — | 重要な変更なし | — |