Apakah Anda membutuhkan cara cepat untuk menambahkan pengalaman AI percakapan ke aplikasi .NET? Dengan Aspose.LLM, Anda dapat membangun obrolan sederhana tanpa secara eksplisit membuat atau mengelola ID sesi. SendMessageAsync secara otomatis menggunakan sesi saat ini, memungkinkan pesan berurutan berbagi konteks percakapan.

Pola ini berguna untuk satu percakapan pada satu waktu, termasuk alat CLI, prototipe, skrip, dan aplikasi sederhana lainnya.

Saat Simple Chat Menjadi Pilihan yang Tepat

Pola implisit-sesi cocok untuk:

  • Satu pertanyaan dan jawaban.
  • Percakapan singkat bolak-balik.
  • Aplikasi CLI dan skrip.
  • Prototipe.
  • Aplikasi di mana hanya satu percakapan yang perlu aktif pada satu waktu.

Jika aplikasi Anda membutuhkan banyak percakapan independen—misalnya, chatbot yang melayani banyak pengguna—Anda harus menggunakan API sesi eksplisit Aspose.LLM sebagai gantinya.

Kirim Pesan Tanpa Mengelola Sesi

Pola pesan inti sengaja dibuat kecil:

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

Ketika Anda melakukan panggilan berikutnya pada instance AsposeLLMApi yang sama, panggilan tersebut termasuk dalam percakapan saat ini yang sama:

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

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

Anda tidak membuat ID sesi, tidak meneruskannya antar panggilan, atau secara eksplisit menambahkan riwayat percakapan. Instansi AsposeLLMApi yang sama mempertahankan percakapan saat ini untuk Anda. Sumber yang ada mendokumentasikan perilaku ini sebagai sesi implisit yang dipertahankan selama masa hidup instansi API. fileciteturn0file0L29-L34

Pengaturan lengkap masih memerlukan instance API berlisensi dan preset. Contoh sumber menggunakan Aspose.LLM.License, Qwen25Preset, dan AsposeLLMApi.Create(preset). fileciteturn0file0L87-L122

Membangun Obrolan Konsol Interaktif

Dengan pola pesan dasar yang dipahami, mari kita ubah menjadi aplikasi konsol interaktif kecil.

Bagian pentingnya adalah membuat API sekali, lalu menggunakannya kembali untuk setiap pesan:

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}");
            }
        }
    }
}

Contoh ini membuat obrolan sederhana:

  • Instansi API dibuat sekali.
  • Setiap pemanggilan SendMessageAsync menggunakan sesi implisit yang sama.
  • Pesan-pesan sebelumnya tetap tersedia bagi model.
  • Loop menyediakan percakapan bolak-balik yang alami.
  • Pengecualian ditangani per pesan sehingga satu permintaan yang gagal tidak menghentikan aplikasi.

Contoh sumber menggunakan struktur yang sama dan mencatat bahwa satu instance API mempertahankan konteks di seluruh iterasi. fileciteturn0file0L192-L245

Untuk menjalankannya, buat proyek konsol .NET, ganti Program.cs yang dihasilkan, dan jalankan:

dotnet new console
dotnet run

Aspose.LLM menyediakan kelas tingkat tinggi AsposeLLMApi yang mengabstraksikan pemuatan model, tokenisasi, dan inferensi. Untuk memulai, instal paket NuGet:

Install-Package Aspose.LLM

Sesuaikan Satu Pesan dengan Preset yang Berbeda

Bagaimana jika sebagian besar percakapan Anda harus menggunakan perilaku default, tetapi satu pertanyaan tertentu membutuhkan respons yang lebih deterministik?

Anda dapat melewatkan preset yang berbeda ke SendMessageAsync untuk panggilan tersebut:

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

Penimpaan hanya berlaku untuk panggilan itu. Preset default API tetap tidak berubah, dan sesi yang mendasarinya terus memberikan konteks percakapan. fileciteturn0file0L126-L159

Suhu rendah seperti 0.1f membuat sampling lebih deterministik, yang dapat berguna untuk pertanyaan di mana Anda menginginkan variasi yang lebih sedikit dalam respons yang dihasilkan. fileciteturn0file0L155-L159

Lindungi Permintaan Obrolan yang Berjalan Lama dengan Pembatalan

Inferensi model lokal dapat memakan waktu lebih lama untuk prompt yang besar atau respons yang lebih panjang. Anda dapat mencegah permintaan individual berjalan tanpa batas dengan melewatkan CancellationToken.

