Panduan Perubahan Signifikan Python 2026

Dokumen ini mencantumkan semua perubahan signifikan dalam rilis Python sejak awal 2026, termasuk perubahan yang merusak dan peningkatan penting yang bisa memengaruhi kode Anda. Setiap perubahan ditandai sebagai:

  • πŸ”΄ Melanggar β€” Memerlukan perubahan kode untuk ditingkatkan
  • 🟑 Peningkatan β€” Kemampuan atau peningkatan baru; kode yang ada terus berfungsi

Dokumen ini melacak perubahan Python yang signifikan di semua rilis 2026, jadi silakan merujuknya saat meningkatkan antar versi untuk memastikan Anda tidak melewatkan perubahan penting apa pun. Untuk instruksi peningkatan terperinci tentang topik tertentu (misalnya, migrasi opsi), lihat panduan peningkatan tertaut atau PR yang ditautkan.


python-1.8.0 (4 Juni 2026)

Catatan Rilis:python-1.8.0

πŸ”΄ github-copilot-sdk diperbarui ke v1.0.0 dengan perubahan API yang tidak kompatibel

PR:#6292

PR #6292 meningkatkan agent-framework-github-copilot dari github-copilot-sdk 1.0.0b2 ke rilis stabil 1.0.0, menyesuaikan diri dengan semua perubahan API breaking yang diperkenalkan dalam versi GA.

  • SubprocessConfig dihapus β€” gunakan RuntimeConnection.for_stdio(path=...) + argumen kata kunci pada CopilotClient (connection, , log_levelbase_directory).
  • Jalur impor dipindahkan β€” copilot.generated.session_events β†’ copilot.session_events.
  • Pengaturan diganti namanya β€” copilot_home β†’ base_directory; variabel lingkungan sekarang GITHUB_COPILOT_BASE_DIRECTORY (adalah GITHUB_COPILOT_COPILOT_HOME).
  • Penangan izin β€” gunakan jenis keputusan konkret alih-alih PermissionRequestResult(kind=...). Fitur bawaan PermissionHandler.approve_all menggantikan pola persetujuan manual.
  • Handler penolakan bawaan β€” kini mengembalikan PermissionDecisionUserNotAvailable() (sesuai dengan perilaku fallback SDK).
  • Jenis penangan izin β€” kini mendukung callback sinkron dan asinkron (Callable[..., PermissionRequestResult | Awaitable[PermissionRequestResult]]).

Before:

from copilot import CopilotClient, SubprocessConfig
from copilot.generated.session_events import PermissionRequest
from copilot.session import PermissionRequestResult

# Client construction
client = CopilotClient(SubprocessConfig(cli_path="/path/to/cli", log_level="debug", copilot_home="/custom/home"))

# Permission handler
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
    if request.kind == "shell":
        return PermissionRequestResult(kind="approved")
    return PermissionRequestResult(kind="denied-interactively-by-user")

# Agent
agent = GitHubCopilotAgent(default_options={"copilot_home": "/custom/home", "on_permission_request": approve_shell})

After:

from copilot import CopilotClient, RuntimeConnection
from copilot.generated.rpc import PermissionDecisionDeniedInteractivelyByUser, PermissionDecisionUserNotAvailable
from copilot.session import PermissionHandler, PermissionRequestResult
from copilot.session_events import PermissionRequest

# Client construction
client = CopilotClient(connection=RuntimeConnection.for_stdio(path="/path/to/cli"), log_level="debug", base_directory="/custom/home")

# Permission handler β€” use concrete decision types or PermissionHandler.approve_all
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
    if request.kind == "shell":
        return PermissionHandler.approve_all(request, context)
    return PermissionDecisionUserNotAvailable()

# Agent
agent = GitHubCopilotAgent(default_options={"base_directory": "/custom/home", "on_permission_request": approve_shell})

🟑 Penampilan alat secara bertahap melalui FunctionInvocationContext

PR:#6233

Menambahkan dukungan untuk menampilkan alat secara bertahap selama proses berjalan menggunakan FunctionInvocationContext. Alat sekarang dapat ditambahkan atau dihapus secara dinamis berdasarkan hasil alat sebelumnya dalam eksekusi agen yang sama.


🟑 Penemuan keterampilan berbasis MCP (McpSkillsSource)

PR:#6169

Menambahkan McpSkillsSource ke agent-framework-core, memungkinkan penemuan dan pemuatan keterampilan melalui server MCP.


🟑 Dukungan output terstruktur asli Bedrock melalui Converse API

PR:#6052

agent-framework-bedrock sekarang menerapkan dukungan output terstruktur asli melalui AWS Bedrock Converse API, memungkinkan response_format untuk bekerja dengan model Bedrock.


🟑 Integrasi Foundry Adaptive Evals (pembuatan rubrik)

PR:#6101

Menambahkan integrasi Foundry Adaptive Evals ke agent-framework-foundry untuk pembuatan rubrik otomatis dalam alur kerja evaluasi.


🟑 Paket klien penyematan Mistral AI

PR:#5480

Paket baru agent-framework-mistral yang menyediakan klien penyematan Mistral AI.


🟑 agent-framework-declarative dipromosikan menjadi kandidat rilis

PR:#6256

Paket agent-framework-declarative dinaikkan dari tahap beta ke tahap kandidat rilis.


python-1.7.0 (Mei 28, 2026)

Catatan Rilis:python-1.7.0

πŸ”΄ Deklaratif: tindakan khusus Python dihapus dan jenis alias diganti namanya menjadi nama kanonis C#

PR:#6126

PR #6126 menghapus tindakan deklaratif khusus Python dan mengganti nama jenis alias agar sesuai dengan nama kanonis C# untuk konsistensi lintas bahasa.

  • Jenis tindakan deklaratif yang hanya ada di Python dan tidak memiliki padanan di C# telah dihapus.
  • Jenis alias aksi kini diselaraskan dengan konvensi penamaan C#; perbarui file YAML/JSON deklaratif yang sudah ada.

🟑 HarnessAgent dan penyedia harness untuk agen latar belakang

PRs:#6041, #6069

Menambahkan HarnessAgent ke agent-framework-core, yang memungkinkan pola agen berbasis harness untuk pemrosesan latar belakang.


🟑 A2AAgentSession dengan ID tugas yang dirujuk dan dukungan yang memerlukan input

PR:#5980

Menambahkan A2AAgentSession ke agent-framework-a2a dan agent-framework-core, dengan dukungan untuk ID tugas yang dirujuk dan alur yang memerlukan input untuk interaksi protokol A2A.


🟑 API eksperimental untuk konversi dan penerapan agen prompt

PR:#5959

Menambahkan API eksperimental ke agent-framework-foundry untuk mengonversi definisi prompt menjadi agen dan menyebarkannya secara terprogram.


python-1.6.0 (Mei 21, 2026)

Catatan Rilis:python-1.6.0

πŸ”΄ Instrumentasi diaktifkan secara default

PR:#5865

PR #5865 memungkinkan instrumentasi OpenTelemetry secara default di agent-framework-core dan agent-framework-foundry.

  • Setiap eksekusi agen kini secara otomatis menghasilkan span telemetri tanpa perlu pengaktifan eksplisit.
  • Jika sebelumnya Anda menonaktifkan instrumentasi atau memiliki alur telemetri kustom, verifikasi bahwa perilaku default tidak bertentangan.
  • Untuk menonaktifkan, berikan enable_instrumentation=False jika berlaku.

Before:

from agent_framework import Agent
from agent_framework.observability import configure_otel_providers

# Had to explicitly enable instrumentation
configure_otel_providers(enable_console_exporters=True)

agent = Agent(client=client, enable_instrumentation=True)

After:

from agent_framework import Agent

# Instrumentation is now on by default β€” no opt-in needed
agent = Agent(client=client)

# To explicitly disable:
agent = Agent(client=client, enable_instrumentation=False)

🟑 Alat shell dengan dukungan eksekusi lokal dan Docker

PR:#5664

Menambahkan alat shell bawaan ke agent-framework-core yang mendukung eksekusi lokal dan eksekusi kotak pasir berbasis Docker.


🟑Paket penyedia CodeAct baru agent-framework-monty

PR:#5915

Memperkenalkan agent-framework-monty paket untuk integrasi CodeAct yang didukung Monty (tahap alfa).


python-1.4.0 (Mei 14, 2026)

Catatan Rilis:python-1.4.0

πŸ”΄ [Experimental Skills API] Selaraskan deteksi folder skill file dengan spesifikasi agentskills.io

PR:#5807

PR #5807 memperbarui API keterampilan eksperimental untuk menyelaraskan mekanisme penemuan folder keterampilan berbasis berkas dengan spesifikasi agentskills.io.

  • Logika resolusi folder keterampilan telah berubah; perbarui tata letak direktori keterampilan kustom jika menggunakan API keterampilan eksperimental.

πŸ”΄ [Experimental Skills API] Ekstrak metadata spesifikasi keterampilan ke dalam SkillFrontmatter

PR:#5775

PR #5775 memindahkan metadata spesifikasi keterampilan ke dalam klasifikasi data khusus SkillFrontmatter .

  • Jika Anda langsung mengakses bidang metadata keterampilan, perbarui referensi untuk menggunakan SkillFrontmatter atribut.

πŸ”΄ DevUI: Mengencangkan kontrol akses default dan postur CORS

PR:#5740

PR #5740 mengencangkan kontrol akses default dan konfigurasi CORS untuk agent-framework-devui.

  • Origin CORS default sekarang lebih ketat.
  • Jika konfigurasi DevUI Anda bergantung pada akses lintas domain dari domain kustom, konfigurasikan origin yang diizinkan secara eksplisit.

πŸ”΄ A2A: Migrasi ke a2a-sdk v1.0

PR:#5752

PR #5752 bermigrasi agent-framework-a2a ke a2a-sdk v1.0.

  • Jenis protokol A2A dan API transportasi mengikuti konvensi a2a-sdk 1.0.
  • Perbarui kode apa pun yang berinteraksi langsung dengan jenis protokol A2A.

🟑 AG-UI: Saluran tampilan hasil alat dan promosi kandidat rilis

PRs:#5762, #5844

Menambahkan saluran penayangan hasil alat ke agent-framework-ag-ui dan menjadikan paket tersebut memasuki tahap kandidat rilis.


python-1.3.0 (7 Mei 2026)

Catatan Rilis:python-1.3.0

πŸ”΄ [Experimental Skills API] Merestrukturisasi keterampilan agen ke arsitektur multi-sumber

PR:#5584

PR #5584 merestrukturisasi API keterampilan eksperimental untuk mendukung pemuatan keterampilan multi-sumber.

  • Logika pendaftaran keterampilan dan penemuan berubah untuk fitur keterampilan eksperimental.
  • Jika menggunakan API keterampilan eksperimental, tinjau konvensi pemuatan multi-sumber baru.

🟑 ClassSkill untuk definisi keterampilan berbasis kelas

PR:#5678

Menambahkan ClassSkill ke agent-framework-core untuk definisi keterampilan berbasis kelas dengan metadata deklaratif dan penemuan metode secara otomatis.


🟑 Pertahanan terhadap injeksi prompt pada kontrol aliran informasi

PR:#5331

Menambahkan mekanisme kontrol aliran informasi ke agent-framework-core yang membantu melindungi dari serangan injeksi yang diminta.


🟑 github-copilot-sdk ditingkatkan ke v1.0.0b2

PR:#5665

Meningkatkan agent-framework-github-copilot ke github-copilot-sdk>=1.0.0b2, menambahkan instruction_directories, konfigurasi copilot_home, dan penerusan opsi runtime saat melanjutkan sesi.


🟑 Menerapkan approval_mode di agen Claude dan GitHub Copilot

PR:#5562

agent-framework-claude dan agent-framework-github-copilot kini mewajibkan penggunaan dekorator approval_mode pada tool fungsi, selaras dengan implementasi agen lainnya.


🟑Dukungan pilihan alat OpenAI dan Gemini allowed_tools

PR:#5322

Menambahkan dukungan untuk opsi pemilihan alat allowed_tools pada agent-framework-openai, sehingga Anda dapat membatasi alat mana saja yang dapat dipanggil oleh model.


python-1.2.2 (29 April 2026)

Catatan Rilis:python-1.2.2

πŸ”΄ Keluaran terminal orkestrasi dibakukan sebagai AgentResponse

PR:#5301

PR #5301 menstandarkan output AgentResponse terminal orkestrasi sehingga Workflow.as_agent() mengembalikan jawaban akhir saja.

  • Alur persetujuan berurutan (with_request_info) dan simultan (intermediate_outputs=True) sekarang mengikuti kontrak keluaran yang sama.
  • Jika Anda mengonsumsi hasil orkestrasi secara langsung, harapkan objek AgentResponse alih-alih teks mentah atau tipe campuran.

Before:

# Orchestration returned mixed types (raw strings, dicts, etc.)
result = await workflow.as_agent().run("Draft a report")
text = str(result)  # had to handle various types

After:

# Orchestration now always returns AgentResponse
result = await workflow.as_agent().run("Draft a report")
text = result.text  # consistent AgentResponse API

🟑 penyedia konteks Azure AI Content Understanding

PR:#4829

Paket agent-framework-azure-contentunderstanding alfa baru β€” menganalisis lampiran file secara otomatis (dokumen, gambar, audio, video) dan menyuntikkan hasil terstruktur ke dalam konteks LLM.


🟑 Dukungan Alur Kerja Durabel yang Di-host melalui hosting Foundry

PR:#5531

Menambahkan dukungan Durable Workflow terhosting ke agent-framework-foundry-hosting, meneruskan seluruh riwayat percakapan ke agen workflow.


python-1.1.0 (21 April 2026)

Catatan Rilis:python-1.1.0

πŸ”΄ CosmosCheckpointStorage deserialisasi pickle dibatasi secara bawaan

PR:#5200

CosmosCheckpointStorage sekarang menggunakan deserialisasi pickle terbatas secara bawaan, sesuai dengan perilaku FileCheckpointStorage.

  • Jika checkpoint Anda berisi tipe yang ditentukan oleh aplikasi, teruskan lewat allowed_checkpoint_types=["my_app.models:MyState"].
  • Tanpa ini, deserialisasi tipe kustom akan memunculkan WorkflowCheckpointException.

Before:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

storage = CosmosCheckpointStorage(endpoint=endpoint, database="mydb", container="checkpoints")

After:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

storage = CosmosCheckpointStorage(
    endpoint=endpoint,
    database="mydb",
    container="checkpoints",
    allowed_checkpoint_types=["my_app.models:MyState"],
)

🟑 GeminiChatClient ditambahkan

PR:#4847

Paket baru agent-framework-gemini dengan GeminiChatClient untuk dukungan Google Gemini API dan Vertex AI.


🟑 Paket Hyperlight CodeAct

PR:#5185

Paket baru agent-framework-hyperlight untuk eksekusi kode CodeAct berbasis Hyperlight dalam sandbox.


🟑 Dukungan untuk Foundry Toolboxes

PR:#5346

Menambahkan dukungan untuk Foundry Toolboxes di agent-framework-foundry, memungkinkan konfigurasi alat terkelola dari Azure AI Foundry.


🟑 finish_reason pada AgentResponse dan AgentResponseUpdate

PR:#5211

Menambahkan bidang finish_reason ke AgentResponse dan AgentResponseUpdate, sehingga pengguna dapat memeriksa mengapa model berhenti menghasilkan output.


🟑 Dukungan untuk Hosted agent V2 di Foundry

PR:#5379

Menambahkan dukungan untuk agen terhosting V2 di agent-framework-foundry untuk kapabilitas terbaru layanan agen Foundry.


python-1.0.1 (9 April 2026)

Catatan Rilis:python-1.0.1

πŸ”΄ FileCheckpointStorage deserialisasi pickle terbatas (penguatan keamanan)

PR:#4941

Deserialisasi checkpoint kini secara default diproses melalui unpickler yang dibatasi, yang hanya mengizinkan sekumpulan tipe Python bawaan yang aman serta semua tipe framework agent_framework.

  • Jika aplikasi Anda menyimpan tipe kustom dalam checkpoint, teruskan identifier-nya "module:qualname" melalui parameter baru pada konstruktor allowed_checkpoint_types β€” jika tidak, proses pemuatan akan memunculkan WorkflowCheckpointException.
  • Lihat Pertimbangan Keamanan untuk detailnya.

Before:

from agent_framework.workflows import FileCheckpointStorage

storage = FileCheckpointStorage(directory="./checkpoints")

After:

from agent_framework.workflows import FileCheckpointStorage

storage = FileCheckpointStorage(
    directory="./checkpoints",
    allowed_checkpoint_types=["my_app.models:MyState", "my_app.models:TaskResult"],
)

πŸ”΄ Perbaikan manajemen konteks alur kerja serah terima

PR:#5136

PR #5136 memperbaiki manajemen konteks alur kerja serah terima. Ini adalah perubahan perilaku: agen handoff kini menjaga konteks tetap terisolasi dengan semestinya selama transisi.


🟑 Cosmos DB NoSQL penyimpanan titik pemeriksaan untuk alur kerja

PR:#4916

Paket agent-framework-azure-cosmos baru yang menyediakan penyimpanan titik pemeriksaan yang didukung Cosmos DB NoSQL untuk alur kerja Python.


python-1.0.0 (2 April 2026)

Catatan Rilis:python-1.0.0

Bagian ini menangkap perubahan Python signifikan yang diterapkan setelah python-1.0.0rc6 dan sekarang menjadi bagian dari python-1.0.0.

πŸ”΄ Message(..., text=...) konstruksi telah sepenuhnya dihapus

PR:#5062

PR #5062 menyelesaikan pembersihan model pesan Python sebelumnya dengan menghapus jalur kode sisi kerangka kerja terakhir yang masih membangun Message objek dengan text=....

  • Buat pesan teks sebagai Message(role="user", contents=["Hello"]) alih-alih Message(role="user", text="Hello").
  • Ini berlaku di mana saja Anda membuat pesan secara langsung, termasuk permintaan alur kerja, respons middleware kustom, pembantu orkestrasi, dan kode migrasi.
  • String biasa di dalamnya contents=[...] masih dinormalisasi menjadi konten teks secara otomatis, jadi contents=["Hello"] tetap menjadi bentuk teks saja yang paling sederhana.

Before:

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

After:

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

🟑 Paket Python yang dirilis tidak lagi diperlukan --pre

PR:#5062

PR #5062 mempromosikan paket Python utama ke 1.0.0 dan memperbarui panduan penginstalan untuk membedakan paket yang dirilis dari paket yang masih prarilis.

  • agent-framework, agent-framework-core, agent-framework-openai, dan agent-framework-foundry sekarang adalah paket yang telah dirilis dan tidak lagi memerlukan --pre.
  • Konektor beta seperti agent-framework-ag-ui, , agent-framework-azurefunctionsagent-framework-copilotstudio, agent-framework-foundry-local, agent-framework-github-copilot, agent-framework-mem0, dan agent-framework-ollama masih memerlukan --pre.
  • Jika satu perintah penginstalan menyertakan paket beta apa pun, simpan --pre pada perintah tersebut.

πŸ”΄ Foundry sekarang memiliki penyematan Python dan pengaturan titik akhir model

PR:#5056

PR #5056 menghapus paket mandiri agent-framework-azure-ai dan memindahkan permukaan penyematan Python ke agent-framework-foundry dan agent_framework.foundry.

  • Gunakan FoundryEmbeddingClient, FoundryEmbeddingOptions, dan FoundryEmbeddingSettings dari agent_framework.foundry.
  • Instal agent-framework-foundry untuk obrolan Foundry, agen yang dikelola layanan, penyedia memori, dan penyematan.
  • agent_framework.azure tidak lagi mengekspor AzureAIInferenceEmbeddingClient, AzureAIInferenceEmbeddingOptions, AzureAIInferenceEmbeddingSettings, atau AzureAISettings.
  • Penyematan foundry sekarang menggunakan FOUNDRY_MODELS_ENDPOINT, FOUNDRY_MODELS_API_KEY, FOUNDRY_EMBEDDING_MODEL, dan opsional FOUNDRY_IMAGE_EMBEDDING_MODEL.
  • FoundryChatClient dan FoundryAgent masih menggunakan pengaturan titik akhir proyek seperti FOUNDRY_PROJECT_ENDPOINT dan 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"],
)

πŸ”΄ Alur kerja sekarang merutekan runtime kwarg melalui wadah eksplisit

PR:#5010

Pembaruan PR #5010 mengubah Python workflow.run(...) sehingga runtime kwargs diteruskan secara eksplisit sebagai function_invocation_kwargs= dan client_kwargs= daripada diteruskan secara generik dengan **kwargs.

  • Pemetaan datar diperlakukan sebagai global dan diteruskan ke setiap pelaksana agen yang cocok dalam alur kerja.
  • Jika satu atau beberapa kunci tingkat atas cocok dengan ID eksekutor, seluruh pemetaan diperlakukan sebagai penargetan per eksekutor dan setiap eksekutor hanya menerima entrinya sendiri.
  • ID AgentExecutor(id="...") pelaksana alur kerja kustom dan eksplisit lainnya adalah kunci yang Anda targetkan.
  • Aturan global-vs-target yang sama berlaku untuk function_invocation_kwargs dan 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 sekarang menjalankan penyedia konteks di sekitar setiap pemanggilan

PR:#5013

PR #5013 memperbaiki celah perilaku Python jika GitHubCopilotAgent diterima context_providers tetapi tidak benar-benar memanggilnya.

  • before_run() sekarang berjalan sebelum perintah kepada Copilot dikirim.
  • Pesan dan instruksi yang ditambahkan penyedia disertakan dalam prompt yang diteruskan ke Copilot CLI.
  • after_run() sekarang berjalan setelah respons akhir disusun, termasuk alur streaming.

Jika Anda sudah meneruskan context_providers ke GitHubCopilotAgent, tidak ada migrasi yang diperlukan - kait sekarang berperilaku konsisten dengan sisa permukaan agen Python.


