Hướng dẫn

Xây backend AI bằng C# và .NET: kiến trúc và thư viện 2026

Hướng dẫn chọn thư viện và kiến trúc khi xây backend AI bằng C# và .NET năm 2026: Microsoft.Extensions.AI, Microsoft Agent Framework, SDK OpenAI và Anthropic, MCP, ONNX Runtime, cùng streaming, resilience, OpenTelemetry, kiểm thử và chi phí.

Tóm tắt: nên dùng gì để xây backend AI bằng C# năm 2026

Với phần lớn backend AI viết bằng C#, hãy bắt đầu bằng Microsoft.Extensions.AI (lớp trừu tượng IChatClient chung cho mọi nhà cung cấp mô hình), chỉ thêm Microsoft Agent Framework khi bài toán thật sự là agent nhiều bước, và dùng SDK chính thức của OpenAI hoặc Anthropic làm lớp kết nối bên dưới. Phần còn lại là kỹ thuật backend .NET quen thuộc: dependency injection, Polly cho resilience, OpenTelemetry cho quan sát và kiểm thử tự động.

Đây cũng là thứ tự Microsoft khuyến nghị trên trang tổng quan hệ sinh thái .NET + AI: bắt đầu với Microsoft.Extensions.AI, thêm DataIngestion và VectorData khi cần trả lời dựa trên dữ liệu riêng, dùng MCP khi năng lực cần chia sẻ giữa nhiều ứng dụng, và chuyển sang Agent Framework khi lời gọi một bước trở thành quy trình nhiều bước.

Bài viết do Phan Phúc Nguyên, Giám đốc EYC, biên soạn. Tên gói và API được đối chiếu với Microsoft Learn, GitHub và NuGet tại thời điểm viết (10/2026); hệ sinh thái thay đổi nhanh, nên hãy ghim phiên bản và đọc release notes trước khi nâng cấp.

Bản đồ thư viện .NET cho AI (trạng thái 10/2026)

Bảng dưới gom các thành phần chính theo vai trò. Điều cần nhớ nhất: Microsoft.Extensions.AI là lớp trừu tượng; Agent Framework là lớp điều phối; SDK của nhà cung cấp là lớp kết nối; ONNX Runtime và ML.NET dành cho mô hình chạy cục bộ.

Các thư viện chính cho backend AI trên .NET
Thành phầnVai tròTrạng thái đã kiểm chứngKhi nào dùng
Microsoft.Extensions.AI (MEAI)Lớp trừu tượng: IChatClient, IEmbeddingGenerator, middleware (gọi hàm, cache, telemetry)Gói Abstractions phiên bản 10.x trên Microsoft LearnMặc định cho mọi tính năng AI ở tầng ứng dụng
Microsoft Agent Framework (MAF)Điều phối agent, workflow dạng đồ thị, trạng thái, human-in-the-loopKế nhiệm trực tiếp Semantic Kernel và AutoGen theo Microsoft Learn; gói Microsoft.Agents.AI có bản ổn định 1.0.0 trên NuGet từ 02/4/2026Khi cần agent đa bước, chuyển giao giữa nhiều agent
Semantic KernelSDK điều phối thế hệ trướcMicrosoft gọi Agent Framework là thế hệ kế tiếp; có hướng dẫn di chuyển chính thứcDự án đang chạy; dự án mới nên cân nhắc MAF
OpenAI (NuGet: OpenAI)SDK chính thức cho OpenAI APIRepo openai/openai-dotnet, tương thích .NET Standard 2.0Gọi mô hình OpenAI hoặc endpoint tương thích
Anthropic (NuGet: Anthropic)SDK chính thức cho Claude APITừ phiên bản 10 trở lên là SDK chính thức; yêu cầu .NET Standard 2.0+Gọi mô hình Claude
ModelContextProtocolSDK C# chính thức cho MCP client và serverBản ổn định 2.2.0 trên NuGet; duy trì cùng MicrosoftChia sẻ công cụ giữa nhiều agent, IDE, sản phẩm
ONNX Runtime (Microsoft.ML.OnnxRuntime)Suy luận mô hình ONNX cục bộCó API C#; chạy Linux, Windows, macOSMô hình nhỏ, phân loại, embedding chạy tại chỗ
ML.NETHuấn luyện và dùng mô hình ML truyền thống trong .NETMã nguồn mở, đa nền tảng, có thể dùng mô hình ONNXDự báo, phân loại trên dữ liệu bảng

Microsoft.Extensions.AI: lớp trừu tượng nên có trong mọi dự án

Theo Microsoft Learn, gói Microsoft.Extensions.AI.Abstractions cung cấp các kiểu trao đổi cốt lõi như IChatClient và IEmbeddingGenerator; bất kỳ thư viện .NET nào cung cấp client cho LLM đều có thể hiện thực IChatClient. Gói Microsoft.Extensions.AI bổ sung các thành phần như tự động gọi hàm công cụ, telemetry và cache theo kiểu dependency injection quen thuộc. Các API cấp thấp này được tách ra từ Semantic Kernel.

Lợi ích thực tế là code nghiệp vụ chỉ phụ thuộc IChatClient. Muốn đổi từ OpenAI sang Claude hay sang mô hình chạy cục bộ qua Ollama, bạn đổi đăng ký trong DI, không đổi logic. IChatClient có hai phương thức chính: GetResponseAsync (trả về toàn bộ) và GetStreamingResponseAsync (trả về IAsyncEnumerable các ChatResponseUpdate).

Client được ghép thành pipeline bằng ChatClientBuilder: UseFunctionInvocation để mô hình gọi hàm C#, UseOpenTelemetry để ghi trace, DistributedCachingChatClient để cache câu trả lời. RoutingChatClient và FailoverChatClient chuyển yêu cầu sang client khác khi một nhà cung cấp lỗi trước khi sinh output.

Microsoft cũng lưu ý rõ: MEAI tự nó không phải agent framework. Một lời gọi đơn, tính năng chat hay vòng lặp gọi công cụ có thể xây bằng MEAI mà không cần trở thành hệ thống agentic.

Microsoft Agent Framework và Semantic Kernel: chọn cái nào?

Trang tổng quan trên Microsoft Learn nêu Agent Framework là kế nhiệm trực tiếp của Semantic Kernel và AutoGen, do chính các nhóm đó xây dựng. Nó kết hợp abstraction đơn giản của AutoGen với các tính năng doanh nghiệp của Semantic Kernel như quản lý trạng thái theo phiên, type safety, middleware, telemetry, và bổ sung workflow dạng đồ thị cho điều phối nhiều agent. Agent Framework hỗ trợ tạo agent từ bất kỳ dịch vụ nào có hiện thực IChatClient, nên nó nằm ngay trên MEAI.

Gói Microsoft.Agents.AI phát hành bản ổn định 1.0.0 trên NuGet ngày 02/4/2026, sau các bản Release Candidate từ tháng 2/2026; tại thời điểm rà soát (10/2026) bản mới nhất là 1.24.0. Một số gói tích hợp vẫn ở dạng prerelease, ví dụ hướng dẫn bắt đầu trên Learn cài Microsoft.Agents.AI.Foundry với cờ --prerelease, nên hãy kiểm tra trạng thái từng gói trước khi đưa vào production.

Microsoft cũng khuyên đừng lạm dụng agent: nếu viết được một hàm để xử lý tác vụ, hãy làm vậy thay vì dùng AI Agent; nếu một lời gọi MEAI hoặc một vòng gọi công cụ đơn giản giải quyết được, hãy dùng cách đơn giản hơn. Xem thêm khái niệm trong bài AI Agent là gì.

  • Dự án mới, cần agent đa bước hoặc workflow: Microsoft Agent Framework.
  • Dự án Semantic Kernel đang chạy ổn: giữ nguyên, lên kế hoạch di chuyển theo hướng dẫn chính thức.
  • Chỉ cần chat, tóm tắt, trích xuất, gọi vài công cụ: Microsoft.Extensions.AI là đủ.

SDK nhà cung cấp, MCP và mô hình chạy cục bộ

SDK chính thức của OpenAI và Anthropic

Thư viện OpenAI cho .NET (repo openai/openai-dotnet) là thư viện chính thức, tương thích mọi ứng dụng .NET Standard 2.0, hỗ trợ streaming, có phương thức async cho mọi lời gọi, và được thiết kế để dễ mock khi kiểm thử. Với Claude, gói NuGet Anthropic từ phiên bản 10 trở lên là SDK C# chính thức; các bản 3.x trở xuống trước đây thuộc SDK cộng đồng tryAGI và đã chuyển sang tên tryAGI.Anthropic. Chi tiết này dễ gây nhầm khi nâng cấp, nên hãy kiểm tra số phiên bản. SDK Anthropic có các phương thức streaming mang hậu tố Streaming, ví dụ Messages.CreateStreaming.