Sebagai contoh, atur batas waktu 30 detik:

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.");
}

Sumber mendokumentasikan pola yang sama: buat sebuah CancellationTokenSource dengan batas waktu, berikan token‑nya ke SendMessageAsync, dan tangkap OperationCanceledException ketika permintaan dibatalkan. fileciteturn0file0L161‑L190

Dalam aplikasi ASP.NET Core, Anda juga dapat meneruskan token pembatalan permintaan sehingga proses pembuatan dapat dihentikan ketika klien terputus.

Masalah Umum

MasalahApa yang harus diperiksa
Not licensed for this methodPastikan lisensi dimuat sebelum memanggil SendMessageAsync.
Multiple AsposeLLMApi instancesGunakan kembali satu instance dan dispose dengan benar.
Slow first responseUnduhan model/engine awal dapat memakan waktu beberapa menit pada mesin yang baru.

Sumber secara khusus mendokumentasikan kesalahan lisensi, perilaku satu-instansi-aktif, dan pemuatan model pertama yang lebih lambat. fileciteturn0file0L249-L255

Obrolan Sederhana vs. Sesi Eksplisit

Pendekatan sesi implisit sengaja dibatasi: itu menjaga implementasi tetap kecil dengan mempertahankan satu percakapan saat ini pada instance AsposeLLMApi.

Jika Anda membutuhkan…Gunakan
Satu percakapanSendMessageAsync
Obrolan interaktif singkatSendMessageAsync
CLI atau prototipeSendMessageAsync
Beberapa percakapan independenSesi eksplisit
Beberapa pengguna atau obrolan bersamaanSesi eksplisit
Status percakapan yang persistenPersistensi sesi

Gunakan pesan implisit ketika satu percakapan sudah cukup. Beralih ke API sesi eksplisit ketika Anda memerlukan percakapan independen, pengguna bersamaan, status persisten, atau kontrol lebih besar atas identitas sesi. Sumber yang ada merekomendasikan sesi eksplisit untuk percakapan bersamaan dan status persisten. fileciteturn0file0L266-L274

Untuk pendekatan sesi eksplisit, lihat dokumentasi Aspose.LLM dan API multi-turn/sesi.

Dapatkan Lisensi Gratis

Aspose menawarkan lisensi sementara untuk evaluasi. Dapatkan satu dari halaman lisensi sementara Aspose dan letakkan file Aspose.LLM.lic di tempat aplikasi Anda dapat memuatnya.

Sumber Daya Tambahan Gratis

Kesimpulan

Membangun chat AI sederhana dengan Aspose.LLM tidak memerlukan manajemen sesi secara eksplisit. Dengan membuat satu instance AsposeLLMApi dan memanggil SendMessageAsync, Anda dapat membangun pengalaman percakapan di mana API secara otomatis mempertahankan sesi saat ini.

Untuk aplikasi sederhana, prototipe, skrip, dan pengalaman obrolan satu pengguna, ini menjaga implementasi tetap minimal. Ketika aplikasi Anda berkembang untuk mendukung banyak percakapan atau memerlukan kontrol sesi yang eksplisit, Anda dapat beralih ke API berbasis sesi.

FAQs

  1. Apakah saya perlu mengelola sesi obrolan secara manual dengan Aspose.LLM? Tidak. Metode SendMessageAsync implisit‑sesi secara otomatis melacak status percakapan selama masa hidup instance AsposeLLMApi.

  2. Apakah saya dapat mengubah perilaku model untuk hanya satu pertanyaan? Ya. Berikan preset yang berbeda (mis., dengan suhu lebih rendah) sebagai argumen preset ke SendMessageAsync. Hanya panggilan itu yang menggunakan pengaturan baru.

  3. Bagaimana cara menghentikan proses generasi yang berjalan lama? Buat sebuah CancellationTokenSource dengan batas waktu dan berikan token‑nya ke SendMessageAsync. Tangkap OperationCanceledException untuk menangani batas waktu.

  4. Kesalahan umum apa yang harus saya perhatikan? Lisensi yang hilang, membuat beberapa instance API secara bersamaan, dan pemuatan model pertama yang lambat adalah masalah yang paling sering terjadi. Ikuti langkah-langkah mitigasi yang dijelaskan di atas.

  5. Apakah kode contoh siap untuk produksi? Potongan kode ini disalin dari dokumentasi resmi Aspose dan belum diuji di sandbox. Uji mereka di lingkungan Anda sendiri dan tambahkan penanganan error yang kuat sebelum diterapkan.

Baca Selengkapnya