Hai năm qua, xây dựng agentic application trên .NET có nghĩa là phải chọn giữa Semantic Kernel và AutoGen — rồi chấp nhận những điểm yếu của bất cứ cái nào bạn chọn. Semantic Kernel có RAG và memory primitives tốt nhưng orchestration đa agent yếu. AutoGen có pattern orchestration mạnh nhưng .NET support cảm giác như port từ Python SDK hơn là được thiết kế cho C# developer.

Microsoft Agent Framework 1.0 — GA từ tháng 4 và nhận được major feature expansion tại Build 2026 — là điểm kết thúc của sự phân mảnh đó. Đây là một unified SDK hợp nhất cả hai, và các architectural decision trong đó cho bạn thấy Microsoft đang nghĩ như thế nào về tương lai của agentic development.

Quyết định thú vị nhất là CodeAct.

CodeAct Thực Sự Làm Gì

Agentic tool calling truyền thống hoạt động như thế này: model thấy danh sách tool, quyết định gọi tool nào, framework invoke nó, trả kết quả về cho model, lặp lại. Mỗi tool call là một LLM turn riêng biệt. Một task cần 10 tool call sẽ tạo ra 10 LLM turn.

CodeAct lật ngược điều này. Thay vì chọn tool riêng lẻ, model viết một Python program ngắn để orchestrate các tool:

# CodeAct-generated program cho "tóm tắt 10 PR mới nhất và email báo cáo"
prs = github.list_prs(repo="myorg/myapp", limit=10, state="merged")
summary = "\n".join([f"#{pr.number}: {pr.title} by {pr.author}" for pr in prs])
report = f"Sprint PR Summary\n\n{summary}"
email.send(to="team@myorg.com", subject="Weekly PR Digest", body=report)

Program này execute trong sandboxed Hyperlight micro-VM — WebAssembly-based isolation runtime của Microsoft. Toàn bộ multi-step task hoàn thành trong một LLM generation turn duy nhất, vì model đang viết executable logic thay vì đưa ra quyết định tuần tự.

Kết quả đo được tại Build 2026: giảm 63.9% token tiêu thụ, nhanh hơn 52.4% execution time trên các multi-step workload đại diện.

Các con số này hợp lý khi bạn hiểu kiến trúc. Khi bạn không phải liên tục serialize tool result trở lại prompt context và chờ model quyết định tiếp theo, overhead giảm mạnh.

Tại Sao Hyperlight Sandbox Quan Trọng

Security story ở đây đáng chú ý. CodeAct sinh ra Python tùy ý — vừa mạnh mẽ vừa đáng sợ theo tỷ lệ bằng nhau. Chạy điều đó trong production backend mà không có isolation là hoàn toàn không thể chấp nhận với bất kỳ enterprise deployment nghiêm túc nào.

Hyperlight là câu trả lời. Đây là WebAssembly micro-VM cung cấp per-session isolation: mỗi CodeAct execution nhận môi trường sandboxed riêng, không có quyền truy cập host filesystem, network, hay session khác. Overhead chỉ milliseconds, không phải seconds (không như container spin-up đầy đủ).

Với .NET teams làm việc trong regulated industry — financial services, healthcare, bất cứ thứ gì có compliance requirement — đây là chi tiết kiến trúc làm cho CodeAct có thể deploy trong enterprise, không chỉ là demo thú vị. Sandbox kết hợp với OpenTelemetry tracing tích hợp sẵn trong MAF có nghĩa là bạn có cả isolation và auditability.

.NET API

MAF .NET SDK (AsHarnessAgent()) và Python SDK (create_harness_agent()) có full parity. Đây là cách setup một CodeAct-enabled agent trong C#:

using Microsoft.AgentFramework;
using Microsoft.AgentFramework.CodeAct;

var agent = AgentBuilder.Create()
    .WithModel("claude-fable-5")
    .WithCodeActExecutor(options =>
    {
        options.AllowedModules = ["github", "email", "jira"];
        options.MaxExecutionTime = TimeSpan.FromSeconds(30);
    })
    .WithMemory(new FileMemoryProvider("./agent-memory"))
    .WithTracing(builder => builder.AddOpenTelemetry())
    .AsHarnessAgent();

