Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
-
SubprocessConfigdihapus β gunakanRuntimeConnection.for_stdio(path=...)+ argumen kata kunci padaCopilotClient(connection, ,log_levelbase_directory). -
Jalur impor dipindahkan β
copilot.generated.session_eventsβcopilot.session_events. -
Pengaturan diganti namanya β
copilot_homeβbase_directory; variabel lingkungan sekarangGITHUB_COPILOT_BASE_DIRECTORY(adalahGITHUB_COPILOT_COPILOT_HOME). -
Penangan izin β gunakan jenis keputusan konkret alih-alih
PermissionRequestResult(kind=...). Fitur bawaanPermissionHandler.approve_allmenggantikan 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
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=Falsejika 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
SkillFrontmatteratribut.
π΄ 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
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
AgentResponsealih-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 konstruktorallowed_checkpoint_typesβ jika tidak, proses pemuatan akan memunculkanWorkflowCheckpointException. - 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-alihMessage(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, jadicontents=["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, danagent-framework-foundrysekarang 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, danagent-framework-ollamamasih memerlukan--pre. - Jika satu perintah penginstalan menyertakan paket beta apa pun, simpan
--prepada 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, danFoundryEmbeddingSettingsdariagent_framework.foundry. - Instal
agent-framework-foundryuntuk obrolan Foundry, agen yang dikelola layanan, penyedia memori, dan penyematan. -
agent_framework.azuretidak lagi mengeksporAzureAIInferenceEmbeddingClient,AzureAIInferenceEmbeddingOptions,AzureAIInferenceEmbeddingSettings, atauAzureAISettings. - Penyematan foundry sekarang menggunakan
FOUNDRY_MODELS_ENDPOINT,FOUNDRY_MODELS_API_KEY,FOUNDRY_EMBEDDING_MODEL, dan opsionalFOUNDRY_IMAGE_EMBEDDING_MODEL. -
FoundryChatClientdanFoundryAgentmasih menggunakan pengaturan titik akhir proyek sepertiFOUNDRY_PROJECT_ENDPOINTdanFOUNDRY_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_kwargsdanclient_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(biasanyadictataulist). - 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
modeldi mana pun Anda sebelumnya menggunakanmodel_id. -
Agent.default_optionsdan per menjalankanoptions={...}sekarang membutuhkan"model", bukan"model_id". - Objek respons muncul ke permukaan
response.model, bukanresponse.model_id. - Pengaturan OpenAI sekarang menggunakan
OPENAI_MODEL, ,OPENAI_CHAT_MODELOPENAI_CHAT_COMPLETION_MODEL, danOPENAI_EMBEDDING_MODEL. - Pengaturan Azure OpenAI sekarang menggunakan
AZURE_OPENAI_MODEL, ,AZURE_OPENAI_CHAT_MODELAZURE_OPENAI_CHAT_COMPLETION_MODEL, danAZURE_OPENAI_EMBEDDING_MODEL. - Anthropic sekarang menggunakan
ANTHROPIC_CHAT_MODEL, dan Foundry Local menggunakanFOUNDRY_LOCAL_MODEL. - Paket Antropis juga menambahkan pembungkus yang dihosting penyedia seperti
AnthropicFoundryClient, ,AnthropicBedrockClientdanAnthropicVertexClient.
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.
-
ContextProviderdanHistoryProvidersekarang menjadi kelas dasar Python kanonis. -
BaseContextProviderdanBaseHistoryProvidertetap sementara sebagai alias yang tidak digunakan lagi untuk kompatibilitas, tetapi kode baru harus bermigrasi ke nama baru. -
SessionContextsekarang dapat mengumpulkan obrolan atau middleware fungsi yang ditambahkan oleh penyedia melaluiextend_middleware()dan mengekspos daftar yang diratakan melaluiget_middleware(). -
Agent(..., require_per_service_call_history_persistence=True)menjalankan penyedia riwayat untuk setiap panggilan model alih-alih sekali setelah keseluruhanrun(). - 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_idatauoptions={"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.azuretidak lagi mengeksporAzureOpenAI*atau antarmuka agen/klien/penyediaAzureAI*yang lebih lama. - Tipe kompatibilitas Asisten Python OpenAI tidak lagi menjadi bagian dari permukaan
agent_framework.openaisaat ini. - Gunakan
OpenAIChatClient,OpenAIChatCompletionClient, danOpenAIEmbeddingClientuntuk skenario OpenAI atau Azure OpenAI langsung. - Gunakan
FoundryChatClientuntuk inferensi proyek Foundry danFoundryAgentuntuk Prompt Agents atau HostedAgents. - Namespace
agent_framework.azuresaat 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 bawahagent_framework.foundry.
Jika Anda memigrasikan kode Python yang lebih lama, gunakan pengganti ini:
-
AzureOpenAIResponsesClientβOpenAIChatClient -
AzureOpenAIChatClientβOpenAIChatCompletionClient -
AzureOpenAIEmbeddingClientβOpenAIEmbeddingClient -
AzureAIAgentClient/AzureAIClient/AzureAIProjectAgentProvider/AzureAIAgentsProviderFoundryChatClientβ atauFoundryAgent, tergantung pada apakah aplikasi Anda memiliki definisi agen -
OpenAIAssistantsClient/OpenAIAssistantProviderOpenAIChatClientβ untuk pekerjaan Python OpenAI saat ini, atauFoundryAgentjika 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 namaagent_framework.openai. - Klien-klien Microsoft Foundry sekarang berada dalam paket
agent-framework-foundrydan ruang namaagent_framework.foundry. - Foundry Local juga ditampilkan dari
agent_framework.foundrysebagaiFoundryLocalClient. -
OpenAIResponsesClientdiganti namanya menjadiOpenAIChatClient. -
OpenAIChatClientdiganti namanya menjadiOpenAIChatCompletionClient. - Konfigurasi klien distandarkan pada
model, menggantikan parameter lama sepertimodel_id, ,deployment_namedanmodel_deployment_name. - Untuk kode "Azure OpenAI" baru, gunakan klien
agent_framework.openai. Shim kompatibilitas sebelumnyaAzureOpenAI*dihapus nanti di #4990. - Untuk kode Foundry baru, gunakan
FoundryChatClientuntuk inferensi proyek langsung,FoundryAgentuntuk Prompt Agents dan HostedAgents, danFoundryLocalClientuntuk 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βOpenAIChatClientuntuk migrasi API Respons Langsung, atauFoundryAgentjika 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_MODELuntukOpenAIChatClientdanOPENAI_CHAT_COMPLETION_MODELuntukOpenAIChatCompletionClient, denganOPENAI_MODELsebagai fallback bersama. - Azure OpenAI sekarang menggunakan
AZURE_OPENAI_CHAT_MODELuntukOpenAIChatClient,AZURE_OPENAI_CHAT_COMPLETION_MODELuntukOpenAIChatCompletionClient, danAZURE_OPENAI_MODELsebagai cadangan bersama. - Gunakan
azure_endpointuntuk URL sumber daya Azure OpenAI, ataubase_urljika Anda sudah memiliki URL lengkap.../openai/v1, dan aturapi_versionuntuk permukaan Api Azure OpenAI yang Anda gunakan - Mengadopsi pengaturan khusus Foundry seperti
FOUNDRY_PROJECT_ENDPOINT,FOUNDRY_MODEL,FOUNDRY_AGENT_NAME, danFOUNDRY_AGENT_VERSIONuntuk klien Foundry cloud - Gunakan
ANTHROPIC_CHAT_MODELuntuk Anthropic danFOUNDRY_LOCAL_MODELuntuk 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-coresekarang sengaja minimal. - Jika Anda mengimpor
agent_framework.openai, instalagent-framework-openai. - Jika Anda mengimpor
agent_framework.foundry, instalagent-framework-foundryuntuk inferensi proyek Foundry, agen yang dikelola layanan, penyedia memori, dan penyematan. Gunakanagent-framework-foundry-local --preuntuk runtime lokal. - Jika Anda menggunakan alat MCP,
Agent.as_mcp_server(), atau integrasi MCP lainnya pada penginstalan minimal, instalmcp --presecara manual. Untuk dukungan WEBSocket MCP, instalmcp[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_KEYdikonfigurasikan, klien generik tetap menggunakan OpenAI kecuali Anda mengirimkan sinyal perutean Azure eksplisit seperticredentialatauazure_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()padaOpenAIChatClient,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_MODELtetap 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_kwargsuntuk nilai yang hanya akan dilihat oleh alat-alat atau middleware untuk fungsi. - Gunakan
client_kwargsuntuk kwarg lapisan klien dan konfigurasi middleware klien. - Akses data alat/runtime melalui
FunctionInvocationContext(ctx.kwargsdanctx.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_featurespassthrough telah dihapus dari pembuatan agen Azure AI. - Perilaku pratinjau sekarang menggunakan
allow_preview=Truepada 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
ToolInvocationklasifikasi data alih-alih mentahdict. - Mengembalikan
ToolResultmenggunakan bidang snake_case sepertiresult_typedantext_result_for_llm. - Paket
agent-framework-github-copilotsekarang 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 keSkillsProvider. - 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()
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 paketpython-dotenvdi awal aplikasi Anda - Meneruskan
env_file_path=".env"keload_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 olehcontext_providers=[...] -
ChatMessageStoredihapus. GunakanHistoryProvider(atauInMemoryHistoryProvideruntuk kasus dalam memori default), keduanya diekspor dariagent_framework. Jika tidak ada penyedia konteks yang diberikan, agen akan secara otomatis menyisipkanInMemoryHistoryProvider.
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.
-
WorkflowCheckpointsekarang menyimpan objek langsung (serialisasi terjadi di penyimpanan titik pemeriksaan) -
FileCheckpointStoragesekarang menggunakan serialisasi "pickle" -
workflow_idtelah dihapus danprevious_checkpoint_idditambahkan - 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.
-
RoledanFinishReasonsekarang menjadi pembungkus di atasNewTypemenggunakanstrRoleLiteral/ untuk nilai yang diketahui. Perlakukan mereka sebagai string (tanpa menggunakan.value). -
Messagekonstruksi distandarisasi padaMessage(role, contents=[...]); string dicontentsdikonversi secara otomatis ke konten teks. -
ChatResponsedanAgentResponsekonstruktor sekarang berpusat padamessages=(tunggalMessageatau urutan); penggunaan konstruktor warisantext=dihapus dari respons. -
ChatResponseUpdatedanAgentResponseUpdatetidak lagi menerimatext=; gunakancontents=[Content.from_text(...)]. - Nama asisten penggabungan pembaruan telah disederhanakan.
-
try_parse_valuedihapus dariChatResponsedanAgentResponse.
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
| 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
-
WorkflowBuildersekarang memerlukanstart_executorsebagai argumen konstruktor (sebelumnya diatur melalui metode lancar) -
SequentialBuilder,ConcurrentBuilder,GroupChatBuilder, danMagenticBuildersekarang memerlukanparticipantsatauparticipant_factoriessaat waktu konstruksi β jika keduanya tidak diberikan, maka akan memicuValueError
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)
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
AgentApprovalExecutordanAgentRequestInfoExecutor.
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_nameparameter dihapus dari agen -
context_providers(plural, daftar penerimaan) diubah menjadicontext_provider(tunggal, hanya 1 yang diizinkan) -
middlewaresekarang memerlukan daftar (tidak lagi menerima instans tunggal) -
AggregateContextProviderdihapus 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 | β |