0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Cách Tích Hợp Large Language Models (LLMs) vào Ứng Dụng .NET Sử Dụng Microsoft.Extensions.AI

Đăng vào 2 tuần trước

• 5 phút đọc

Chủ đề:

LLMASP .NET.NET

Tích Hợp Large Language Models (LLMs) vào Ứng Dụng .NET Sử Dụng Microsoft.Extensions.AI

Xin chào các bạn! Hôm nay, chúng ta sẽ tiếp tục khám phá về lập trình trong series chia sẻ kinh nghiệm và các best practice. Bài viết hôm nay sẽ hướng dẫn bạn cách sử dụng Large Language Models (LLMs) trong các ứng dụng .NET bằng thư viện Microsoft.Extensions.AI, mà thực chất là một abstraction được xây dựng trên Semantic Kernel SDK.

I. Giới Thiệu về LLMs

Large Language Models (LLMs) đã đem lại những cuộc cách mạng trong việc xây dựng ứng dụng AI. Mặc dù nhiều lập trình viên đã quen thuộc với các dịch vụ AI đám mây như GPT từ OpenAI, nhưng giờ đây, việc triển khai các mô hình LLMs đã trở nên dễ dàng hơn bao giờ hết trên máy tính cá nhân nhờ vào các dự án như Ollama, giúp bạn tận dụng nguồn tài nguyên sẵn có mà không phải phụ thuộc vào dịch vụ bên ngoài.

II. Các Khái Niệm Cơ Bản

1. Large Language Models (LLMs)

LLMs là các mô hình học sâu có khả năng:

  • Hiểu và sinh ra văn bản tự nhiên giống như con người;
  • Thực hiện các tác vụ như hoàn thiện văn bản, tóm tắt, và phân loại thông tin;
  • Thiết lập các cuộc trò chuyện có ngữ cảnh.

Trước đây, các mô hình này chủ yếu được truy cập thông qua các API đám mây, song với các tiến bộ mới, chúng ta có thể chạy các mô hình này ngay trên phần cứng tiêu chuẩn.

2. Ollama

Ollama là dự án mã nguồn mở giúp việc chạy các mô hình LLMs cục bộ trở nên dễ dàng:

  • Cung cấp Docker container để chạy các mô hình mã nguồn mở như Llama;
  • Tạo điều kiện cho việc thử nghiệm AI mà không cần phụ thuộc vào dịch vụ đám mây;
  • Quản lý và tối ưu mô hình hiệu quả;
  • Cung cấp API tương tác đơn giản.

3. Microsoft.Extensions.AI

Thư viện Microsoft.Extensions.AI cung cấp một giao diện thống nhất để làm việc với LLMs trong ứng dụng .NET:

  • Được xây dựng trên Semantic Kernel, giúp người phát triển dễ dàng tích hợp;
  • Trừu tượng hóa các triển khai LLM khác nhau, cho phép chuyển đổi giữa các nhà cung cấp (Ollama, Azure, OpenAI) mà không cần thay đổi mã nguồn.

III. Chuẩn Bị Môi Trường

Yêu Cầu:

  • Cài đặt Docker;
  • Nền tảng Docker với Ollama container chứa mô hình Llama3;
  • Cài đặt các NuGet package sau:

Cách Thiết Lập

Chạy container Ollama với mô hình Llama3:

plaintext Copy
# Tải xuống Ollama container
docker run --gpus all -d -v ollama_data:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

# Tải mô hình llama3
docker exec -it ollama ollama pull llama3

Cài đặt các gói NuGet trong dự án .NET:

plaintext Copy
Install-Package Microsoft.Extensions.AI  # Thư viện AI cơ bản
Install-Package Microsoft.Extensions.AI.Ollama  # Thực hiện việc tích hợp Ollama
Install-Package Microsoft.Extensions.Hosting  # Để xây dựng DI container

Ví Dụ Thực Tế:

1. Chat Completion Đơn Giản

csharp Copy
var builder = Host.CreateApplicationBuilder();

builder.Services.AddChatClient(
    new OllamaChatClient(new Uri("http://localhost:11434"), "llama3")
);

var app = builder.Build();
var chatClient = app.Services.GetRequiredService<IChatClient>();

var chatCompletion = await chatClient.CompleteAsync(
    ".NET là gì? Trả lời tối đa 50 ký tự."
);

Console.WriteLine(chatCompletion.Message.Text);

2. Chat Có Lịch Sử
Để duy trì lịch sử chat, ta có thể lưu các tin nhắn vào danh sách:

csharp Copy
var chatHistory = new List<ChatMessage>();

while (true)
{
   Console.WriteLine("Nhập prompt của bạn:");
   var userPrompt = Console.ReadLine();
   chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt));

   Console.WriteLine("Phản hồi từ AI:");
   var chatResponse = "";
   await foreach (var item in chatClient.CompleteStreamingAsync(chatHistory))
   {
       Console.Write(item.Text);
       chatResponse += item.Text;
   }
   chatHistory.Add(new ChatMessage(ChatRole.Assistant, chatResponse));
   Console.WriteLine();
}

Tính năng streaming cho phép hiển thị kết quả theo từng phần, giống như ChatGPT.

3. Tóm Tắt Bài Viết Tự Động
Dưới đây là đoạn mã để tóm tắt các bài viết:

csharp Copy
var posts = Directory.GetFiles("posts").Take(5).ToArray();
foreach (var post in posts)
{
   string prompt = $$"""
         Bạn sẽ nhận được một văn bản đầu vào và định dạng đầu ra mong muốn.
         Bạn cần phân tích văn bản và tạo ra định dạng đầu ra mong muốn.

         # Đáp ứng mong muốn

         {
            "title": "Tiêu đề được lấy từ phần front matter",
            "summary": "Tóm tắt bài viết không quá 100 từ"
         }

         # Nội dung bài viết:

         {File.ReadAllText(post)}
   """;

   var chatCompletion = await chatClient.CompleteAsync(prompt);
   Console.WriteLine(chatCompletion.Message.Text);
   Console.WriteLine(Environment.NewLine);
}

Linh Hoạt Với Các Nhà Cung Cấp LLM

csharp Copy
// Sử dụng Azure OpenAI
builder.Services.AddChatClient(
    new AzureOpenAIClient(
        new Uri("AZURE_OPENAI_ENDPOINT"), 
        new DefaultAzureCredential()
    ).AsChatClient()
);

// Sử dụng OpenAI
builder.Services.AddChatClient(
    new OpenAIClient("OPENAI_API_KEY").AsChatClient()
);

IV. Kết Luận

Microsoft.Extensions.AI đơn giản hóa việc tích hợp LLMs vào ứng dụng .NET, giúp phát triển đa dạng các tính năng, bao gồm:

  • Xây dựng giao diện chat;
  • Xử lý tài liệu;
  • Thêm các tính năng AI vào ứng dụng.

Một số ứng dụng thực tiễn có thể kể đến:

  • Tự động kiểm duyệt nội dung;
  • Phân loại ticket hỗ trợ;
  • Tóm tắt nội dung cho bản tin.

Tài Liệu Tham Khảo

  • Tài Liệu Chính Thức
  • Bài Viết Kỹ Thuật
    • An Overview of Large Language Models LLMs
    • .NET AI Development Patterns
  • Nguồn Học Tập
    • Pluralsight: AI Integration in .NET
      source: viblo
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào