+1

Tích hợp LLMs vào .NET bằng Microsoft.Extensions.AI

Hi anh em, lại là mình đây. Tiếp tục series chia sẻ kinh nghiệm lập trình và các best practice, hôm nay mình sẽ nói về cách sử dụng LLMs trong các ứng dụng .NET với thư viện Microsoft.Extensions.AI, một abstraction được xây dựng trên Semantic Kernel SDK.

I. Giới thiệu

Large Language Models (LLMs) đã thay đổi cách chúng ta xây dựng các ứng dụng AI. Mặc dù nhiều nhà phát triển quen thuộc với các dịch vụ AI đám mây như GPT của OpenAI, việc chạy các mô hình này cục kỳ dễ tiếp cận ngay trên máy tính cá nhân nhờ vào các dự án như Ollama. image.png

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 huấn luyện trên khối lượng dữ liệu khổng lồ, có khả năng:

  • Hiểu và sinh văn bản giống 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, phân loại
  • Trao đổi theo ngữ cảnh

Trước đây, các mô hình này chủ yếu được truy cập qua các API đám mây. Nhưng các tiến bộ gần đây đã cho phép chạy chúng 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 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
  • Giúp thử nghiệm AI mà không phụ thuộc vào dịch vụ đám mây
  • Quản lý và tối ưu mô hình
  • Cung cấp API tương tác đơn giản

3. Microsoft.Extensions.AI

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

  • Xây dựng trên Semantic Kernel
  • 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 thay đổi mã

III. Chuẩn bị

Yêu cầu:

Setup

Chạy container Ollama với model llama3:

# Pull the Ollama container
docker run --gpus all -d -v ollama_data:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

# Pull the llama3 model
docker exec -it ollama ollama pull llama3

Cài các gói NuGet trong .NET:

Install-Package Microsoft.Extensions.AI # The base AI library
Install-Package Microsoft.Extensions.AI.Ollama # Ollama provider implementation
Install-Package Microsoft.Extensions.Hosting # For building the DI container

Ví dụ thực tế:

1. Chat Completion Đơn giản

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 lưu các message vào danh sách:

var chatHistory = new List<ChatMessage>();

while (true)
{
   Console.WriteLine("Enter your prompt:");
   var userPrompt = Console.ReadLine();
   chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt));

   Console.WriteLine("Response from 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 response giú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 code tóm tắt các bài viết:

var posts = Directory.GetFiles("posts").Take(5).ToArray();
foreach (var post in posts)
{
   string prompt = $$"""
         You will receive an input text and the desired output format.
         You need to analyze the text and produce the desired output format.

         # Desired response

         {
            "title": "Title pulled from the front matter section",
            "summary": "Summarize the article in no more than 100 words"
         }

         # Article content:

         {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

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

Kết Luận

Microsoft.Extensions.AI đơn giản hóa việc tích hợp LLM vào ứng dụng .NET. Bạn có thể:

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

Một số ứng dụng thực tế:

  • Kiểm duyệt nội dung tự động
  • 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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí