Bạn cần một cách nhanh chóng để thêm trải nghiệm AI hội thoại vào ứng dụng .NET? Với Aspose.LLM, bạn có thể xây dựng một cuộc trò chuyện đơn giản mà không cần tạo hoặc quản lý ID phiên một cách rõ ràng. SendMessageAsync tự động sử dụng phiên hiện tại, cho phép các tin nhắn liên tiếp chia sẻ ngữ cảnh hội thoại.

Mẫu này hữu ích cho một cuộc trò chuyện tại một thời điểm, bao gồm các công cụ CLI, nguyên mẫu, script và các ứng dụng đơn giản khác.

Khi Trò Chuyện Đơn Giản Là Lựa Chọn Phù Hợp

Mẫu implicit-session phù hợp tốt cho:

  • Một câu hỏi và trả lời duy nhất.
  • Một cuộc trò chuyện ngắn qua lại.
  • Các ứng dụng và script CLI.
  • Nguyên mẫu.
  • Các ứng dụng mà chỉ cần một cuộc trò chuyện hoạt động cùng một lúc.

Nếu ứng dụng của bạn cần nhiều cuộc trò chuyện độc lập—ví dụ, một chatbot phục vụ nhiều người dùng—bạn nên sử dụng các API phiên rõ ràng của Aspose.LLM thay vì.

Gửi tin nhắn mà không quản lý phiên

Mẫu tin nhắn cốt lõi được thiết kế cố ý nhỏ gọn:

string reply = await api.SendMessageAsync("What is 2 + 2?");
Console.WriteLine(reply);

Khi bạn thực hiện các cuộc gọi tiếp theo trên cùng một thể hiện AsposeLLMApi, chúng sẽ thuộc cùng một cuộc trò chuyện hiện tại:

await api.SendMessageAsync("My name is Alice.");

string reply = await api.SendMessageAsync("What is my name?");
Console.WriteLine(reply);

Bạn không tạo ID phiên, không truyền nó giữa các lần gọi, và không cần thêm lịch sử hội thoại một cách rõ ràng. Cùng một thể hiện AsposeLLMApi sẽ duy trì cuộc hội thoại hiện tại cho bạn. Nguồn tài liệu hiện có mô tả hành vi này như một phiên ngầm được duy trì trong suốt thời gian tồn tại của thể hiện API. fileciteturn0file0L29-L34

Việc thiết lập đầy đủ vẫn yêu cầu một thể hiện API có giấy phép và một preset. Ví dụ nguồn sử dụng Aspose.LLM.License, Qwen25Preset, và AsposeLLMApi.Create(preset). fileciteturn0file0L87-L122

Xây dựng một Trò chuyện Console tương tác

Khi đã hiểu mẫu nhắn tin cơ bản, chúng ta hãy biến nó thành một ứng dụng console tương tác nhỏ.

Phần quan trọng là tạo API một lần, sau đó tái sử dụng nó cho mỗi tin nhắn:

using Aspose.LLM;
using Aspose.LLM.Abstractions.Parameters.Presets;

internal class SimpleChatDemo
{
    public static async Task Main()
    {
        var license = new Aspose.LLM.License();
        license.SetLicense("Aspose.LLM.lic");

var preset = new Qwen25Preset();
        using var api = AsposeLLMApi.Create(preset);

Console.WriteLine("Ask me anything. Type 'quit' to exit.");

while (true)
        {
            Console.Write("> ");
            string? line = Console.ReadLine();

if (line == null || line.Equals("quit", StringComparison.OrdinalIgnoreCase))
                break;

try
            {
                string reply = await api.SendMessageAsync(line);
                Console.WriteLine(reply);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
            }
        }
    }
}