MCP C# SDK

SDK C# chính thức cho Model Context Protocol được duy trì cùng Microsoft, gồm ModelContextProtocol.Core (tối thiểu phụ thuộc), ModelContextProtocol (hosting và DI) và ModelContextProtocol.AspNetCore (server qua HTTP); bản ổn định trên NuGet là 2.2.0. Release notes của 2.0.0 đánh dấu Obsolete một số API cho tính năng bị đặc tả mới loại bỏ, nên tutorial cũ có thể không còn đúng. Công cụ MCP dùng trực tiếp với IChatClient vì McpClientTool kế thừa AIFunction. Nếu công cụ chỉ dùng trong một ứng dụng, gọi hàm trong tiến trình đơn giản hơn. Xem MCP là gì.

ONNX Runtime và ML.NET cho mô hình cục bộ

ONNX Runtime là engine suy luận cho mô hình ONNX, chạy trên Linux, Windows, macOS, có API C# và hỗ trợ bộ tăng tốc như TensorRT, OpenVINO, DirectML. ML.NET là framework ML mã nguồn mở, đa nền tảng để huấn luyện và dùng mô hình trong .NET, dùng được mô hình ONNX. Hai công cụ này hợp với tác vụ hẹp như phân loại văn bản, embedding, dự báo trên dữ liệu bảng, nơi gọi LLM qua API là thừa.

Kiến trúc tham chiếu cho backend AI bằng ASP.NET Core

Ví dụ minh họa: một API hỗ trợ nhân viên chăm sóc khách hàng, trả lời dựa trên tài liệu nội bộ và tra cứu đơn hàng. Kiến trúc chia lớp giúp thay mô hình, thêm công cụ và kiểm thử độc lập.

  • Lớp API (ASP.NET Core): xác thực, giới hạn tần suất, kiểm tra đầu vào, trả kết quả dạng streaming.
  • Lớp ứng dụng: các use case như AnswerQuestion, SummarizeTicket; chỉ phụ thuộc IChatClient và interface nghiệp vụ.
  • Lớp AI: pipeline IChatClient đăng ký trong DI (gọi hàm, telemetry, cache, failover); prompt và cấu hình mô hình đọc từ configuration, không hardcode.
  • Lớp tri thức: Microsoft.Extensions.DataIngestion để đọc, chia đoạn tài liệu; Microsoft.Extensions.VectorData để lưu và truy xuất vector (xem RAG là gì).
  • Lớp công cụ: hàm C# đăng ký qua AIFunctionFactory, hoặc MCP server khi cần chia sẻ cho nhiều ứng dụng; mỗi công cụ có quyền tối thiểu.
  • Lớp vận hành: OpenTelemetry, health check, Polly cho mọi lời gọi HTTP ra ngoài, tác vụ dài đẩy vào hàng đợi xử lý nền.

Streaming, resilience và quan sát hệ thống

Streaming

Câu trả lời dài có thể mất vài giây; repo OpenAI .NET nêu rõ streaming cho phép xử lý phần đầu câu trả lời trước khi mô hình sinh xong. Trong ASP.NET Core, trả IAsyncEnumerable từ GetStreamingResponseAsync qua Server-Sent Events hoặc SignalR, và truyền CancellationToken từ request xuống để hủy lời gọi mô hình khi người dùng đóng kết nối, tránh trả tiền cho token không ai đọc.

Resilience với Microsoft.Extensions.Http.Resilience và Polly

Gói Microsoft.Extensions.Http.Resilience, xây trên Polly, cung cấp AddStandardResilienceHandler cho HttpClient; theo .NET Blog, pipeline chuẩn gồm rate limiter, timeout tổng, retry, circuit breaker và timeout từng lần thử. Với LLM, hãy kéo dài timeout mỗi lần thử cho câu trả lời lớn và không retry request streaming đã bắt đầu trả dữ liệu. Khi tự cấu hình điều kiện retry, lưu ý Polly ném TimeoutRejectedException chứ không phải TimeoutException. Chúng tôi chưa kiểm chứng SDK OpenAI hay Anthropic có dùng IHttpClientFactory theo mặc định không; hãy đọc tài liệu từng SDK về cách truyền HttpClient tùy chỉnh.

