Bugün AI özellikleri ekleyen çoğu .NET ekibi aynı altyapıyı yazmak zorunda kalıyor: bir HTTP istemcisi, bir yeniden deneme politikası, bir API anahtarı için gizli yönetim ve birinin kredi kartına per‑token faturalandırma satırı. Aspose.LLM farklı bir yol izliyor. Kendi sürecinizin içinde büyük dil modeli çıkarımını çalıştıran bir NuGet paketidir – çağırılacak hizmet yok, döndürülecek anahtar yok ve makineden dışarı çıkan istek yok.
Bu makale kütüphaneyi tanıtıyor, API’sinin üzerine kurulu olduğu üç kavramı açıklıyor ve sizi çalışan bir sohbet uygulaması üzerinden yönlendiriyor. Bir paket referansı ekleyebiliyorsanız, birkaç düzine satırda istemler gönderebilirsiniz.
Neden yerel bir model önemlidir
Modeli aynı süreç içinde çalıştırmak, neler inşa edebileceğinizi değiştirir.
- Veri yerinde kalır. İstemler asla ana bilgisayardan ayrılmaz, bu da sözleşmeler, tıbbi notlar, kaynak kodu veya veri ikamet politikası kapsamındaki başka bir şeyle çalışırken önemlidir.
- Token başına maliyet yok. Model diskte olduğunda, çıkarım zaten sahip olduğunuz bir CPU veya GPU maliyetidir, ölçülen bir API çağrısı değildir.
- Çalışma zamanında ağ bağımlılığı yok. Masaüstü araçları, yerel hizmetler ve hava boşluğu ortamları aynı şekilde çalışır.
- Tek dağıtım artefaktı. Model yapılandırması, ayrı bir hesabın kontrol panelinde değil, uygulamanızla birlikte gönderilir.
Bu ödünç verme dürüst ve önceden belirtmeye değerdir: donanımı siz sağlarsınız. Yerel olarak çalışan bir modelin yerel belleğe ihtiyacı vardır ve ilk çalıştırmada birkaç gigabayt indirilmesi gerekir.
Aspose.LLM for .NET üç kavramda
Yüzey alanı kasıtlı olarak küçüktür. Aspose.LLM ile yaptığınız neredeyse her şey bu üç türü içerir.
| Kavram | Tür | Rol |
|---|---|---|
| Lisans | Aspose.LLM.License | Kütüphaneyi etkinleştirir. Diğer API kullanımından önce SetLicense metodunu çağırın. |
| Ön ayar | e.g. Qwen25Preset | Model dosyalarını örnekleme sıcaklığı gibi üretim parametreleriyle paketler. |
| API örneği | AsposeLLMApi | Giriş noktası. Bir ön ayardan oluşturulur, konuşmayı tutar, SendMessageAsync metodunu sunar. |
Bir ön ayar ilginç olanıdır. Model yollarını, tokenleştirici ayarlarını ve örnekleyici değerlerini elle bağlamanız yerine, bir ön ayar iyi bilinen bir kombinasyonu paketler. Qwen25Preset varsayılan başlangıç noktasıdır ve parametrelerini ayarlayabilir veya kodunuzun geri kalanına dokunmadan daha sonra farklı bir ön ayarla değiştirebilirsiniz.
Önkoşullar
Kod yazmaya başlamadan önce:
- Paketi yükleyin -
Install-Package Aspose.LLM - Lisansınızı yerleştirin - çalışma zamanında yürütülebilir dosyanın okuyabileceği bir yere
Aspose.LLM.lickoyun. - Bellek bütçenizi kontrol edin - Qwen25 ön ayarı en az 8 GB boş RAM ister.
Ürün detayları için, Aspose.LLM for .NET ürün sayfası.
İlk sohbetiniz
İşte gerçek bir sohbeti sürdüren en kısa program. İkinci ve üçüncü çağrılara dikkat edin: API örneği bağlamı kendi başına izler, bu yüzden model hâlâ Alice’in kim olduğunu bilir.
Kodun yaptığı şey
- Bir
Licenseoluşturur ve lisans dosyanıza işaret eder. Qwen25Preset‘i varsayılan yapılandırmasıyla örnekler.- O preset’ten bir
AsposeLLMApiörneği oluşturur. - Aynı konuşmayı paylaşan birkaç istem gönderir.
using Aspose.LLM;
using Aspose.LLM.Abstractions.Parameters.Presets;
var license = new Aspose.LLM.License();
license.SetLicense("Aspose.LLM.lic");
var preset = new Qwen25Preset();
using var api = AsposeLLMApi.Create(preset);
string reply = await api.SendMessageAsync("What is 2 + 2?");
Console.WriteLine(reply);
// Output: 2 + 2 equals 4.
await api.SendMessageAsync("My name is Alice.");
string reply2 = await api.SendMessageAsync("What is my name?");
Console.WriteLine(reply2);
// Output: Your name is Alice.
AsposeLLMApi.Create(preset) oturum farkında bir istemci döndürür. Her SendMessageAsync çağrısı promptu çalışan konuşmaya ekler, böylece herhangi bir durumu kendiniz yönetmeden çoklu tur davranışı elde edersiniz. using bildirimi önemlidir – örnek yerel kaynaklara sahiptir ve serbest bırakılması gerekir.
Not: Bu örnekler resmi Aspose belgelerine dayanmakta ve bir sandbox’ta çalıştırılmamıştır. Kendi ortamınızda gönderimden önce doğrulayın.
Tek bir istek için davranışı ayarlama
Konuşma yanıtları biraz rastgelelikten faydalanır. Aritmetik faydalanmaz. Örneği yeniden yapılandırmak yerine, ikinci bir ön ayar oluşturun ve buna ihtiyaç duyan tek çağrıya geçirin.
Kodun ne yaptığı
- Varsayılan ön ayarı ve API örneğini her zamanki gibi oluşturur.
strictPreset‘i düşük bir örnekleyici sıcaklığıyla oluşturur.presetargümanı aracılığıylaSendMessageAsync‘e geçirir.- Sonraki çağrıları orijinal varsayılan üzerinde bırakır.
using Aspose.LLM.Abstractions.Parameters.Presets;
// Default preset used by the API instance
var defaultPreset = new Qwen25Preset();
using var api = AsposeLLMApi.Create(defaultPreset);
// A more deterministic preset, for this question only
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);
// Output: The square root of 144 is 12.
SamplerParameters.Temperature örnekleyicinin ne kadar rastgelelik eklediğini kontrol eder. 0.1 civarındaki değerler neredeyse belirleyici bir çıktı üretir; daha yüksek değerler daha çeşitli ifadeler üretir. Ön ayar çağrı kapsamında olduğundan, geçersiz kılma konuşmanın geri kalanına sızmaz.
İptal ve zaman aşımı
Generation süresi tamamen tahmin edilemez ve uzun süren bir istek, onu bekleyen her şeyi engeller. SendMessageAsync bir CancellationToken kabul eder, bu yüzden ona bir tane verin.
Kodun yaptığı şey
- 30 saniyelik bir bütçeyle bir
CancellationTokenSourceoluşturur. cts.TokendeğeriniSendMessageAsyncmetoduna geçirir.OperationCanceledExceptionyakalar ve sorunsuz bir şekilde hatayı yönetir.
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.");
}
İptal, oturum durumunu aynı tutar, böylece konuşma bir sonraki çağrıda normal şekilde devam eder. Bir ASP.NET Core işleyicisinde, isteğin kendi RequestAborted belirtecini burada da iletin – zaten bağlantısı kesilmiş bir istemci için üretmeye devam etmenin bir nedeni yoktur.
Tam bir konsol uygulaması
Hepsini bir araya getirmek: İşlem süresi boyunca bir oturumu canlı tutan ve mesaj başına oluşan hatalardan kurtulan bir REPL.
Kodun ne yaptığı
- Lisansı ve varsayılan ön ayarı başlatmada bir kez ayarlar.
- Tüm program için tek bir
AsposeLLMApiörneği oluşturur. - Kullanıcı
quityazana kadar kullanıcı girişinde döngü yapar. - Her satırı gönderir ve yanıtı yazdırır.
- Her mesaj için istisnaları yakalar, böylece bir hata oturumu sonlandırmaz.
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}");
}
}
}
}
Gerçek uygulamalara taşınması gereken iki tasarım noktası vardır. İlk olarak, örnek bir kez oluşturulur ve yeniden kullanılır – oluşturma maliyetlidir ve bir sonraki bölümde açıklandığı gibi, eşzamanlı örnekler izin verilmez. İkinci olarak, try-catch döngünün içinde yer alır, döngünün etrafında değil, bu sayede tek bir hatalı mesaj tüm oturumu etkilemek yerine sadece bir turu maliyetlendirir.
Kütüphaneyi geçici bir lisansla, Aspose geçici lisans sayfası değerlendirin.
İlk Karşılaşabileceğiniz Hatalar
| Hata | Tipik neden | Çözüm |
|---|---|---|
Not licensed for this method | Lisans dosyası eksik veya yol hatalı | Çalışma dizininden Aspose.LLM.lic dosyasının okunabilir olduğunu ve SetLicense çağrısının diğer API çağrılarından önce çalıştırıldığını doğrulayın. |
Only one AsposeLLMApi instance can be created at a time | Aynı anda iki örnek yaşanıyor, genellikle istek başına bir fabrika kullanıldığında | Örneği tek bir nesne (singleton) olarak kaydedin veya yeni bir tane oluşturmadan önce önceki örneği serbest bırakın. |
| First response takes minutes | Motor yerel ikili dosyaları ve model ağırlıklarını indiriyor | Temiz bir makinede 5-15 dakika bekleyin. Create işlemini başlangıçta tetikleyin, böylece maliyet kullanıcı tarafından ödenmez. |
Bu ikinci satır, hizmet senaryolarında vurgulanmayı hak ediyor. Aspose.LLM’i bir DI konteynerine bağlıyorsanız, AsposeLLMApi‘yi tek örnek (singleton) olarak kaydedin ve ona erişimi sıralı hâle getirin – kapsamlı (scoped) veya geçici (transient) bir kayıt, iki istek çakıştığında hemen başarısız olur.
Ek kaynaklar
Sonuç
Aspose.LLM, “bu .NET uygulamasına bir LLM ekle” ifadesini üç tipe ve bir metoda indirger. Bir lisans kütüphaneyi etkinleştirir, bir ön ayar modeli ve nasıl ürettiğini tanımlar ve bir AsposeLLMApi örneği sohbeti yürütür. Oradan, SendMessageAsync tek bir soruyu, çoklu tur oturumunu, çağrı başına parametre geçersiz kılmasını ve iptal edilebilir uzun süreli bir üretimi yönetir.
Konsol örneğiyle başlayın, modelin özelliğinizin ihtiyaç duyduğu şekilde davrandığını doğrulayın, ardından temeller sağlam olduğunda çok oturumlu ve kalıcılık çalışmalarına geçin.
FAQs
1. Aspose.LLM for .NET nedir?
Kendi .NET süreciniz içinde büyük dil modeli çıkarımını çalıştıran bir NuGet kitaplığı. Bir ön ayar oluşturur, bir API örneği yaratır ve istemler gönderirsiniz – harici hizmet yok, API anahtarı gerekmez.
2. Bunu kullanmak için bir internet bağlantısına ihtiyacım var mı?
Yalnızca ilk çalıştırmada. İlk Create çağrısı, ön ayar tarafından tanımlanan yerel motoru ve model dosyalarını indirir ve varlıklar daha sonra yerel olarak önbelleğe alınır.
3. Kod örnekleri için önkoşullar nelerdir?
Aspose.LLM NuGet paketi, geçerli bir Aspose.LLM.lic dosyası ve seçtiğiniz ön ayar için yeterli boş RAM – Qwen25 için en az 8 GB planlayın.
4. Tek bir istek için modelin davranışını nasıl değiştiririm?
İkinci bir ön ayar oluşturun, parametrelerini (örneğin SamplerParameters.Temperature gibi) ayarlayın ve preset argümanı aracılığıyla SendMessageAsync‘e geçirin. Daha sonraki çağrılar, örneğin örnek varsayılan ön ayarına geri döner.
5. Çok uzun süren bir üretimi nasıl durdurabilirim?
Bir CancellationToken‘ı SendMessageAsync‘e geçirin ve OperationCanceledException‘ı yakalayın. Oturum durumu iptali hayatta kalır, böylece konuşma normal şekilde devam eder.
6. İlk yanıt neden bu kadar yavaş?
İlk Create çağrısı, yerel ikili dosyaları ve model ağırlıklarını indirir; bu, temiz bir makinede 5‑15 dakika sürebilir. Örneği, bir kullanıcının ilk isteği yerine uygulama başlangıcında ısıtın.