🟑 Output terstruktur sekarang menerima pemetaan skema JSON selain model Pydantic

PR:#5022

PR #5022 memperluas penguraian output terstruktur Python sehingga response_format dapat berupa model Pydantic atau pemetaan skema JSON.

  • Model Pydantic masih mengurai ke dalam instans model yang ditik pada response.value.
  • Pemetaan skema JSON sekarang diurai menjadi nilai Python yang kompatibel dengan JSON pada response.value (biasanya dict atau list).
  • Aturan penguraian yang sama berlaku saat Anda mengumpulkan respons akhir dari aliran.

Ini adalah peningkatan daripada perubahan yang mengganggu, tetapi berguna untuk mengetahui apakah Anda sudah menyimpan skema sebagai struktur data seperti JSON.


python-1.0.0rc6

Bagian ini menangkap perubahan signifikan pada Python yang disertakan atau dicatat untuk python-1.0.0rc6.

πŸ”΄ Pemilihan model distandarisasi pada model

PR:#4999

PR #4999 menyelesaikan pembersihan pemilihan model sisi Python di seluruh konstruktor, opsi yang ditik, default agen, objek respons, dan variabel lingkungan.

  • Gunakan model di mana pun Anda sebelumnya menggunakan model_id.
  • Agent.default_options dan per menjalankan options={...} sekarang membutuhkan "model", bukan "model_id".
  • Objek respons muncul ke permukaan response.model, bukan response.model_id.
  • Pengaturan OpenAI sekarang menggunakan OPENAI_MODEL, , OPENAI_CHAT_MODELOPENAI_CHAT_COMPLETION_MODEL, dan OPENAI_EMBEDDING_MODEL.
  • Pengaturan Azure OpenAI sekarang menggunakan AZURE_OPENAI_MODEL, , AZURE_OPENAI_CHAT_MODELAZURE_OPENAI_CHAT_COMPLETION_MODEL, dan AZURE_OPENAI_EMBEDDING_MODEL.
  • Anthropic sekarang menggunakan ANTHROPIC_CHAT_MODEL, dan Foundry Local menggunakan FOUNDRY_LOCAL_MODEL.
  • Paket Antropis juga menambahkan pembungkus yang dihosting penyedia seperti AnthropicFoundryClient, , AnthropicBedrockClientdan 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"},
)

πŸ”΄ Penyedia konteks dapat menambahkan middleware dan mempertahankan riwayat untuk setiap panggilan model

PR:#4992

PR #4992 memperbarui pipeline penyedia konteks Python dan cara mempertahankan riwayat yang dikelola framework selama eksekusi panggilan multi.

  • ContextProvider dan HistoryProvider sekarang menjadi kelas dasar Python kanonis.
  • BaseContextProvider dan BaseHistoryProvider tetap sementara sebagai alias yang tidak digunakan lagi untuk kompatibilitas, tetapi kode baru harus bermigrasi ke nama baru.
  • SessionContext sekarang dapat mengumpulkan obrolan atau middleware fungsi yang ditambahkan oleh penyedia melalui extend_middleware() dan mengekspos daftar yang diratakan melalui get_middleware().
  • Agent(..., require_per_service_call_history_persistence=True) menjalankan penyedia riwayat untuk setiap panggilan model alih-alih sekali setelah keseluruhan run().
  • Mode ini ditujukan untuk riwayat lokal yang dikelola kerangka kerja dan tidak dapat dikombinasikan dengan percakapan yang dikelola layanan yang ada seperti session.service_session_id atau 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,
)

πŸ”΄ Permukaan kompatibilitas Azure/OpenAI yang tidak digunakan lagi dihapus

PR:#4990

PR #4990 menyelesaikan migrasi terdepan dari #4818 dengan menghapus sisa permukaan kompatibilitas Python yang tidak digunakan lagi yang tetap tersedia selama rilis pratinjau sebelumnya.

  • agent_framework.azure tidak lagi mengekspor AzureOpenAI* atau antarmuka agen/klien/penyedia AzureAI* yang lebih lama.
  • Tipe kompatibilitas Asisten Python OpenAI tidak lagi menjadi bagian dari permukaan agent_framework.openai saat ini.
  • Gunakan OpenAIChatClient, OpenAIChatCompletionClient, dan OpenAIEmbeddingClient untuk skenario OpenAI atau Azure OpenAI langsung.
  • Gunakan FoundryChatClient untuk inferensi proyek Foundry dan FoundryAgent untuk Prompt Agents atau HostedAgents.
  • Namespace agent_framework.azure saat ini mencakup integrasi Azure yang tersisa seperti Pencarian Azure AI, riwayat Cosmos, Azure Functions, dan jaringan kerja tahan lama. Foundry chat, perangkat agen, memori, dan klien penyematan berada di bawah agent_framework.foundry.

Jika Anda memigrasikan kode Python yang lebih lama, gunakan pengganti ini:

  • AzureOpenAIResponsesClient β†’ OpenAIChatClient
  • AzureOpenAIChatClient β†’ OpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClient β†’ OpenAIEmbeddingClient
  • AzureAIAgentClient / AzureAIClient / AzureAIProjectAgentProvider / AzureAIAgentsProvider FoundryChatClientβ†’ atau FoundryAgent, tergantung pada apakah aplikasi Anda memiliki definisi agen
  • OpenAIAssistantsClient / OpenAIAssistantProvider OpenAIChatClientβ†’ untuk pekerjaan Python OpenAI saat ini, atau FoundryAgent jika Anda memerlukan agen yang dikelola layanan di Foundry

πŸ”΄ Desain klien dan pemisahan paket unggulan penyedia

PR:#4818

PR #4818 mengatur ulang permukaan penyedia Python di sekitar paket dan namespace khusus penyedia.

  • Klien-klien OpenAI sekarang tinggal dalam paket agent-framework-openai, sementara masih mengimpor dari ruang nama agent_framework.openai.
  • Klien-klien Microsoft Foundry sekarang berada dalam paket agent-framework-foundry dan ruang nama agent_framework.foundry.
  • Foundry Local juga ditampilkan dari agent_framework.foundry sebagai FoundryLocalClient.
  • OpenAIResponsesClient diganti namanya menjadi OpenAIChatClient.
  • OpenAIChatClient diganti namanya menjadi OpenAIChatCompletionClient.
  • Konfigurasi klien distandarkan pada model, menggantikan parameter lama seperti model_id, , deployment_namedan model_deployment_name.
  • Untuk kode "Azure OpenAI" baru, gunakan klien agent_framework.openai. Shim kompatibilitas sebelumnya AzureOpenAI* dihapus nanti di #4990.
  • Untuk kode Foundry baru, gunakan FoundryChatClient untuk inferensi proyek langsung, FoundryAgent untuk Prompt Agents dan HostedAgents, dan FoundryLocalClient untuk runtime lokal.
  • AzureAIClient, AzureAIProjectAgentProvider, AzureAIAgentClient, AzureAIAgentsProvider, dan antarmuka kompatibilitas Asisten Python dipindahkan ke jalur kompatibilitas selama refaktor ini dan kemudian dihapus di #4990.
  • Cakupan sampel diatur ulang agar sesuai dengan tata letak baru yang dipimpin penyedia, termasuk sampel Foundry di bawah samples/02-agents/providers/foundry/.

Pemetaan paket perangkat lunak

Skenario Instalasi Namespace primer
OpenAI dan Azure OpenAI pip install agent-framework-openai agent_framework.openai
Titik akhir proyek Microsoft Foundry, Layanan Agen, memori, dan penyematan pip install agent-framework-foundry agent_framework.foundry
Pengecoran Lokal 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")

Jika sebelumnya Anda menggunakan Azure OpenAI secara langsung, petakan kelas khusus lama ke kelas OpenAI terkemuka penyedia baru:

  • AzureOpenAIResponsesClient β†’ OpenAIChatClient
  • AzureOpenAIChatClient β†’ OpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClient β†’ OpenAIEmbeddingClient
  • AzureOpenAIAssistantsClient β†’ OpenAIChatClient untuk migrasi API Respons Langsung, atau FoundryAgent jika Anda memerlukan agen Foundry yang dikelola layanan

Perubahan kode sebagian besar adalah pemindahan nama kelas ditambah deployment_name β†’ model. Untuk kompatibilitas Azure OpenAI, gunakan input Azure eksplisit pada klien OpenAI baru. credential= sekarang adalah permukaan autentikasi Azure pilihan, sementara yang dapat dipanggil api_key tetap menjadi jalur kompatibilitas:

Sebelum (AzureOpenAIResponsesClient):

from agent_framework.azure import AzureOpenAIResponsesClient

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

Setelah (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,
)

Sebelum (AzureOpenAIChatClient):

from agent_framework.azure import AzureOpenAIChatClient

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

Setelah (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,
)

Jika Anda ingin berpindah dari titik akhir Azure OpenAI ke titik akhir proyek Microsoft Foundry, gunakan permukaan berorientasi Foundry sebagai gantinya:

Sebelum (titik akhir Azure OpenAI):

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

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

Setelah proyek 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)

Untuk runtime Microsoft Foundry lokal, gunakan namespace Foundry ditambah konektor lokal:

from agent_framework.foundry import FoundryLocalClient

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

Jika Anda menghilangkan model, atur FOUNDRY_LOCAL_MODEL di lingkungan Anda.

Perbarui juga nama lingkungan/konfigurasi jika berlaku:

  • Gunakan OPENAI_CHAT_MODEL untuk OpenAIChatClient dan OPENAI_CHAT_COMPLETION_MODEL untuk OpenAIChatCompletionClient, dengan OPENAI_MODEL sebagai fallback bersama.
  • Azure OpenAI sekarang menggunakan AZURE_OPENAI_CHAT_MODEL untuk OpenAIChatClient, AZURE_OPENAI_CHAT_COMPLETION_MODEL untuk OpenAIChatCompletionClient, dan AZURE_OPENAI_MODEL sebagai cadangan bersama.
  • Gunakan azure_endpoint untuk URL sumber daya Azure OpenAI, atau base_url jika Anda sudah memiliki URL lengkap .../openai/v1 , dan atur api_version untuk permukaan Api Azure OpenAI yang Anda gunakan
  • Mengadopsi pengaturan khusus Foundry seperti FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, FOUNDRY_AGENT_NAME, dan FOUNDRY_AGENT_VERSION untuk klien Foundry cloud
  • Gunakan ANTHROPIC_CHAT_MODEL untuk Anthropic dan FOUNDRY_LOCAL_MODEL untuk Foundry Local

Perubahan ini pertama kali diperkenalkan selama siklus python-1.0.0rc6.


πŸ”΄ Dependensi inti sekarang sengaja ringkas

PR:#4904