OpenTelemetry cho lời gọi AI

UseOpenTelemetry trong MEAI thêm OpenTelemetryChatClient vào pipeline, hiện thực OpenTelemetry Semantic Conventions cho Generative AI (phiên bản 1.41 theo tài liệu API); đặc tả này vẫn ở trạng thái thử nghiệm nên dữ liệu telemetry có thể thay đổi. Các thuộc tính như gen_ai.request.model, gen_ai.usage.input_tokens và gen_ai.usage.output_tokens cho phép đo token và ước tính chi phí theo từng request. Theo OpenTelemetry, mặc định nội dung prompt và tham số công cụ không được ghi vì có thể chứa dữ liệu nhạy cảm; chỉ bật EnableSensitiveData ở môi trường phát triển. Agent Framework cũng phát trace, log, metric theo cùng chuẩn này.

Kiểm thử, triển khai và kiểm soát chi phí

Kiểm thử

Vì code nghiệp vụ phụ thuộc IChatClient, unit test có thể thay bằng một client giả trả câu trả lời cố định. SDK OpenAI .NET được thiết kế hỗ trợ mock với phương thức virtual và model factory. Với chất lượng câu trả lời, Microsoft cung cấp Microsoft.Extensions.AI.Evaluation để so sánh đầu ra lặp lại và bắt hồi quy khi đổi prompt, mô hình hay công cụ. Nên có bộ câu hỏi chuẩn chạy trong CI trước mỗi lần đổi mô hình.

Triển khai

Backend AI .NET triển khai như mọi dịch vụ ASP.NET Core: container Linux, cấu hình và khóa API qua biến môi trường hoặc kho bí mật, không để trong mã. Aspire là lớp điều phối, nối dịch vụ và quan sát cho ứng dụng .NET phân tán gồm API, worker, vector store, MCP server. Khi cần chạy mô hình gần dữ liệu, có Foundry Local cho hướng local-first. Về hạ tầng, xem chọn kiến trúc cloud.

Chi phí

Chi phí chủ yếu đến từ token, không phải từ framework: các thư viện kể trên đều mã nguồn mở. Đòn bẩy giảm chi phí gồm: đo token theo request bằng OpenTelemetry, cache câu trả lời lặp lại, dùng mô hình nhỏ hoặc ONNX cục bộ cho tác vụ hẹp, giới hạn số vòng gọi công cụ, và hủy lời gọi khi client ngắt kết nối. Chi tiết trong bài kiểm soát chi phí LLM.

Kinh nghiệm .NET từ dự án mã nguồn mở của tác giả

Ngoài công việc tại EYC, tác giả duy trì hai dự án mã nguồn mở cá nhân: Nalix, framework mạng nhị phân độ trễ thấp cho .NET 10, tương thích Native AOT (Apache-2.0), và Zalo.Net, SDK .NET không chính thức cho Zalo API. Đây không phải thành phần của sản phẩm EYC. Bài học mang sang backend AI: đo trước khi tối ưu, tách lớp rõ ràng, và ghi rõ khi nào không nên dùng một công cụ, như mục "When NOT to use" trong README của Nalix.

Nếu doanh nghiệp bạn đang có hệ thống .NET và muốn bổ sung AI, EYC có thể hỗ trợ qua dịch vụ phần mềm và SaaS và AI Agent, tự động hóa; cam kết về SLA hay quyền sở hữu mã nguồn theo thỏa thuận trong hợp đồng.

Nếu backend AI cần kết nối kênh Zalo, xem hướng dẫn gọi Zalo API từ C#/.NET.

Câu hỏi thường gặp

Có nên dùng C# để làm backend AI hay phải dùng Python?

Để huấn luyện mô hình, Python vẫn phổ biến hơn. Nhưng phần lớn backend AI là gọi mô hình qua API, kết nối dữ liệu và công cụ, nơi .NET có đủ thư viện chính thức: Microsoft.Extensions.AI, Microsoft Agent Framework, SDK OpenAI và Anthropic, MCP C# SDK và ONNX Runtime.

Microsoft.Extensions.AI khác Semantic Kernel thế nào?

Microsoft.Extensions.AI là lớp trừu tượng cấp thấp (IChatClient, IEmbeddingGenerator, middleware); các API này được tách ra từ Semantic Kernel. Semantic Kernel và nay là Microsoft Agent Framework là lớp điều phối cao hơn, xây trên các abstraction đó.

Có nên chuyển dự án Semantic Kernel sang Microsoft Agent Framework ngay?

Microsoft gọi Agent Framework là kế nhiệm trực tiếp và có hướng dẫn di chuyển chính thức. Với dự án đang chạy ổn, hãy lên kế hoạch di chuyển có kiểm thử thay vì chuyển gấp; với dự án mới cần agent, nên bắt đầu bằng Agent Framework.

SDK Claude chính thức cho C# là gói nào?

Gói NuGet tên Anthropic, từ phiên bản 10 trở lên, là SDK chính thức. Các phiên bản 3.x trở xuống thuộc SDK cộng đồng nay đổi tên thành tryAGI.Anthropic.

Khi nào cần MCP thay vì gọi hàm thông thường?

Khi cùng một bộ công cụ cần phục vụ nhiều ứng dụng, agent hoặc IDE khác nhau. Nếu công cụ chỉ dùng trong một ứng dụng, gọi hàm trong tiến trình qua AIFunction đơn giản hơn.

Làm sao theo dõi chi phí token trong backend .NET?

Bật UseOpenTelemetry trên pipeline IChatClient. Telemetry theo chuẩn GenAI ghi lại mô hình và số token đầu vào, đầu ra cho mỗi lời gọi; xuất sang công cụ quan sát tương thích OTLP để tổng hợp theo tính năng hoặc khách hàng.

Chia sẻ bài viết:
Điểm chính

Năm 2026, xây backend AI bằng C# không còn là chuyện tự viết HttpClient gọi API. Hệ sinh thái .NET đã có lớp trừu tượng chuẩn, framework agent chính thức, SDK chính thức của các nhà cung cấp lớn và SDK MCP. Việc còn lại là kỷ luật kỹ thuật backend: tách lớp, đo đạc, xử lý lỗi, kiểm thử và kiểm soát chi phí. Hãy ghim phiên bản, đọc release notes, và bắt đầu từ giải pháp đơn giản nhất.

Nguồn tham khảo

  1. .NET + AI ecosystem tools and SDKs — Microsoft Learn
  2. Microsoft.Extensions.AI libraries — Microsoft Learn
  3. Use the IChatClient interface — Microsoft Learn
  4. IChatClient Interface (API reference) — Microsoft Learn
  5. OpenTelemetryChatClient Class — Microsoft Learn
  6. Microsoft Agent Framework Overview — Microsoft Learn
  7. Agent Framework observability — Microsoft Learn
  8. Migrate your Semantic Kernel and AutoGen projects to Microsoft Agent Framework Release Candidate — Microsoft Agent Framework Blog
  9. openai/openai-dotnet: The official .NET library for the OpenAI API — GitHub (OpenAI)
  10. C# SDK — Claude Platform Docs (Anthropic)
  11. modelcontextprotocol/csharp-sdk — GitHub (Model Context Protocol)
  12. ModelContextProtocol package — NuGet Gallery
  13. Build resilient HTTP apps: Key development patterns — Microsoft Learn
  14. Building resilient cloud services with .NET 8 — .NET Blog
  15. ONNX Runtime and Models — Microsoft Learn (Azure Machine Learning)
  16. Make predictions with an AutoML ONNX model in .NET (ML.NET) — Microsoft Learn
  17. C# | onnxruntime — ONNX Runtime
  18. Inside the LLM Call: GenAI Observability with OpenTelemetry — OpenTelemetry
  19. Nalix — GitHub (ppn-systems)
  20. Microsoft.Agents.AI package — NuGet Gallery

Giải pháp liên quan

  • Phần mềm & SaaS — Thiết kế và xây dựng nền tảng web, phần mềm doanh nghiệp và sản phẩm thuê bao.
  • AI & Tự động hóa — Điều phối AI Agent, tự động hóa quy trình lặp lại và giữ con người trong quyền kiểm soát.
  • Cloud, Dữ liệu & Hạ tầng — Kiến trúc, lưu trữ, xử lý và nền tảng dữ liệu cho các hệ thống hiện đại.

Đọc tiếp