Ví dụ này giữ cho cuộc trò chuyện đơn giản:

  • Thực thể API được tạo một lần.
  • Mọi lời gọi SendMessageAsync đều sử dụng cùng một phiên ngầm.
  • Các tin nhắn trước vẫn khả dụng cho mô hình.
  • Vòng lặp cung cấp một cuộc trò chuyện tự nhiên qua lại.
  • Các ngoại lệ được xử lý riêng cho mỗi tin nhắn, vì vậy một yêu cầu thất bại sẽ không làm dừng ứng dụng.

Ví dụ nguồn sử dụng cùng một cấu trúc và ghi chú rằng một thể hiện API duy nhất duy trì ngữ cảnh qua các vòng lặp. fileciteturn0file0L192-L245

Để chạy nó, tạo một dự án console .NET, thay thế tệp Program.cs được tạo, và chạy:

dotnet new console
dotnet run

Aspose.LLM cung cấp một lớp AsposeLLMApi cấp cao giúp trừu tượng hoá việc tải mô hình, token hoá và suy luận. Để bắt đầu, hãy cài đặt gói NuGet:

Install-Package Aspose.LLM

Tùy chỉnh một tin nhắn duy nhất với một preset khác

Nếu hầu hết các cuộc trò chuyện của bạn nên sử dụng hành vi mặc định, nhưng một câu hỏi cụ thể lại cần một phản hồi quyết định hơn thì sao?

Bạn có thể truyền một preset khác vào SendMessageAsync cho cuộc gọi đó:

var strictPreset = new Qwen25Preset();
strictPreset.SamplerParameters.Temperature = 0.1f;

string reply = await api.SendMessageAsync(
    "What is the square root of 144?",
    preset: strictPreset);

Console.WriteLine(reply);

Việc ghi đè chỉ áp dụng cho cuộc gọi đó. Cài đặt mặc định của API vẫn không thay đổi, và phiên làm việc nền vẫn tiếp tục cung cấp ngữ cảnh hội thoại. fileciteturn0file0L126-L159

Nhiệt độ thấp như 0.1f làm cho việc lấy mẫu trở nên quyết định hơn, điều này có thể hữu ích cho các câu hỏi mà bạn muốn giảm sự biến đổi trong phản hồi được tạo ra. fileciteturn0file0L155-L159

Bảo vệ các yêu cầu trò chuyện kéo dài lâu bằng việc hủy bỏ

Việc suy luận mô hình cục bộ có thể mất thời gian lâu hơn đối với các lời nhắc lớn hoặc phản hồi dài hơn. Bạn có thể ngăn một yêu cầu riêng lẻ chạy vô hạn bằng cách truyền một CancellationToken.

Ví dụ, đặt thời gian chờ 30 giây:

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30));

try
{
    string reply = await api.SendMessageAsync(
        "Write a 500-word essay about migration patterns of the Arctic tern.",
        cancellationToken: cts.Token);

Console.WriteLine(reply);
}
catch (OperationCanceledException)
{
    Console.WriteLine("Generation timed out.");
}

Nguồn tài liệu mô tả cùng một mẫu: tạo một CancellationTokenSource với thời gian chờ, truyền token của nó cho SendMessageAsync, và bắt OperationCanceledException khi yêu cầu bị hủy. fileciteturn0file0L161-L190

Trong một ứng dụng ASP.NET Core, bạn cũng có thể truyền token hủy yêu cầu để quá trình tạo có thể dừng lại khi khách hàng ngắt kết nối.

Vấn đề chung

ProblemWhat to check
Not licensed for this methodĐảm bảo rằng giấy phép đã được tải trước khi gọi SendMessageAsync.
Nhiều AsposeLLMApi instancesTái sử dụng một thể hiện duy nhất và giải phóng nó đúng cách.
Phản hồi đầu tiên chậmViệc tải xuống mô hình/động cơ ban đầu có thể mất vài phút trên máy mới.

Nguồn tài liệu cụ thể ghi lại lỗi cấp phép, hành vi một phiên bản hoạt động duy nhất, và việc tải mô hình đầu tiên chậm hơn. fileciteturn0file0L249-L255