PR #4904 mengikuti pemisahan paket penyedia dari #4818 dengan melangsingkan agent-framework-core dan menghapus lebih banyak dependensi penyedia transitif dari paket inti.

  • agent-framework-core sekarang sengaja minimal.
  • Jika Anda mengimpor agent_framework.openai, instal agent-framework-openai.
  • Jika Anda mengimpor agent_framework.foundry, instal agent-framework-foundry untuk inferensi proyek Foundry, agen yang dikelola layanan, penyedia memori, dan penyematan. Gunakan agent-framework-foundry-local --pre untuk runtime lokal.
  • Jika Anda menggunakan alat MCP, Agent.as_mcp_server(), atau integrasi MCP lainnya pada penginstalan minimal, instal mcp --pre secara manual. Untuk dukungan WEBSocket MCP, instal mcp[ws] --pre.
  • Jika Anda ingin pengalaman "semuanya termasuk" yang luas, instal paket agent-frameworkmeta .

Ini tidak mendesain ulang antarmuka penyedia kembali; ini mengubah apa yang diinstal secara default saat Anda hanya mengaktifkan inti.

Sebelum (penginstalan khusus inti sering membawa lebih banyak fungsionalitas penyedia secara transitif):

pip install agent-framework-core

Setelah (instal paket penyedia yang benar-benar Anda gunakan):

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

atau:

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

Jika Anda meningkatkan proyek yang ada yang sebelumnya bergantung pada impor inti dan penyedia malas, periksa impor Anda dan jadikan paket penyedia secara eksplisit di lingkungan atau file dependensi Anda. Lakukan hal yang sama untuk dependensi MCP jika Anda mengandalkan alat MCP atau hosting server MCP.


πŸ”΄ Klien OpenAI generik sekarang lebih memilih sinyal perutean eksplisit

PR:#4925

PR #4925 mengubah bagaimana klien generik agent_framework.openai memutuskan antara OpenAI dan Azure OpenAI.

  • Klien OpenAI generik tidak lagi beralih ke Azure hanya karena AZURE_OPENAI_* variabel lingkungan ada.
  • Jika OPENAI_API_KEY dikonfigurasikan, klien generik tetap menggunakan OpenAI kecuali Anda mengirimkan sinyal perutean Azure eksplisit seperti credential atau azure_endpoint.
  • Jika hanya pengaturan AZURE_OPENAI_* yang ada, klien generik masih dapat kembali ke pengarahan berbasis lingkungan Azure.
  • Pola Azure OpenAI yang disukai sekarang adalah dengan meneruskan pengaturan Azure eksplisit ditambah credential=AzureCliCredential() pada OpenAIChatClient, OpenAIChatCompletionClient, dan klien menyematan.
  • Pembungkus yang tidak digunakan AzureOpenAI* lagi mempertahankan perilaku kompatibilitasnya, sehingga kode berbasis pembungkus yang ada tidak mengikuti aturan prioritas klien generik baru.

Sebelum (OpenAIChatClient dapat merutekan ke Azure karena terdapat variabel lingkungan 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")

Setelah (OpenAI generik tetap berada di OpenAI; berikan input Azure eksplisit untuk memaksa perutean 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(),
)

Jika lingkungan Anda berisi nilai OPENAI_* dan AZURE_OPENAI_*, audit konstruksi klien generik agent_framework.openai apa pun dan pilih penyedia secara eksplisit. Sampel penyedia Azure diperbarui untuk meneruskan input Azure secara langsung karena alasan ini.

Penyematan Azure sekarang mengikuti model perutean yang sama.

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(),
)

Untuk skenario penyematan, lakukan pemetaan:

  • AzureOpenAIEmbeddingClient β†’ OpenAIEmbeddingClient
  • AZURE_OPENAI_EMBEDDING_MODEL β†’ model
  • OPENAI_EMBEDDING_MODEL tetap menjadi variabel lingkungan embedding pada sisi OpenAI

python-1.0.0rc5 / python-1.0.0b260319 (19 Maret 2026)

πŸ”΄ Alur klien obrolan diurutkan ulang: FunctionInvocation sekarang membungkus ChatMiddleware

PR:#4746

Urutan jalur pemrosesan ChatClient telah berubah. FunctionInvocation sekarang adalah lapisan terluar dan membungkus ChatMiddleware, yang berarti middleware percakapan berjalan per panggilan model (termasuk setiap iterasi dari perulangan pemanggilan alat) alih-alih sekali di seluruh urutan pemanggilan fungsi.

Urutan alur lama:

ChatMiddleware β†’ FunctionInvocation β†’ RawChatClient

Urutan alur baru:

FunctionInvocation β†’ ChatMiddleware β†’ ChatTelemetry β†’ RawChatClient

Jika Anda memiliki middleware obrolan kustom yang menganggap bahwa middleware tersebut hanya dijalankan sekali per pemanggilan setiap agen (yang membungkus keseluruhan perulangan pemanggilan alat), perbarui agar aman dijalankan berulang kali. Middleware obrolan sekarang dipanggil untuk setiap permintaan LLM individu, termasuk permintaan yang mengirim hasil alat kembali ke model.

Selain itu, ChatTelemetry sekarang menjadi lapisan terpisah dari ChatMiddleware dalam alur, berjalan paling dekat dengan RawChatClient.

πŸ”΄ Kwarg runtime publik dibagi menjadi wadah eksplisit

PR:#4581

Agen Python publik dan API percakapan tidak lagi memperlakukan penerusan publik menyeluruh **kwargs sebagai mekanisme data runtime utama. Nilai runtime sekarang dibagi berdasarkan tujuan:

  • Gunakan function_invocation_kwargs untuk nilai yang hanya akan dilihat oleh alat-alat atau middleware untuk fungsi.
  • Gunakan client_kwargs untuk kwarg lapisan klien dan konfigurasi middleware klien.
  • Akses data alat/runtime melalui FunctionInvocationContext (ctx.kwargs dan ctx.session).
  • Tentukan alat dengan parameter konteks yang disuntikkan alih-alih **kwargs; parameter konteks yang disuntikkan tidak ditampilkan dalam skema yang dilihat model.
  • Saat mendelegasikan ke sub-agen sebagai alat bantu, gunakan agent.as_tool(propagate_session=True) jika agen anak harus berbagi sesi pemanggil.

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",
    },
)

Jika Anda menerapkan publik run() atau get_response() metode kustom, tambahkan function_invocation_kwargs dan client_kwargs ke tanda tangan tersebut. Untuk alat, lebih suka parameter yang dianotasi sebagai FunctionInvocationContext - dapat diberi nama ctx, context, atau nama anotasi lainnya. Jika Anda memberikan model skema/input eksplisit, parameter yang tidak dianotasikan biasa bernama ctx juga dikenali. Objek konteks yang sama tersedia untuk middleware fungsi, dan merupakan tempat dimana kwargs fungsi runtime serta status sesi sekarang berada. Definisi alat yang masih mengandalkan **kwargs hanya menggunakan jalur kompatibilitas warisan dan akan dihapus.


python-1.0.0rc4 / python-1.0.0b260311 (11 Maret 2026)

Catatan Rilis:python-1.0.0rc4

πŸ”΄ Integrasi Azure AI sekarang memfokuskan pada azure-ai-projects 2.0 GA

PR:#4536

Integrasi Python dengan Azure AI sekarang menerapkan antarmuka GA 2.0 azure-ai-projects.

  • Rentang dependensi yang didukung sekarang azure-ai-projects>=2.0.0,<3.0.
  • foundry_features passthrough telah dihapus dari pembuatan agen Azure AI.
  • Perilaku pratinjau sekarang menggunakan allow_preview=True pada klien/penyedia yang didukung.
  • Kompabilitas shim beta/GA yang dicampur telah dihapus, sehingga pastikan untuk memperbarui semua impor dan nama tipe sesuai dengan spesifikasi SDK GA 2.0.

πŸ”΄ Pengendali alat GitHub Copilot sekarang menggunakan ToolInvocation / ToolResult dan Python 3.11+

PR:#4551

agent-framework-github-copilot sekarang memantau github-copilot-sdk>=0.1.32.

  • Penangan alat menerima ToolInvocation klasifikasi data alih-alih mentah dict.
  • Mengembalikan ToolResult menggunakan bidang snake_case seperti result_type dan text_result_for_llm.
  • Paket agent-framework-github-copilot sekarang memerlukan 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.tools 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 (4 Maret 2026)

Catatan Rilis:python-1.0.0rc3

πŸ”΄ Penyedia keterampilan menyelesaikan seputar struktur yang ditentukan oleh kode Skill / SkillResource

PR:#4387

Python Agent Skills sekarang mendukung objek yang ditentukan kode Skill dan SkillResource serta kemampuan berbasis file, dan antarmuka penyedia publik distandarisasi dengan SkillsProvider.

  • Jika Anda masih mengimpor pratinjau/internal FileAgentSkillsProvideryang lebih lama, beralihlah ke SkillsProvider.
  • Pencarian sumber daya berbasis file tidak lagi bergantung pada referensi yang dikutip backtick di SKILL.md; sumber daya ditemukan dari direktori keterampilan sebagai gantinya.

Jika Anda memiliki pratinjau/kode internal yang diimpor FileAgentSkillsProvider, beralihlah ke antarmuka publik saat ini.

from agent_framework import Skill, SkillResource, SkillsProvider

python-1.0.0rc2 / python-1.0.0b260226 (26 Februari 2026)

Catatan Rilis:Python-1.0.0rc2

πŸ”΄ Alur kerja deklaratif diganti InvokeTool dengan InvokeFunctionTool

PR:#3716

Alur kerja Python deklaratif tidak lagi menggunakan jenis tindakan lama InvokeTool . Ganti dengan InvokeFunctionTool dan daftarkan panggilan Python dengan 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 (19 Februari 2026)

Rilis:agent-framework-core dan agent-framework-azure-ai dipromosikan ke 1.0.0rc1. Semua paket lain diperbarui ke 1.0.0b260219.

πŸ”΄ Penanganan kredensial Azure terpadu di semua paket

PR:#4088

Parameter / pembantu ad_token, ad_token_provider, dan get_entra_auth_token telah diganti dengan parameter terpadu credential di semua paket Python terkait Azure. Pendekatan baru menggunakan azure.identity.get_bearer_token_provider untuk penyimpanan sementara dan penyegaran token otomatis.

Kelas yang terpengaruh: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(),
    ...
)

Parameter credential menerima TokenCredential, , AsyncTokenCredentialatau penyedia token yang dapat dipanggil. Pen-caching-an dan refresh token ditangani secara otomatis.


πŸ”΄ Hierarki pengecualian Python yang didesain ulang

PR:#4082

Keluarga datar dari tipe ServiceException telah diganti dengan cabang pengecualian cakupan domain di bawah satu akar AgentFrameworkException. Ini memberi pemanggil target yang tepat except serta semantik kesalahan yang jelas.

Hierarki baru:

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

Pengecualian yang dihapus: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
    ...

Nota

Kesalahan validasi init sekarang menggunakan ValueError/TypeError bawaan daripada pengecualian kustom. Pengecualian Kerangka Kerja Agen dicadangkan untuk kegagalan tingkat domain.


πŸ”΄ Status penyedia yang dicakup oleh source_id

PR:#3995

