Bir sohbet oturumunu kalıcı hale getirmek, .NET uygulamanızın yeniden başlatmalardan kurtulmasını sağlar, konuşmanın bir yedeğini sunar ve oturumu makineler arasında taşımanıza olanak tanır. Bu rehberde Aspose.LLM kullanarak C#’ta Sohbet Oturumunu Kalıcı Hale Getirme ve Yeniden Başlatma konusunu ele alacağız; desenin ne zaman kullanılacağını, oturumların nasıl kaydedilip yükleneceğini, hangi verilerin depolanacağını, taşınabilirlik hususlarını ve güvenlik en iyi uygulamalarını kapsayacağız.
Neden Bir Sohbet Oturumunu Kalıcı Hale Getirip Yeniden Başlatmalıyız?
Geliştiriciler sıklıkla etkileşimli asistanlar, destek botları veya uzun süren veri analizi iş akışları oluşturur. Birçok senaryoda sohbet bağlamının tek bir sürecin ömründen daha uzun süre hayatta kalması gerekir:
- Kullanıcıların uygulama kapatıldıktan sonra önceki sorgularının hâlâ mevcut olmasını beklediği bir masaüstü destek aracı.
- Birden fazla adımı kapsayan ve bakım nedeniyle yeniden başlatılabilecek sunucu‑tarafı otomasyon.
- Tüm konuşmanın bir anlık görüntüsünü talep eden denetim veya uyumluluk gereksinimleri.
- Bir geliştiricinin dizüstü bilgisayarından üretim sunucusuna bir sorun giderme oturumunun taşınması.
Oturumu bir JSON dosyasına kalıcı hale getirerek, tam mesaj geçmişi ve kesin bir devam için gereken dahili KV önbelleğini yakalarsınız; bu da yukarıdaki kullanım senaryolarını uygulamayı basit hale getirir.
Aspose.LLM ile Başlarken
İlk olarak, Aspose.LLM paketini projenize ekleyin:
Install-Package Aspose.LLM
Daha fazla ürün detayını Aspose.LLM .NET ürün sayfası üzerinde bulabilirsiniz. SDK geçerli bir lisans gerektirir, bu yüzden geçici veya kalıcı bir lisans dosyanızın hazır olduğundan emin olun.
Önkoşullar
- Aspose.LLM NuGet paketini yükleyin.
Aspose.LLM.Licensekullanarak bir Aspose.LLM lisansı uygulayın.- Bir
AsposeLLMApiörneği oluşturun (örneğin, birQwen25Presetile).
Bu Deseni Ne Zaman Kullanmalı
Bu desen, konuşmanın mevcut işlemden sonra da devam etmesi gerektiğinde ya da yedekleme veya taşıma için güvenilir bir anlık görüntü istediğinizde öne çıkar. Tipik senaryolar şunları içerir:
- Kullanıcıların sohbetin başlatmalar arasında kalmasını beklediği masaüstü veya sunucu uygulamaları.
- Sürecin ötesinde devam etmesi gereken sohbeti gerektiren uzun süren iş akışları.
- Aktif bir sohbetin anlık görüntüsü alınarak yedekleme ve denetleme amaçları.
- Aynı SDK sürümü ve ön ayara sahip makineler arasında oturum durumunu taşıma.
Önkoşullar
Bir oturumu kaydetmeden veya geri yüklemeden önce, aşağıdakilerin mevcut olduğundan emin olun:
- Aspose.LLM NuGet paketi – daha önce gösterilen komutla yüklendi.
- Lisans – bir
Aspose.LLM.Licensenesnesi oluşturun ve.licdosyanızlaSetLicensemetodunu çağırın. - API örneği – istediğiniz ön ayarla
AsposeLLMApi‘yi başlatın (ör.,new Qwen25Preset()).
Bu adımlar, makalenin ilerleyen kısmında tam örnekle gösterilmektedir.
Oturumu Kaydet
SDK, bir sohbet oturumunu kalıcı hale getirmek için üç kullanışlı yol sunar. Aşağıdaki adımları izleyin, ardından kod örneğine bakın.
- Dosyanın belirli bir konumda olmasını istiyorsanız
SaveChatSessionyöntemini açık bir dosya yolu ile çağırın. - Yolu atlayarak SDK’nın yürütülebilir dosyanın yanına
<sessionId>.jsonyazmasına izin verin. Path.Combineile geçici bir yol oluşturun, dizinin var olduğundan emin olun ve izole veya sandbox ortamları için oraya kaydedin.
Kod Örneği – Oturumu Kaydetme
Aşağıdaki örnek, üç yaklaşımın tamamını gösterir:
api.SaveChatSession(sessionId, "session-42.json");
api.SaveChatSession(sessionId); // writes <sessionId>.json next to the executable
string path = Path.Combine(Path.GetTempPath(), "chats", $"{sessionId}.json");
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
api.SaveChatSession(sessionId, path);
api.SaveChatSession(sessionId, "session-42.json") JSON dosyasını belirtilen konuma yazar.SaveChatSession‘ı bir yol belirtmeden çağırırsanız, SDK geçerli çalışma dizininde oturum kimliğine göre adlandırılmış bir dosya oluşturur.
Belirli veya geçici bir konuma ihtiyacınız olduğunda, Path.GetTempPath ile kendi klasör yapınızı birleştirin ve kaydetmeden önce dizini oluşturun.
Not: Bu kod parçacıkları resmi Aspose belgelerinden alınmıştır ve bir sandbox ortamında çalıştırılmamıştır. Üretimde kullanmadan önce ortamınızda doğrulayın.
Oturumu Geri Yükleme
Daha önce kaydedilmiş bir oturumu yüklemek aynı derecede basittir. API JSON dosyasını okur, iç durumu yeniden oluşturur ve oturum tanımlayıcısını döndürür, böylece kimliği manuel olarak tekrar geçirmeden mesajlaşmaya devam edebilirsiniz.
LoadChatSessionyöntemini JSON dosyasının yolu ile çağırın.- Döndürülen
sessionIddeğerini saklayın. - Konuşmayı sürdürmek için geri yüklenen kimlikle
SendMessageToSessionAsyncyöntemini kullanın.
Kod Örneği – Oturumu Geri Yükleme
string sessionId = await api.LoadChatSession("session-42.json");
string reply = await api.SendMessageToSessionAsync(sessionId, "What did we discuss?");
LoadChatSession dosyayı okur ve geri yüklenen oturum kimliğini döndürür.
Geri yüklenen oturum otomatik olarak aktif oturum olarak ayarlanır, böylece SendMessageToSessionAsync metoduna hemen çağrı yapılabilir.
Not: Bu kod parçacıkları resmi Aspose belgelerinden alınmıştır ve bir sandbox ortamında çalıştırılmamıştır. Üretimde kullanmadan önce ortamınızda doğrulayın.
Tam Örnek — Kaydet, Yeniden Başlat, Devam Et
Aşağıda tam bir uçtan uca gösterim bulunmaktadır. İlk blok bir sohbet başlatır, birkaç mesaj gönderir ve oturumu kaydeder. İkinci blok, kaydedilen dosyayı yükleyen ve konuşmayı sürdüren yeni bir süreci simüle eder.
Kod Örneği – Uçtan Uca İş Akışı
using Aspose.LLM;
using Aspose.LLM.Abstractions.Parameters.Presets;
// ---------- First run: save ----------
{
var license = new Aspose.LLM.License();
license.SetLicense("Aspose.LLM.lic");
using var api = AsposeLLMApi.Create(new Qwen25Preset());
string sessionId = await api.StartNewChatAsync(sessionId: "support-ticket-1234");
await api.SendMessageToSessionAsync(sessionId,
"Customer reports that the migration from v25 to v26 broke their startup script.");
await api.SendMessageToSessionAsync(sessionId,
"Their environment: Windows Server 2022, .NET 8, CUDA 12.6.");
await api.SendMessageToSessionAsync(sessionId,
"What questions should I ask them next?");
api.SaveChatSession(sessionId, "support-ticket-1234.json");
Console.WriteLine("Session saved.");
}
// ---------- Second run: resume ----------
{
var license = new Aspose.LLM.License();
license.SetLicense("Aspose.LLM.lic");
using var api = AsposeLLMApi.Create(new Qwen25Preset());
string sessionId = await api.LoadChatSession("support-ticket-1234.json");
Console.WriteLine($"Resumed session: {sessionId}");
string reply = await api.SendMessageToSessionAsync(sessionId,
"They replied that they use a custom build step that copies native DLLs. How should I proceed?");
Console.WriteLine(reply);
}
İlk blok bir lisans oluşturur, API’yi Qwen25Preset ile örnekler, support-ticket-1234 adlı yeni bir sohbet başlatır, bağlam oluşturmak için üç mesaj gönderir ve sonunda oturumu support-ticket-1234.json dosyasına yazar. İkinci blok lisansı ve API’yi yeniden oluşturur, JSON dosyasını yükler ve diyaloğa devam eder; modelin önceki mesajları sakladığını gösterir.
Not: Bu kod parçacıkları resmi Aspose belgelerinden alınmıştır ve bir sandbox ortamında çalıştırılmamıştır. Üretimde kullanmadan önce ortamınızda doğrulayın.
Ne Kaydedilir?
SaveChatSession üç temel bölüm içeren bir JSON belgesi üretir:
- Oturum Tanımlayıcısı – sohbeti başlatırken sağladığınız benzersiz kimlik.
- Mesaj Geçmişi – rol, içerik ve herhangi bir medya meta verisi dahil olmak üzere tüm kullanıcı ve asistan mesajlarının sıralı listesi.
- KV Önbellek Meta Verileri – her mesaj için anahtar‑değer önbelleğinin iç konumları ve boyutları; modelin kaldığı yerden tam olarak devam etmesini sağlar.
Önbellek verileri dahil edildiği için, geri yüklenen oturum önceki dikkat hesaplamasını yeniden yapmadan üretime devam edebilir; bu da devam ettirme işlemini hızlı ve deterministik kılar.
Taşınabilirlik Kısıtlamaları
JSON dosyası mükemmel bir devam için gereken her şeyi içeriyor olsa da, yalnızca belirli koşullar altında taşınabilir.
- Same SDK Major Version – dosya formatı büyük sürümler arasında değişebilir, bu yüzden her iki taraf da aynı Aspose.LLM ana sürümünü kullanmalıdır.
- Identical Model File – temel Hugging Face modeli (kuantizasyon dahil) tam olarak eşleşmelidir; aksi takdirde KV önbelleği uyumsuz hale gelir.
- Matching BinaryManagerParameters.ReleaseTag – modeli yüklemek için kullanılan llama.cpp çalışma zamanı sürümü aynı olmalıdır, aksi takdirde düşük‑seviye tensör düzenleri farklılık gösterir.
Bu kısıtlamalardan herhangi birine uyulmazsa InvalidOperationException gibi hatalar veya bozuk çıktı görebilirsiniz.
Bilinen Bir Yükleme Zamanı İnceliği
LoadChatSession çağırdığınızda, SDK konuşmayı yeniden oluşturur ancak varsayılan ContextParameters, ChatParameters ve SamplerParameters uygular. Orijinal oturum sırasında kullandığınız herhangi bir özel ayar (ör. sıcaklık, maksimum token sayısı, sistem istemleri) otomatik olarak geri yüklenmez. Tam olarak aynı üretim davranışını korumak için, yüklemeden sonra özel parametrelerinizi yeniden uygulayın veya istenen ayarlarla yeni bir oturumda konuşmayı yeniden oynatın.
Ortak Hatalar
Aşağıda bir oturumu yüklerken karşılaşabileceğiniz tipik sorunlar için hızlı bir kontrol listesi bulunmaktadır:
- FileNotFoundException – Dosya yolunu doğrulayın; göreceli yollar geçerli çalışma dizinine göre çözülür.
- InvalidOperationException on load – Uyumsuz bir SDK sürümünü veya bozuk bir JSON dosyasını gösterir.
- Garbled output after load – Genellikle uyumsuz bir model dosyası veya ReleaseTag nedeniyle oluşur. Yükleme makinesinde aynı model ikili dosyasının bulunduğundan emin olun.
Bu istisnaları zarif bir şekilde ele alıp ayrıntılı tanılamaları kaydetmek, uygulamanızı daha sağlam hâle getirecektir.
Güvenlik
Kalıcı JSON dosyası, her kullanıcı ve asistan mesajının düz‑metin kopyalarını içerir. Korunmasız bir konumda saklamak hassas verileri ortaya çıkarabilir. Aşağıdaki önlemleri göz önünde bulundurun:
- Dosyayı diske yazmadan önce şifreleyin (ör. Windows DPAPI, Azure Key Vault veya libsodium gibi çapraz‑platform kütüphanesi).
- Dosya sistemi izinlerini yalnızca uygulamayı çalıştıran hizmet hesabının dosyayı okuyup yazabilmesi için kısıtlayın.
- Dosyanın bir ağ üzerinden taşınması gerekiyorsa TLS‑şifreli kanalları kullanın ve dosyanın değiştirilmesini tespit etmek için imzalanmasını düşünün.
Sonraki Adımlar
Artık sohbetleri kalıcı hale getirebilir ve devam ettirebilir olduğunuz için, ilgili yetenekleri keşfedebilirsiniz:
- Çoklu dönüşlü sohbet kullanım durumları – daha fazla etkileşimde daha uzun diyalogları sürdürün.
- Özel ön ayar yapılandırması – modeli kalıcı hale getirmeden önce alanınıza göre özelleştirin.
- Tam oturum‑kalıcılık referansı –
SaveChatSessionve ilgili meta verilerle ilgili daha derin anlamlar için API referansını inceleyin.
Doğru Yaklaşımı Seçmek
Makale, bir oturumu kaydetmenin üç yolunu ve basit bir yükleme yöntemini sundu. Dağıtım senaryonuza uyan yaklaşımı seçin:
- Açık yol – dosyanın belirli bir konumda, örneğin kullanıcı‑özel bir klasörde veya paylaşılan bir ağ sürücüsünde bulunması gerektiğinde en iyisidir.
- Varsayılan dosya adı – hızlı prototipler için veya oturumun yürütülebilir dosyanın yanında çalıştığı durumlarda kullanışlıdır.
- Dizin oluşturmalı geçici yol – izole ortamlar, CI boru hatları için veya işletim sisteminin temizlik işlemlerini yönetmesini istediğinizde idealdir.
Tüm yaklaşımlar aynı temel API’yi kullanır; yalnızca dosya sistemini nasıl yönettiğinize göre farklılık gösterir.
Ücretsiz Lisans Alın
Henüz kalıcı bir lisansınız yoksa, Aspose geçici lisans sayfasından geçici bir değerlendirme lisansı alabilirsiniz.
Ücretsiz Ek Kaynaklar
Sonuç
Aspose.LLM ile bir sohbet oturumunu kalıcı hale getirmek, size dayanıklılık, denetlenebilirlik ve konuşmaları süreçler veya makineler arasında taşıma esnekliği sağlar. Bu deseni ne zaman uygulayacağınızı, bir oturumu üç farklı şekilde nasıl kaydedeceğinizi, nasıl geri yükleyeceğinizi, JSON dosyasının ne içerdiğini ve akılda tutmanız gereken uyumluluk ve güvenlik hususlarını öğrendiniz. Tam örnekle donanmış olarak, artık oturum kalıcılığını herhangi bir .NET sohbet çözümüne entegre edebilirsiniz.
SSS
- Bir sohbet oturumunu kalıcı hale getirmek ne zaman faydalıdır? Kalıcı hale getirme, başlatmalar arasında konuşma durumunu koruması gereken masaüstü veya sunucu uygulamaları, uzun süren iş akışları, denetim veya yedekleme gereksinimleri ve aynı SDK sürümüne sahip makineler arasında oturumları taşıma ihtiyacı için faydalıdır.
- Bir oturumu kaydederken özel bir dosya yolu nasıl belirtebilirim?
api.SaveChatSession(sessionId, "myfolder\myfile.json");çağırın veyaPath.Combineile bir yol oluşturun ve kaydetmeden önce dizinin mevcut olduğundan emin olun. - LoadChatSession ne döndürür? Kurtarılan oturum tanımlayıcısını döndürür, böylece kimliği tekrar sağlamadan mesaj göndermeye devam edebilirsiniz.
- Kaydedilen bir oturum dosyasını başka bir makineye taşıyabilir miyim? Evet, hedef makine aynı ana SDK sürümünü, aynı model dosyasını ve eşleşen llama.cpp ReleaseTag’ini kullandığı sürece.
- Kaydedilen JSON dosyası güvenli mi? Dosya düz metin konuşma verilerini saklar, bu nedenle güvenilmeyen konumlarda saklamadan önce şifrelemeniz gerekir.
- Özel örnekleyicim veya bağlam ayarlarım yükleme sonrasında neden geri yüklenmiyor? LoadChatSession varsayılan parametreleri uygular; yükleme sonrasında özel ayarları yeniden uygulayın veya yeni bir oturumda geçmişi yeniden oynatın.