Chat Đơn Giản vs. Phiên Rõ Ràng

Cách tiếp cận implicit-session được giới hạn cố ý: nó giữ cho việc triển khai nhỏ gọn bằng cách duy trì một cuộc trò chuyện hiện tại trên một thể hiện AsposeLLMApi.

Nếu bạn cần…Sử dụng
Một cuộc hội thoạiSendMessageAsync
Một cuộc trò chuyện tương tác ngắnSendMessageAsync
CLI hoặc nguyên mẫuSendMessageAsync
Nhiều cuộc hội thoại độc lậpExplicit sessions
Nhiều người dùng hoặc các cuộc trò chuyện đồng thờiExplicit sessions
Trạng thái hội thoại liên tụcSession persistence

Sử dụng tin nhắn ngầm khi một cuộc trò chuyện là đủ. Chuyển sang các API phiên rõ ràng khi bạn cần các cuộc trò chuyện độc lập, người dùng đồng thời, trạng thái bền vững, hoặc kiểm soát nhiều hơn đối với danh tính phiên. Nguồn hiện có khuyến nghị sử dụng các phiên rõ ràng cho các cuộc trò chuyện đồng thời và trạng thái bền vững. fileciteturn0file0L266-L274

Đối với cách tiếp cận phiên rõ ràng, xem tài liệu Aspose.LLM và các API đa vòng/phiên.

Nhận Giấy Phép Miễn Phí

Aspose cung cấp giấy phép tạm thời để đánh giá. Lấy một giấy phép từ trang giấy phép tạm thời của Aspose và đặt tệp Aspose.LLM.lic ở nơi ứng dụng của bạn có thể tải nó.

Tài nguyên bổ sung miễn phí

Kết luận

Xây dựng một cuộc trò chuyện AI đơn giản với Aspose.LLM không yêu cầu quản lý phiên một cách rõ ràng. Bằng cách tạo một thể hiện AsposeLLMApi và gọi SendMessageAsync, bạn có thể xây dựng trải nghiệm hội thoại mà API tự động duy trì phiên hiện tại.

Đối với các ứng dụng đơn giản, nguyên mẫu, script và trải nghiệm trò chuyện một người dùng, cách này giữ cho việc triển khai tối thiểu. Khi ứng dụng của bạn mở rộng để hỗ trợ nhiều cuộc trò chuyện hoặc yêu cầu kiểm soát phiên một cách rõ ràng, bạn có thể chuyển sang các API dựa trên phiên.

FAQs

  1. Tôi có cần quản lý các phiên trò chuyện một cách thủ công với Aspose.LLM không? Không. Phương thức SendMessageAsync implicit‑session tự động theo dõi trạng thái hội thoại trong suốt vòng đời của thực thể AsposeLLMApi.

  2. Tôi có thể thay đổi hành vi của mô hình chỉ cho một câu hỏi không? Có. Cung cấp một preset khác (ví dụ, với nhiệt độ thấp hơn) làm đối số preset cho SendMessageAsync. Chỉ cuộc gọi đó mới sử dụng các cài đặt mới.

  3. Làm sao để dừng một quá trình tạo kéo dài? Tạo một CancellationTokenSource với thời gian chờ và truyền token của nó cho SendMessageAsync. Bắt OperationCanceledException để xử lý thời gian chờ.

  4. Những lỗi phổ biến nào tôi nên chú ý? Thiếu giấy phép, tạo nhiều thể hiện API đồng thời và việc tải mô hình lần đầu chậm là những vấn đề thường gặp nhất. Hãy thực hiện các bước giảm thiểu đã mô tả ở trên.

  5. Mã mẫu đã sẵn sàng cho sản xuất chưa? Các đoạn mã được sao chép từ tài liệu chính thức của Aspose và chưa được kiểm tra trong môi trường sandbox. Hãy kiểm tra chúng trong môi trường của bạn và thêm xử lý lỗi mạnh mẽ trước khi triển khai.

Đọc Thêm