Pengait penyedia sekarang menerima kamus status yang berskala penyedia (state.setdefault(provider.source_id, {})) alih-alih status sesi penuh. Ini berarti implementasi penyedia yang sebelumnya mengakses status berlapis melalui state[self.source_id]["key"] sekarang harus mengakses state["key"] secara langsung.

Selain itu, InMemoryHistoryProvider default source_id berubah dari "memory" ke "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")

πŸ”΄ Pengaturan pengetikan pesan yang diketik oleh obrolan/agen (run vs get_response)

PR:#3920

Implementasi chat-client get_response sekarang secara konsisten menerima Sequence[Message]. agent.run(...) tetap fleksibel (str, Content, , Messageatau urutannya), dan menormalkan input sebelum memanggil klien obrolan.

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] pengaturan generik dihapus untuk penerusan skema

PR:#3907

Jalur alat berbasis skema tidak lagi bergantung pada perilaku generik sebelumnya FunctionTool[Any] . Gunakan FunctionTool secara langsung dan berikan skema pydantic BaseModel atau eksplisit jika diperlukan (misalnya, dengan @tool(schema=...)).

Before:

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

After:

placeholder: FunctionTool = FunctionTool(...)

πŸ”΄ Pengaturan Pydantic diganti dengan TypedDict + load_settings()

PRs:#3843, #4032

Kelas pydantic-settingsberbasis AFBaseSettings telah diganti dengan sistem pengaturan ringan berbasis fungsi menggunakan TypedDict dan load_settings(). Dependensi pydantic-settings dihapus sepenuhnya.

Semua kelas pengaturan (misalnya, OpenAISettings, , AzureOpenAISettings) AnthropicSettingssekarang TypedDict merupakan definisi, dan nilai pengaturan diakses melalui sintaks kamus alih-alih akses atribut.

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"]

Penting

Kerangka Kerja Agen tidak secara otomatis memuat nilai dari .env file. Anda harus secara eksplisit memilih untuk berpartisipasi dalam .env pemuatan dengan:

  • Memanggil load_dotenv() dari paket python-dotenv di awal aplikasi Anda
  • Meneruskan env_file_path=".env" ke load_settings()
  • Mengatur variabel lingkungan langsung di shell atau IDE Anda

Urutan resolusi adalah: penggantian eksplisit β†’ nilai berkas load_settings (ketika .env disediakan) β†’ variabel lingkungan β†’ nilai-nilai bawaan. Jika Anda menentukan env_file_path, file harus ada atau FileNotFoundError dinaikkan.


🟑 Memperbaiki pengalihan alur kerja model penalaran dan pencatatan riwayat

PR:#4083

Memperbaiki beberapa kegagalan saat menggunakan model penalaran (misalnya, gpt-5-mini, gpt-5.2) dalam alur kerja multi-agen. Item alasan dari API Respons sekarang diserialisasikan dengan benar dan hanya dimasukkan ke dalam riwayat ketika function_call juga hadir, mencegah kesalahan API. Konten penalaran terenkripsi/tersembunyi sekarang ditampilkan dengan benar, dan format bidang summary sudah dikoreksi. Elemen service_session_id juga dibersihkan pada handoff untuk mencegah kebocoran status lintas agen.


🟑 Bedrock ditambahkan ke core[all] dan default pilihan alat diperbaiki

PR:#3953

Amazon Bedrock sekarang termasuk dalam agent-framework-core[all] ekstra dan tersedia melalui agent_framework.amazon antarmuka impor tunda. Perilaku pilihan alat juga diperbaiki: nilai pilihan alat yang tidak diatur sekarang tetap tidak diatur sehingga penyedia menggunakan default layanan mereka, sementara nilai yang ditetapkan secara eksplisit dipertahankan.

from agent_framework.amazon import BedrockClient

🟑 AzureAIClient memperingatkan tentang penimpaan runtime yang tidak didukung

PR:#3919

Pada saat perubahan ini, AzureAIClient mencatat peringatan ketika runtime tools atau structured_output berbeda dari konfigurasi yang ditetapkan saat agen dibuat. Permukaan Python itu telah dihapus. Untuk kode Python yang ada, gunakan FoundryChatClient jika Anda membutuhkan konfigurasi alat/runtime yang dimiliki aplikasi, atau OpenAIChatClient untuk skenario API Responses langsung yang memerlukan penyesuaian dinamis.


🟑 workflow.as_agent() sekarang mengatur riwayat lokal secara default ketika penyedia tidak diatur

PR:#3918

Ketika workflow.as_agent() dibuat tanpa context_providers, sekarang ditambahkan InMemoryHistoryProvider("memory") secara default. Jika penyedia konteks disediakan secara eksplisit, daftar tersebut dipertahankan tidak berubah.

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

🟑 Konteks pelacakan OpenTelemetry ditransmisikan ke permintaan MCP

PR:#3780

Ketika OpenTelemetry diinstal, konteks pelacakan (misalnya, W3C traceparent) secara otomatis dimasukkan ke dalam permintaan MCP melalui params._meta. Ini memungkinkan pelacakan terdistribusi secara end-to-end dari agen ke panggilan server MCP. Tidak ada perubahan kode yang diperlukan β€” ini adalah perilaku aditif yang diaktifkan ketika konteks rentang yang valid ada.


🟑 Dukungan alur kerja yang tahan lama untuk Azure Functions

PR:#3630

Paket agent-framework-azurefunctions sekarang mendukung menjalankan Workflow grafik di Azure Durable Functions. Teruskan workflow parameter ke AgentFunctionApp untuk mendaftarkan entitas agen, fungsi aktivitas, dan titik akhir HTTP secara otomatis.

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

Mendukung pola fan-out/fan-in, shared state, dan human-in-the-loop dengan batas waktu yang dapat dikonfigurasi dan penolakan otomatis pada kedaluwarsa.


python-1.0.0b260212 (12 Februari 2026)

Catatan Rilis:python-1.0.0b260212

πŸ”΄ Hosted*Toolkelas digantikan oleh metode klien get_*_tool()

PR:#3634

Kelas alat yang dihosting dihapus untuk mendukung metode pabrik dengan cakupan klien. Hal ini membuat ketersediaan alat menjadi eksplisit oleh penyedia.

Kelas yang dihapus 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()]

πŸ”΄ Alur penyedia sesi/konteks diselesaikan (AgentSession, context_providers)

PR:#3850

Sesi Python dan migrasi penyedia konteks selesai. AgentThread dan jenis penyedia konteks lama dihapus.

  • 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= pola digantikan oleh context_providers=[...]
  • ChatMessageStore dihapus. Gunakan HistoryProvider (atau InMemoryHistoryProvider untuk kasus dalam memori default), keduanya diekspor dari agent_framework. Jika tidak ada penyedia konteks yang diberikan, agen akan secara otomatis menyisipkan InMemoryHistoryProvider.

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)

πŸ”΄ Model titik pemeriksaan dan perilaku penyimpanan direfaktor

PR:#3744

Struktur internal titik pemeriksaan didesain ulang, yang memengaruhi kompatibilitas titik pemeriksaan yang disimpan dan implementasi penyimpanan kustom.

  • WorkflowCheckpoint sekarang menyimpan objek langsung (serialisasi terjadi di penyimpanan titik pemeriksaan)
  • FileCheckpointStorage sekarang menggunakan serialisasi "pickle"
  • workflow_id telah dihapus dan previous_checkpoint_id ditambahkan
  • Hook titik pemeriksaan yang tidak digunakan lagi dihapus

Jika Anda mempertahankan titik pemeriksaan antar versi, lakukan regenerasi atau migrasikan artefak titik pemeriksaan yang ada sebelum meneruskan alur kerja.


🟑 Titik akhir proyek Foundry awalnya muncul melalui AzureOpenAIResponsesClient

PR:#3814

Kemampuan pratinjau ini awalnya memungkinkan AzureOpenAIResponsesClient untuk terhubung ke titik akhir proyek Foundry. Panduan Python saat ini menggunakan FoundryChatClient untuk inferensi proyek Foundry atau FoundryAgent untuk agen Foundry yang dikelola oleh layanan alih-alih AzureOpenAIResponsesClient yang telah dihapus.

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(),
)

πŸ”΄ Middleware call_next tidak lagi menerima context

PR:#3829

Kelanjutan middleware sekarang tidak mengambil argumen. Jika middleware Anda masih memanggil call_next(context), perbarui ke 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 (10 Februari 2026)

Catatan Rilis:python-1.0.0b260210

πŸ”΄ Metode pabrik alur kerja dihapus dari WorkflowBuilder

PR:#3781

register_executor() dan register_agent() telah dihapus dari WorkflowBuilder. Semua metode penyusun (add_edge, , add_fan_out_edges, add_fan_in_edgesadd_chain, add_switch_case_edge_group, add_multi_selection_edge_group) dan start_executor tidak lagi menerima nama string β€” mereka memerlukan instans eksekutor atau agen secara langsung.

Untuk mengisolasi status, bungkus instansiasi eksekutor/agen dan pembangunan alur kerja di dalam metode bantu sehingga setiap panggilan menghasilkan instansi baru.

WorkflowBuilder dengan pelaksana

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 dengan agen

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()

Isolasi status dengan metode pembantu

Untuk alur kerja yang membutuhkan status terisolasi per pemanggilan, bungkus konstruksi dalam metode pembantu:

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 diganti namanya menjadi Agent, ChatMessage diganti namanya menjadi Message

PR:#3747

Jenis Core Python telah disederhanakan dengan menghapus awalan redundan Chat . Tidak disediakan alias untuk kompatibilitas mundur.

Sebelumnya Setelahnya
ChatAgent Agent
RawChatAgent RawAgent
ChatMessage Message
ChatClientProtocol SupportsChatGetResponse

Memperbarui impor

Before:

from agent_framework import ChatAgent, ChatMessage

After:

from agent_framework import Agent, Message

Memperbarui referensi tipe

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")])

Nota

ChatClient, ChatResponse, dan ChatOptionstidak diganti namanya dengan perubahan ini.


πŸ”΄ Jenis API meninjau pembaruan di seluruh model respons/pesan

PR:#3647

Rilis ini mencakup penyempurnaan pengetikan pesan/respons yang luas dan memengaruhi API pembantu.

  • Role dan FinishReason sekarang menjadi pembungkus di atas NewType menggunakan strRoleLiteral/ untuk nilai yang diketahui. Perlakukan mereka sebagai string (tanpa menggunakan .value).
  • Message konstruksi distandarisasi pada Message(role, contents=[...]); string di contents dikonversi secara otomatis ke konten teks.
  • ChatResponse dan AgentResponse konstruktor sekarang berpusat pada messages= (tunggal Message atau urutan); penggunaan konstruktor warisan text= dihapus dari respons.
  • ChatResponseUpdate dan AgentResponseUpdate tidak lagi menerima text=; gunakan contents=[Content.from_text(...)].
  • Nama asisten penggabungan pembaruan telah disederhanakan.
  • try_parse_value dihapus dari ChatResponse dan AgentResponse.

Nama metode pembantu

Sebelumnya Setelahnya
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(...)

Memperbarui konstruksi pembaruan respons

Before:

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

After:

from agent_framework import AgentResponseUpdate, Content

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

Ganti try_parse_value dengan try/except di .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}")

πŸ”΄Model dan penggunaan terpadu run/get_responseResponseStream

PR:#3379

API Python dikonsolidasikan di sekitar agent.run(...) dan client.get_response(...), dengan streaming yang diwakili oleh 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)

πŸ”΄ Perubahan nama konteks/protokol inti

PRs:#3714, #3717

Sebelumnya Setelahnya
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

Perbarui impor dan ketik anotasi yang sesuai.


πŸ”΄ Parameter kelanjutan middleware diganti namanya menjadi call_next

PR:#3735

Tanda tangan middleware sekarang harus digunakan call_next alih-alih 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)

πŸ”΄ Nama TypeVar distandarisasi (TName β†’ NameT)

PR:#3770

Basis kode sekarang mengikuti gaya penamaan TypeVar yang konsisten di mana akhiran T digunakan.

Before:

TMessage = TypeVar("TMessage")

After:

MessageT = TypeVar("MessageT")

Jika Anda mempertahankan pembungkus khusus di sekitar generik kerangka kerja, sejajarkan nama TypeVar lokal Anda dengan konvensi baru untuk mengurangi perubahan berlebihan pada anotasi.


πŸ”΄ Output Alur Kerja Sebagai Agen dan Perubahan Streaming

PR:#3649

workflow.as_agent() perilaku diperbarui untuk menyelaraskan output dan streaming dengan pola respons agen standar. Tinjau konsumen workflow-as-agent yang bergantung pada penanganan output/pembaruan lama dan perbarui ke alur AgentResponse/AgentResponseUpdate saat ini.


πŸ”΄ Metode penyusun fasih dipindahkan ke parameter konstruktor

PR:#3693

Metode fasih konfigurasi tunggal di 6 penyusun (WorkflowBuilder, , SequentialBuilder, ConcurrentBuilderGroupChatBuilder, MagenticBuilder, HandoffBuilder) telah dimigrasikan ke parameter konstruktor. Metode fluent yang merupakan jalur konfigurasi satu-satunya untuk pengaturan dihapus untuk mendukung penggunaan argumen konstruktor.

WorkflowBuilder

set_start_executor(), with_checkpointing(), dan with_output_from() dihapus. Gunakan parameter konstruktor sebagai gantinya.

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(), dan with_intermediate_outputs() dihapus. Gunakan parameter konstruktor sebagai gantinya.

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(), dan with_intermediate_outputs() dihapus. Gunakan parameter konstruktor sebagai gantinya.

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(), dan with_intermediate_outputs() dihapus. Gunakan parameter konstruktor sebagai gantinya.

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() dan with_termination_condition() dihapus. Gunakan parameter konstruktor sebagai gantinya.

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()
)

Perubahan validasi

  • WorkflowBuilder sekarang memerlukan start_executor sebagai argumen konstruktor (sebelumnya diatur melalui metode lancar)
  • SequentialBuilder, ConcurrentBuilder, GroupChatBuilder, dan MagenticBuilder sekarang memerlukan participants atau participant_factories saat waktu konstruksi β€” jika keduanya tidak diberikan, maka akan memicu ValueError

Nota

HandoffBuilder sudah diterima participants/participant_factories sebagai parameter konstruktor dan tidak diubah dalam hal ini.


πŸ”΄ Peristiwa alur kerja digabungkan menjadi satu WorkflowEvent dengan type diskriminator

PR:#3690

Semua subkelas peristiwa alur kerja individual telah digantikan oleh satu kelas generik WorkflowEvent[DataT] . Alih-alih menggunakan isinstance() pemeriksaan untuk mengidentifikasi jenis peristiwa, Anda sekarang memeriksa event.type string literal (misalnya, "output", "request_info", "status"). Ini mengikuti pola serupa dengan konsolidasi kelas Content dari python-1.0.0b260123.

Kelas peristiwa yang dihapus

Subkelas peristiwa yang diekspor berikut tidak ada lagi:

Kelas Lama Nilai Baru 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"

Memperbarui impor

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

Memperbarui pemeriksaan jenis peristiwa

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}")

Streaming dengan 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}")

Anotasi tipe

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

Nota

WorkflowEvent umum (WorkflowEvent[DataT]), tetapi untuk koleksi peristiwa campuran, gunakan WorkflowEvent[Any] atau tidak diparameterisasi WorkflowEvent.


πŸ”΄ workflow.send_responses* Dihapus; Menggunakan workflow.run(responses=...)

PR:#3720

send_responses() dan send_responses_streaming() dihapus dari Workflow. Lanjutkan alur kerja yang dijeda dengan meneruskan respons langsung ke 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 diganti namanya menjadi State; API status alur kerja sinkron

PR:#3667

API status tidak lagi memerlukan await, dan penamaan distandarkan:

Sebelumnya Setelahnya
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

πŸ”΄ Penyusun orkestrasi dipindahkan ke agent_framework.orchestrations

PR:#3685

Penyusun orkestrasi sekarang berada di namespace paket khusus.

Before:

from agent_framework import SequentialBuilder, GroupChatBuilder

After:

from agent_framework.orchestrations import SequentialBuilder, GroupChatBuilder

🟑 Proses latar belakang yang berlangsung lama dan token kelanjutan

PR:#3808

Respons latar belakang sekarang didukung untuk agen Python berjalan melalui options={"background": True} dan continuation_token.

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})

🟑 Jenis pratinjau penyedia sesi/konteks ditambahkan secara berdampingan

PR:#3763

Jenis alur sesi/konteks baru diperkenalkan bersama API warisan untuk migrasi inkremental, termasuk SessionContext dan BaseContextProvider.


🟑 Aliran penerjemah kode sekarang mengikutsertakan delta kode inkremental

PR:#3775

Penerjemah kode streaming sekarang menjalankan pembaruan delta kode permukaan dalam konten yang dialirkan sehingga UI dapat merender kode yang dihasilkan secara progresif.


🟑 @tool mendukung penanganan skema eksplisit

PR:#3734

Definisi alat sekarang dapat menggunakan penanganan skema eksplisit ketika output skema yang disimpulkan membutuhkan penyesuaian.


python-1.0.0b260130 (30 Januari 2026)

Catatan Rilis:python-1.0.0b260130

🟑 ChatOptions dan ChatResponse/AgentResponse sekarang generik terhadap format respons

PR:#3305

ChatOptions, ChatResponse, dan AgentResponse sekarang merupakan jenis generik yang diparameterkan oleh jenis format respons. Ini memungkinkan inferensi jenis yang lebih baik saat menggunakan output terstruktur dengan 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!)

Petunjuk / Saran

Ini adalah peningkatan yang tidak merusak. Kode yang ada tanpa parameter jenis terus berfungsi. Anda tidak perlu menentukan jenis dalam cuplikan kode di atas untuk opsi dan respons; mereka ditampilkan di sini untuk kejelasan.


🟑 BaseAgent dukungan ditambahkan untuk Claude Agent SDK

PR:#3509

Python SDK sekarang menyertakan BaseAgent implementasi untuk Claude Agent SDK, memungkinkan penggunaan berbasis adaptor kelas satu dalam Agent Framework.


python-1.0.0b260128 (28 Januari 2026)

Catatan Rilis:python-1.0.0b260128

πŸ”΄ AIFunction diganti namanya menjadi FunctionTool dan @ai_function diganti namanya menjadi @tool

PR:#3413

Kelas dan dekorator telah diganti namanya untuk kejelasan dan konsistensi dengan terminologi industri.

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)

πŸ”΄ Pola pabrik ditambahkan ke GroupChat dan Magentic; Mengganti nama API

PR:#3224

Menambahkan pabrik peserta dan pabrik orkestrator ke obrolan grup. Juga termasuk mengganti nama:

  • 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 diganti namanya menjadi GitHub

PR:#3486

Nama kelas dan paket diperbarui untuk menggunakan casing yang benar.

Before:

from agent_framework_github_copilot import GithubCopilotAgent

agent = GithubCopilotAgent(...)

After:

from agent_framework_github_copilot import GitHubCopilotAgent

agent = GitHubCopilotAgent(...)

python-1.0.0b260127 (27 Januari 2026)

Catatan Rilis:python-1.0.0b260127

🟑 BaseAgent dukungan ditambahkan untuk GitHub Copilot SDK

PR:#3404

Python SDK sekarang memiliki BaseAgent implementasi untuk integrasi GitHub Copilot SDK.


python-1.0.0b260123 (23 Januari 2026)

Catatan Rilis:python-1.0.0b260123

πŸ”΄ Jenis konten disederhanakan ke satu kelas dengan konstruktor classmethod

PR:#3252

Mengganti semua jenis Konten lama (berasal dari BaseContent) dengan sebuah kelas Content tunggal yang menggunakan metode kelas untuk menciptakan jenis tertentu.

Referensi Migrasi Penuh

Tipe Lama Metode Baru
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(...)

Metode baru tambahan (tidak ada pendahulu langsung):

  • Content.from_text_reasoning(...) β€” Untuk konten penalaran/pemikiran
  • Content.from_hosted_vector_store(...) β€” Untuk referensi penyimpanan vektor
  • Content.from_usage(...) β€” Untuk informasi penggunaan/token
  • Content.from_mcp_server_tool_call(...) / Content.from_mcp_server_tool_result(...) β€” Untuk alat server MCP
  • Content.from_code_interpreter_tool_call(...) / Content.from_code_interpreter_tool_result(...) β€” Untuk penerjemah kode
  • Content.from_image_generation_tool_call(...) / Content.from_image_generation_tool_result(...) β€” Untuk pembuatan gambar

Pemeriksaan Jenis

Sebagai pengganti isinstance() pemeriksaan, gunakan properti 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)

Contoh Dasar

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")

πŸ”΄ Jenis anotasi disederhanakan ke Annotation dan TextSpanRegion TypedDicts

PR:#3252

Mengganti jenis anotasi berbasis kelas dengan definisi yang lebih TypedDict sederhana.

Tipe Lama Tipe Baru
CitationAnnotation (kelas) Annotation (TypedDict dengan type="citation")
BaseAnnotation (kelas) Annotation (TypedDict)
TextSpanRegion (kelas dengan SerializationMixin) TextSpanRegion (TypedDict)
Annotations (alias jenis) Annotation
AnnotatedRegions (alias jenis) 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"
}

Nota

Karena Annotation dan TextSpanRegion sekarang TypedDict, Anda membuatnya sebagai kamus daripada instans kelas.


πŸ”΄ response_format kesalahan validasi sekarang terlihat oleh pengguna

PR:#3274

ChatResponse.value dan AgentResponse.value sekarang naikkan ValidationError ketika validasi skema gagal alih-alih mengembalikan Nonesecara diam-diam .

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 menjalankan logika yang disederhanakan; Perbaikan klien MCP dan Antropis

PR:#3322

Signature metode run dan perilaku dalam AG-UI telah disederhanakan.

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
)

🟑 Klien antropis response_format sekarang mendukung output terstruktur

PR:#3301