var result = await agent.RunAsync(
    "Tóm tắt 10 PR merged gần nhất và tạo Jira ticket cho những PR không có linked issue"
);

AllowedModules list là security surface area của bạn — bạn khai báo rõ ràng tool nào Python được generate có thể truy cập. Đây là API design đúng cho enterprise: allowlist thay vì denylist.

Foundry Hosted Agents

Announcement đáng chú ý khác từ Build là Foundry Hosted Agents: cách deploy MAF agent lên production bao gồm scale-to-zero, per-session VM isolation, persistent filesystem state, và tích hợp Application Insights tự động.

Deployment model này hấp dẫn vì một lý do cụ thể: nó giải quyết vấn đề state làm cho agentic system khó trong serverless environment. Stateless function chạy 30 giây rồi thoát không thể duy trì contextual state mà multi-turn agentic work đòi hỏi. Foundry Hosted Agents cho bạn persistent session filesystem tồn tại xuyên các execution window riêng lẻ.

Với team đã trên Azure, điều này loại bỏ objection operational lớn nhất khi deploy agentic workload: bạn không phải tự build session state management.

Ý Nghĩa Với .NET Teams

Trước MAF, .NET team xây dựng agentic feature thường phải đưa ra nhiều lựa chọn khó chịu:

  • Dùng Semantic Kernel vì .NET-native feel nhưng phải làm việc xung quanh multi-agent support yếu
  • Dùng AutoGen vì orchestration quality nhưng chấp nhận second-class .NET experience
  • Build custom orchestration và từ bỏ framework support

MAF 1.0 loại bỏ những trade-off này cho hầu hết use case. Điểm hội tụ là thực tế và được test production — cộng đồng Semantic Kernel đã migrate sang MAF primitives từ khi GA.

Migration path thực tế cho project Semantic Kernel hiện tại: MAF 1.0 expose interface IKernelPlugin của SK, nên existing plugin của bạn hoạt động không cần thay đổi. Wrapper AsHarnessAgent() thêm capability mới (CodeAct, Foundry hosting, OpenTelemetry) vào agent trước đây sẽ là KernelAgent instance trong SK world.

Trade-Off Cần Theo Dõi

CodeAct không phải pattern đúng cho mọi tool call sequence. Khi bạn cần kiểm soát chặt thứ tự operations, hoặc khi individual tool call cần human-in-the-loop approval giữa chúng, traditional sequential tool call pattern vẫn phù hợp.

Sweet spot của CodeAct là bulk, well-defined task nơi toàn bộ operation set có thể biểu diễn như một program: “xử lý 50 ticket này,” “migrate các record này,” “generate và gửi báo cáo này.” Với interactive, exploratory task nơi bước tiếp theo phụ thuộc vào human judgment, bạn vẫn muốn traditional pattern.

MAF cho bạn cả hai. Quyết định kiến trúc là biết khi nào dùng cái nào.

A2A và MCP Integration

MAF 1.0 ship với built-in A2A (Agent-to-Agent) protocol support và MCP (Model Context Protocol) client support. Build demo cho thấy LangGraph agent, .NET MAF agent, và GitHub Copilot SDK agent cộng tác trên cùng workflow qua A2A.

Interoperability này quan trọng hơn có vẻ. Trên thực tế, enterprise agentic system sẽ là heterogeneous — một số component sẽ được phục vụ tốt nhất bởi Python ecosystem của LangGraph, số khác bởi .NET, số khác bởi specialized proprietary agent. A2A là protocol làm cho chúng composable mà không bị vendor lock-in vào một orchestration framework duy nhất.

Ecosystem đang di chuyển nhanh hơn framework có thể document. Nếu bạn đang build .NET agentic system hôm nay, MAF 1.0 là nền tảng đúng — không phải vì nó hoàn hảo, mà vì đó là điểm hội tụ nơi Microsoft đang tập trung investment của mình.

Xuất nội dung

Bình luận