Anda sekarang dapat menggunakan penguraian output terstruktur dengan klien Anthropic melalui response_format, mirip dengan klien OpenAI dan Azure.


🟑 Konfigurasi Azure AI diperluas (reasoning, rai_config)

PRs:#3403, #3265

Dukungan Azure AI diperluas dengan dukungan konfigurasi penalaran dan rai_config selama pembuatan agen.


python-1.0.0b260116 (16 Januari 2026)

Catatan Rilis:python-1.0.0b260116

πŸ”΄ create_agent diganti namanya menjadi as_agent

PR:#3249

Metode diganti namanya untuk kejelasan yang lebih baik pada tujuannya.

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 diganti namanya menjadi executor_id

PR:#3166

Properti diganti namanya untuk konsistensi 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 mendukung kelangsungan sesi yang dikelola layanan

PR:#3136

AG-UI sekarang mempertahankan identitas percakapan yang dikelola oleh layanan (misalnya, sesi/utas yang dikelola Foundry) untuk mempertahankan kelangsungan percakapan multi-giliran.


python-1.0.0b260114 (14 Januari 2026)

Catatan Rilis:python-1.0.0b260114

πŸ”΄ Orkestrasi diubah struktur

PR:#3023

Perombakan menyeluruh dan penyederhanaan orkestrasi dalam Alur Kerja Framework Agen.

  • Obrolan Grup: Pisahkan eksekutor orkestrator menjadi berbasis agen khusus dan berbasis fungsi (BaseGroupChatOrchestrator, GroupChatOrchestrator, AgentBasedGroupChatOrchestrator). Disederhanakan ke topologi bintang dengan model penyiaran.
  • Handoff: Menghapus dukungan tingkat tunggal, koordinator, dan pelaksana kustom. Beralih ke model penyiaran dengan HandoffAgentExecutor.
  • Berurutan & Bersamaan: Mekanisme informasi permintaan yang disederhanakan untuk bergantung pada sub-workflow melalui AgentApprovalExecutor dan 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]
)

πŸ”΄ Opsi yang diperkenalkan sebagai TypedDict dan Generic

PR:#3140

Opsi sekarang ditik menggunakan TypedDict untuk keamanan jenis yang lebih baik dan pelengkapan otomatis IDE.

πŸ“– Untuk instruksi migrasi lengkap, lihat Panduan Opsi Yang Ditiru.

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 Dihapus; context_provider ke tunggal; middleware harus berupa daftar

PR:#3139

  • display_name parameter dihapus dari agen
  • context_providers (plural, daftar penerimaan) diubah menjadi context_provider (tunggal, hanya 1 yang diizinkan)
  • middleware sekarang memerlukan daftar (tidak lagi menerima instans tunggal)
  • AggregateContextProvider dihapus dari kode (gunakan implementasi sampel jika diperlukan)

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* diganti namanya menjadi AgentResponse*

PR:#3207

AgentRunResponse dan AgentRunResponseUpdate diganti namanya menjadi AgentResponse dan AgentResponseUpdate.

Before:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

After:

from agent_framework import AgentResponse, AgentResponseUpdate

🟑 Runtime alur kerja deklaratif ditambahkan untuk workflow yang didefinisikan oleh YAML

PR:#2815

Runtime berbasis grafik ditambahkan untuk menjalankan alur kerja YAML deklaratif, memungkinkan orkestrasi multi-agen tanpa kode runtime kustom.


🟑 Peningkatan pemuatan/keandalan MCP

PR:#3154

Integrasi MCP mendapat peningkatan perilaku saat kehilangan koneksi, dukungan paginasi saat memuat, dan opsi kontrol representasi visual.


🟑 Foundry A2ATool sekarang mendukung koneksi tanpa URL target

PR:#3127

A2ATool sekarang dapat memproses koneksi A2A yang didukung oleh Foundry melalui metadata koneksi proyek bahkan jika URL target langsung tidak dikonfigurasi.


python-1.0.0b260107 (7 Januari 2026)

Catatan Rilis:python-1.0.0b260107

Tidak ada perubahan signifikan dalam rilis ini.


python-1.0.0b260106 (6 Januari 2026)

Catatan Rilis:python-1.0.0b260106

Tidak ada perubahan signifikan dalam rilis ini.


Tabel Ringkasan

Pelepasan Catatan Rilis Tipe Ubah PR
1.8.0 Notes πŸ”΄ Berita Terkini github-copilot-sdk ditingkatkan ke v1.0.0: SubprocessConfig dihapus (gunakan RuntimeConnection + kwargs), jalur impor dipindahkan ke copilot.session_events, copilot_home β†’ base_directory, penangan izin menggunakan jenis keputusan konkret #6292
1.8.0 Notes 🟑 Peningkatan Penampilan alat secara bertahap melalui FunctionInvocationContext #6233
1.8.0 Notes 🟑 Peningkatan Penemuan keterampilan berbasis MCP (McpSkillsSource) #6169
1.8.0 Notes 🟑 Peningkatan Dukungan output terstruktur asli Bedrock melalui Converse API #6052
1.8.0 Notes 🟑 Peningkatan Integrasi Foundry Adaptive Evals (pembuatan rubrik) #6101
1.8.0 Notes 🟑 Peningkatan Paket klien penyematan Mistral AI #5480
1.8.0 Notes 🟑 Peningkatan agent-framework-declarative ditingkatkan menjadi kandidat rilis #6256
1.7.0 Notes πŸ”΄ Berita Terkini Deklaratif: tindakan khusus Python dihapus dan jenis alias diganti namanya menjadi nama kanonis C# #6126
1.7.0 Notes 🟑 Peningkatan HarnessAgent dan penyedia harness agen latar belakang ditambahkan #6041
1.7.0 Notes 🟑 Peningkatan A2AAgentSession dengan ID tugas yang dirujuk dan dukungan yang memerlukan input #5980
1.6.0 Notes πŸ”΄ Berita Terkini Instrumentasi diaktifkan secara bawaan untuk paket inti dan paket foundry #5865
1.6.0 Notes 🟑 Peningkatan Alat shell dengan dukungan eksekusi lokal dan Docker #5664
1.6.0 Notes 🟑 Peningkatan Paket penyedia CodeAct baru agent-framework-monty #5915
1.4.0 Notes πŸ”΄ Berita Terkini [Keterampilan Eksperimental] Selaraskan penemuan folder keterampilan berkas dengan spesifikasi agentskills.io #5807
1.4.0 Notes πŸ”΄ Berita Terkini [Keterampilan Eksperimental] Ekstrak metadata spesifikasi keterampilan ke SkillFrontmatter #5775
1.4.0 Notes πŸ”΄ Berita Terkini DevUI: Mengencangkan kontrol akses default dan postur CORS #5740
1.4.0 Notes πŸ”΄ Berita Terkini A2A: Migrasi ke a2a-sdk v1.0 #5752
1.3.0 Notes πŸ”΄ Berita Terkini [Keterampilan Eksperimental] Menyusun ulang keterampilan agen menjadi arsitektur multisumber #5584
1.3.0 Notes 🟑 Peningkatan ClassSkill untuk definisi keterampilan berbasis kelas dengan metadata deklaratif #5678
1.3.0 Notes 🟑 Peningkatan Pertahanan terhadap injeksi prompt dengan kontrol aliran informasi #5331
1.3.0 Notes 🟑 Peningkatan github-copilot-sdk ditingkatkan ke v1.0.0b2 dengan instruction_directories dan copilot_home #5665
1.2.2 Notes πŸ”΄ Berita Terkini Output terminal orkestrasi yang distandarkan sebagai AgentResponse; Workflow.as_agent() hanya mengembalikan jawaban akhir #5301
1.2.2 Notes 🟑 Peningkatan Paket penyedia konteks Azure AI Content Understanding #4829
1.1.0 Notes πŸ”΄ Berita Terkini CosmosCheckpointStorage deserialisasi pickle dibatasi secara bawaan #5200
1.1.0 Notes 🟑 Peningkatan GeminiChatClient Ditambahkan #4847
1.1.0 Notes 🟑 Peningkatan Paket Hyperlight CodeAct #5185
1.1.0 Notes 🟑 Peningkatan Dukungan untuk Foundry Toolboxes #5346
1.1.0 Notes 🟑 Peningkatan finish_reason pada AgentResponse dan AgentResponseUpdate #5211
1.0.1 Notes πŸ”΄ Berita Terkini FileCheckpointStorage deserialisasi pickle terbatas (penguatan keamanan) #4941
1.0.1 Notes πŸ”΄ Berita Terkini Perbaikan manajemen konteks alur kerja handoff #5136
1.0.1 Notes 🟑 Peningkatan Penyimpanan checkpoint Cosmos DB NoSQL untuk alur kerja #4916
1.0.0 Notes πŸ”΄ Berita Terkini Message(..., text=...) konstruksi sepenuhnya dihapus; buat pesan teks dengan contents=[...] sebagai gantinya #5062
1.0.0 Notes 🟑 Peningkatan Paket Python yang dirilis (agent-framework, agent-framework-core, agent-framework-openai, agent-framework-foundry) tidak lagi memerlukan --pre; konektor beta masih membutuhkan #5062
1.0.0 Notes πŸ”΄ Berita Terkini Penyematan Python dipindahkan ke agent_framework.foundry; gunakan agent-framework-foundry, FoundryEmbeddingClient, dan FOUNDRY_MODELS_* sebagai pengganti paket agent-framework-azure-ai yang telah dihapus. #5056
1.0.0 Notes πŸ”΄ Berita Terkini workflow.run() sekarang menggunakan secara eksplisit function_invocation_kwargs / client_kwargs, dengan penargetan global vs per-eksekutor yang ditentukan oleh executor IDs #5010
1.0.0 Notes 🟑 Peningkatan GitHubCopilotAgent sekarang memanggil kait before_run / after_run penyedia konteks dan menyertakan konteks prompt yang ditambahkan oleh penyedia #5013
1.0.0 Notes 🟑 Peningkatan Output terstruktur Python sekarang menerima pemetaan skema JSON sebagai response_format, dengan JSON yang diurai muncul pada response.value #5022
1.0.0rc6 Hanya PR πŸ”΄ Berita Terkini Permukaan kompatibilitas Azure/OpenAI yang tidak digunakan lagi dihapus; gunakan klien OpenAI terkemuka penyedia atau klien Foundry Python sebagai gantinya #4990
1.0.0rc6 Hanya PR πŸ”΄ Berita Terkini Refaktor utama penyedia: membagi agent-framework-openai, agent-framework-foundry, dan agent-framework-foundry-local; mengganti nama klien OpenAI; memindahkan Foundry ke agent_framework.foundry; menonaktifkan jalur kompatibilitas Azure AI dan Asisten #4818
1.0.0rc6 Hanya PR πŸ”΄ Berita Terkini agent-framework-core sengaja dibuat ramping; instal paket penyedia eksplisit seperti agent-framework-openai atau agent-framework-foundry, dan instal mcp secara manual untuk alat MCP pada instalasi minimal, atau gunakan paket meta agent-framework untuk pengalaman default yang lebih komprehensif. #4904
1.0.0rc6 Hanya PR πŸ”΄ Berita Terkini Klien generik agent_framework.openai sekarang lebih suka sinyal perutean eksplisit; OpenAI tetap berada di OpenAI saat OPENAI_API_KEY diatur, dan skenario Azure harus meneruskan input perutean Azure eksplisit seperti credential atau azure_endpoint, lalu mengonfigurasi api_version #4925
1.0.0rc5 / 1.0.0b260318 Tidak Tersedia (terjadwal) πŸ”΄ Berita Terkini "Public runtime kwargs dibagi menjadi function_invocation_kwargs dan client_kwargs; alat sekarang menggunakan FunctionInvocationContext / ctx.session" #4581
1.0.0rc4 / 1.0.0b260311 Notes πŸ”΄ Berita Terkini Pengintegrasian Azure AI sekarang menargetkan azure-ai-projects 2.0 GA; foundry_features dihapus dan allow_preview merupakan opsi pratinjau #4536
1.0.0rc4 / 1.0.0b260311 Notes πŸ”΄ Berita Terkini Integrasi GitHub Copilot sekarang menggunakan ToolInvocation / ToolResult; agent-framework-github-copilot memerlukan Python 3.11+ #4551
1.0.0rc3 / 1.0.0b260304 Notes πŸ”΄ Berita Terkini Penyedia keterampilan menambahkan kode yang ditentukan Skill / SkillResource; impor yang lebih lama dan referensi sumber daya backtick harus diperbarui. #4387
1.0.0rc2 / 1.0.0b260226 Notes πŸ”΄ Berita Terkini Alur kerja deklaratif mengganti InvokeTool dengan InvokeFunctionTool dan WorkflowFactory.register_tool() #3716
1.0.0rc1 / 1.0.0b260219 Notes πŸ”΄ Berita Terkini Penanganan kredensial Azure terpadu di seluruh paket Azure #4088
1.0.0rc1 / 1.0.0b260219 Notes πŸ”΄ Berita Terkini Hierarki pengecualian Python didesain ulang di bawah AgentFrameworkException #4082
1.0.0rc1 / 1.0.0b260219 Notes πŸ”΄ Berita Terkini Status penyedia sekarang dicakup oleh source_id #3995
1.0.0rc1 / 1.0.0b260219 Notes πŸ”΄ Berita Terkini Implementasi kustom get_response() harus menerima Sequence[Message] #3920
1.0.0rc1 / 1.0.0b260219 Notes πŸ”΄ Berita Terkini FunctionTool[Any] skema shim passthrough dihapus #3907
1.0.0rc1 / 1.0.0b260219 Notes πŸ”΄ Berita Terkini Pengaturan dipindahkan dari AFBaseSettings / pydantic-settings ke TypedDict + load_settings() #3843, #4032
1.0.0rc1 / 1.0.0b260219 Notes 🟑 Peningkatan Perbaikan penyerahan alur kerja model penalaran dan serialisasi riwayat #4083
1.0.0rc1 / 1.0.0b260219 Notes 🟑 Peningkatan Bedrock ditambahkan ke core[all]; pilihan alat default diperbaiki #3953
1.0.0rc1 / 1.0.0b260219 Notes 🟑 Peningkatan AzureAIClient mengingatkan mengenai penggantian runtime yang tidak didukung #3919
1.0.0rc1 / 1.0.0b260219 Notes 🟑 Peningkatan workflow.as_agent() menyuntikkan riwayat lokal saat penyedia tidak diatur atau tidak disetel #3918
1.0.0rc1 / 1.0.0b260219 Notes 🟑 Peningkatan Konteks jejak OpenTelemetry diteruskan ke permintaan MCP #3780
1.0.0rc1 / 1.0.0b260219 Notes 🟑 Peningkatan Dukungan alur kerja tahan lama ditambahkan untuk Azure Functions #3630
1.0.0b260212 Notes πŸ”΄ Berita Terkini Hosted*Toolkelas-kelas dihapus; membuat alat yang dihosting melalui metode klien get_*_tool() #3634
1.0.0b260212 Notes πŸ”΄ Berita Terkini Alur penyedia sesi/konteks diselesaikan: AgentThread dihapus, gunakan AgentSession + context_providers #3850
1.0.0b260212 Notes πŸ”΄ Berita Terkini Model titik pemeriksaan/refaktor penyimpanan (workflow_id dihapus, previous_checkpoint_id ditambahkan, perilaku penyimpanan berubah) #3744
1.0.0b260212 Notes 🟑 Peningkatan AzureOpenAIResponsesClient dapat dibuat dari titik akhir proyek Foundry atau AIProjectClient #3814
1.0.0b260212 Notes πŸ”΄ Berita Terkini Kelanjutan middleware tidak lagi menerima context; perbarui call_next(context) ke call_next() #3829
1.0.0b260210 Notes πŸ”΄ Berita Terkini send_responses() / send_responses_streaming() Dihapus; Menggunakan workflow.run(responses=...) #3720
1.0.0b260210 Notes πŸ”΄ Berita Terkini SharedState Stateβ†’ ; API status alur kerja bersifat sinkron dan bidang status titik pemeriksaan diganti namanya #3667
1.0.0b260210 Notes πŸ”΄ Berita Terkini Penyusun orkestrasi dipindahkan ke agent_framework.orchestrations paket #3685
1.0.0b260210 Notes 🟑 Peningkatan Tanggapan latar belakang dan dukungan continuation_token ditambahkan ke tanggapan agen Python #3808
1.0.0b260210 Notes 🟑 Peningkatan Jenis pratinjau sesi/konteks ditambahkan berdampingan (SessionContext, BaseContextProvider) #3763
1.0.0b260210 Notes 🟑 Peningkatan Pembaruan penerjemah kode streaming sekarang menyertakan delta kode inkremental #3775
1.0.0b260210 Notes 🟑 Peningkatan @tool dekorator menambahkan dukungan penanganan skema eksplisit #3734
1.0.0b260210 Notes πŸ”΄ Berita Terkini register_executor() / register_agent() dihapus dari WorkflowBuilder; gunakan instans secara langsung, metode pembantu untuk isolasi status #3781
1.0.0b260210 Notes πŸ”΄ Berita Terkini ChatAgent β†’ Agent, ChatMessage β†’ Message, RawChatAgent β†’ RawAgent, ChatClientProtocol β†’ SupportsChatGetResponse #3747
1.0.0b260210 Notes πŸ”΄ Berita Terkini Jenis ulasan API: Role/FinishReason perubahan jenis, pengetatan respons/pembaruan konstruktor, fungsi pembantu mengganti nama menjadi from_updates, serta penghapusan try_parse_value #3647
1.0.0b260210 Notes πŸ”΄ Berita Terkini API terpadu di sekitar run/get_response dan ResponseStream #3379
1.0.0b260210 Notes πŸ”΄ Berita Terkini AgentRunContext diganti namanya menjadi AgentContext #3714
1.0.0b260210 Notes πŸ”΄ Berita Terkini AgentProtocol diganti namanya menjadi SupportsAgentRun #3717
1.0.0b260210 Notes πŸ”΄ Berita Terkini Parameter middleware next diganti namanya menjadi call_next #3735
1.0.0b260210 Notes πŸ”΄ Berita Terkini Penamaan TypeVar yang distandarisasi (TName β†’ NameT) #3770
1.0.0b260210 Notes πŸ”΄ Berita Terkini Perilaku output/aliran alur kerja sebagai agen yang selaras dengan alur respons agen saat ini #3649
1.0.0b260210 Notes πŸ”΄ Berita Terkini Metode penyusun yang fasih dipindahkan ke parameter konstruktor di 6 penyusun #3693
1.0.0b260210 Notes πŸ”΄ Berita Terkini Peristiwa workflow disatukan menjadi satu WorkflowEvent dengan diskriminator type; isinstance() β†’ event.type == "..." #3690
1.0.0b260130 Notes 🟑 Peningkatan ChatOptions / ChatResponse / AgentResponse generik mengenai format respons #3305
1.0.0b260130 Notes 🟑 Peningkatan BaseAgent dukungan ditambahkan untuk integrasi Claude Agent SDK #3509
1.0.0b260128 Notes πŸ”΄ Berita Terkini AIFunction FunctionTool, @ai_function β†’ @tool #3413
1.0.0b260128 Notes πŸ”΄ Berita Terkini Pola Pabrik untuk GroupChat/Magentic; with_standard_manager β†’ with_manager, participant_factories β†’ register_participant #3224
1.0.0b260128 Notes πŸ”΄ Berita Terkini Github β†’ GitHub #3486
1.0.0b260127 Notes 🟑 Peningkatan BaseAgent dukungan ditambahkan untuk integrasi GitHub Copilot SDK #3404
1.0.0b260123 Notes πŸ”΄ Berita Terkini Jenis konten dikonsolidasikan ke kelas tunggal Content dengan classmethods #3252
1.0.0b260123 Notes πŸ”΄ Berita Terkini response_format kesalahan validasi sekarang muncul ValidationError #3274
1.0.0b260123 Notes πŸ”΄ Berita Terkini AG-UI menjalankan logika yang disederhanakan #3322
1.0.0b260123 Notes 🟑 Peningkatan Klien antropis response_format menambahkan dukungan untuk output terstruktur #3301
1.0.0b260123 Notes 🟑 Peningkatan Konfigurasi Azure AI diperluas dengan dukungan reasoning dan rai_config #3403, #3265
1.0.0b260116 Notes πŸ”΄ Berita Terkini create_agent β†’ as_agent #3249
1.0.0b260116 Notes πŸ”΄ Berita Terkini source_executor_id β†’ executor_id #3166
1.0.0b260116 Notes 🟑 Peningkatan AG-UI mendukung kelangsungan sesi/utas yang dikelola layanan #3136
1.0.0b260114 Notes πŸ”΄ Berita Terkini Orkestrasi direfaktorisasi (GroupChat, Handoff, Eksekusi Berurutan, Eksekusi Bersamaan) #3023
1.0.0b260114 Notes πŸ”΄ Berita Terkini Opsi sebagai TypedDict dan Generic #3140
1.0.0b260114 Notes πŸ”΄ Berita Terkini display_name Dihapus; context_providers β†’ context_provider (tunggal); middleware harus menjadi daftar #3139
1.0.0b260114 Notes πŸ”΄ Berita Terkini AgentRunResponse / AgentRunResponseUpdate diganti namanya menjadi AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 Notes 🟑 Peningkatan Runtime alur kerja deklaratif ditambahkan untuk alur kerja yang didefinisikan YAML #2815
1.0.0b260114 Notes 🟑 Peningkatan Peningkatan pemuatan/keandalan MCP (penanganan kehilangan koneksi, penomoran halaman, kontrol representasi) #3154
1.0.0b260114 Notes 🟑 Peningkatan Foundry A2ATool mendukung koneksi tanpa URL target eksplisit #3127
1.0.0b260107 Notes β€” Tidak ada perubahan signifikan β€”
1.0.0b260106 Notes β€” Tidak ada perubahan signifikan β€”

Langkah selanjutnya