Benötigen Sie eine schnelle Möglichkeit, einer .NET-Anwendung ein konversationelles KI‑Erlebnis hinzuzufügen? Mit Aspose.LLM können Sie einen einfachen Chat erstellen, ohne explizit Sitzungs‑IDs zu erstellen oder zu verwalten. SendMessageAsync verwendet automatisch die aktuelle Sitzung, sodass aufeinanderfolgende Nachrichten den Gesprächskontext teilen.
Dieses Muster ist nützlich für jeweils ein Gespräch, einschließlich CLI‑Tools, Prototypen, Skripte und andere einfache Anwendungen.
Wenn einfacher Chat die richtige Wahl ist
Das implizite Sitzungs‑Muster ist gut geeignet für:
- Eine einzelne Frage und Antwort.
- Ein kurzes Hin- und Her‑Gespräch.
- CLI‑Anwendungen und Skripte.
- Prototypen.
- Anwendungen, bei denen nur ein Gespräch gleichzeitig aktiv sein muss.
Wenn Ihre Anwendung mehrere unabhängige Konversationen benötigt — zum Beispiel ein Chatbot, der mehreren Benutzern dient — sollten Sie stattdessen die expliziten Sitzungs‑APIs von Aspose.LLM verwenden.
Nachricht senden, ohne eine Sitzung zu verwalten
Das Kernnachrichtenmuster ist absichtlich klein:
string reply = await api.SendMessageAsync("What is 2 + 2?");
Console.WriteLine(reply);
Wenn Sie nachfolgende Aufrufe auf derselben AsposeLLMApi‑Instanz durchführen, gehören sie zum selben aktuellen Gespräch:
await api.SendMessageAsync("My name is Alice.");
string reply = await api.SendMessageAsync("What is my name?");
Console.WriteLine(reply);
Sie erstellen keine Sitzungs‑ID, übergeben keine zwischen Aufrufen und fügen den Gesprächsverlauf nicht explizit hinzu. Die gleiche AsposeLLMApi‑Instanz verwaltet das aktuelle Gespräch für Sie. Die vorhandene Quelle dokumentiert dieses Verhalten als implizite Sitzung, die für die Lebensdauer der API‑Instanz aufrechterhalten wird. fileciteturn0file0L29-L34
Die vollständige Einrichtung erfordert weiterhin eine lizenzierte API‑Instanz und ein Preset. Das Quellbeispiel verwendet Aspose.LLM.License, Qwen25Preset und AsposeLLMApi.Create(preset). fileciteturn0file0L87-L122
Interaktiven Konsolen‑Chat erstellen
Nachdem das grundlegende Messaging‑Muster verstanden ist, wandeln wir es in eine kleine interaktive Konsolenanwendung um.
Der wichtige Teil ist, die API einmal zu erstellen und sie dann für jede Nachricht wiederzuverwenden:
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}");
}
}
}
}
Dieses Beispiel hält den Chat einfach:
- Die API‑Instanz wird einmal erstellt.
- Jeder Aufruf von
SendMessageAsyncverwendet dieselbe implizite Sitzung. - Vorherige Nachrichten bleiben dem Modell verfügbar.
- Die Schleife bietet ein natürliches Hin‑und‑Her‑Gespräch.
- Ausnahmen werden pro Nachricht behandelt, sodass ein fehlgeschlagener Request die Anwendung nicht beendet.
Das Quellbeispiel verwendet dieselbe Struktur und weist darauf hin, dass die einzelne API‑Instanz den Kontext über Iterationen hinweg beibehält. fileciteturn0file0L192-L245
Um es auszuführen, erstellen Sie ein .NET‑Konsolenprojekt, ersetzen Sie die generierte Program.cs und führen Sie es aus:
dotnet new console
dotnet run
Aspose.LLM bietet eine High‑Level‑Klasse AsposeLLMApi, die das Laden von Modellen, die Tokenisierung und die Inferenz abstrahiert. Um loszulegen, installieren Sie das NuGet-Paket:
Install-Package Aspose.LLM
Anpassen einer einzelnen Nachricht mit einem anderen Preset
Was wäre, wenn die meisten Ihrer Unterhaltungen das Standardverhalten verwenden sollten, aber eine bestimmte Frage eine deterministischere Antwort benötigt?
Sie können für diesen Aufruf ein anderes Preset an SendMessageAsync übergeben:
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);
Die Überschreibung gilt nur für diesen Aufruf. Die Standardvoreinstellung der API bleibt unverändert, und die zugrunde liegende Sitzung liefert weiterhin den Gesprächskontext. fileciteturn0file0L126-L159
Eine niedrige Temperatur wie 0.1f macht das Sampling deterministischer, was bei Fragen nützlich sein kann, bei denen Sie weniger Variation in der generierten Antwort wünschen. fileciteturn0file0L155-L159
Schützen Sie langlaufende Chat-Anfragen mit Abbruch
Lokale Modellinferenz kann bei großen Eingabeaufforderungen oder längeren Antworten länger dauern. Sie können verhindern, dass eine einzelne Anforderung unbegrenzt läuft, indem Sie ein CancellationToken übergeben.
Zum Beispiel setzen Sie ein 30‑Sekunden‑Timeout:
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.");
}
Die Quelle dokumentiert dasselbe Muster: Erstellen Sie eine CancellationTokenSource mit einem Timeout, übergeben Sie ihr Token an SendMessageAsync und fangen Sie OperationCanceledException ab, wenn die Anfrage abgebrochen wird. fileciteturn0file0L161-L190
In einer ASP.NET Core-Anwendung können Sie auch das Cancellation-Token der Anforderung übergeben, damit die Generierung gestoppt werden kann, wenn der Client die Verbindung trennt.
Häufige Probleme
| Problem | Was zu prüfen |
|---|---|
Not licensed for this method | Stellen Sie sicher, dass die Lizenz geladen ist, bevor Sie SendMessageAsync aufrufen. |
Multiple AsposeLLMApi instances | Verwenden Sie eine einzelne Instanz wieder und geben Sie sie korrekt frei. |
| Slow first response | Der erste Download des Modells/der Engine kann auf einer neuen Maschine mehrere Minuten dauern. |
Die Quelle dokumentiert speziell den Lizenzierungsfehler, das Verhalten einer einzelnen aktiven Instanz und das langsamere Laden des ersten Modells. fileciteturn0file0L249-L255
Einfacher Chat vs. Explizite Sitzungen
Der implizite Sitzungsansatz ist bewusst eingeschränkt: Er hält die Implementierung klein, indem er ein aktuelles Gespräch auf einer AsposeLLMApi‑Instanz beibehält.
| Wenn Sie benötigen… | Verwendung |
|---|---|
| Ein Gespräch | SendMessageAsync |
| Ein kurzer interaktiver Chat | SendMessageAsync |
| Ein CLI oder Prototyp | SendMessageAsync |
| Mehrere unabhängige Gespräche | Explizite Sitzungen |
| Mehrere Benutzer oder gleichzeitige Chats | Explizite Sitzungen |
| Persistenter Gesprächszustand | Sitzungs-Persistenz |
Verwenden Sie implizite Nachrichten, wenn ein Gespräch ausreicht. Wechseln Sie zu expliziten Sitzungs‑APIs, wenn Sie unabhängige Unterhaltungen, gleichzeitige Benutzer, persistente Zustände oder mehr Kontrolle über die Sitzungsidentität benötigen. Die vorhandene Quelle empfiehlt explizite Sitzungen für gleichzeitige Unterhaltungen und persistente Zustände. fileciteturn0file0L266-L274
Für den expliziten Sitzungsansatz siehe die Aspose.LLM‑Dokumentation und die Multi‑Turn‑/Sitzungs‑APIs.
Kostenlose Lizenz erhalten
Aspose bietet temporäre Lizenzen für die Evaluierung an. Holen Sie sich eine von der Aspose temporäre Lizenzseite und platzieren Sie die Aspose.LLM.lic‑Datei dort, wo Ihre Anwendung sie laden kann.
Kostenlose zusätzliche Ressourcen
Fazit
Der Aufbau eines einfachen KI‑Chats mit Aspose.LLM erfordert keine explizite Sitzungsverwaltung. Durch das Erstellen einer AsposeLLMApi‑Instanz und das Aufrufen von SendMessageAsync können Sie ein konversationelles Erlebnis erstellen, bei dem die API die aktuelle Sitzung automatisch verwaltet.
Für einfache Anwendungen, Prototypen, Skripte und ein‑Benutzer‑Chat‑Erlebnisse hält dies die Implementierung minimal. Wenn Ihre Anwendung wächst, um mehrere Unterhaltungen zu unterstützen, oder eine explizite Sitzungssteuerung erfordert, können Sie zu den sitzungsbasierten APIs wechseln.
FAQs
Muss ich Chat‑Sitzungen manuell mit Aspose.LLM verwalten? Nein. Die implizite‑Sitzung
SendMessageAsync‑Methode verfolgt automatisch den Gesprächszustand für die Lebensdauer derAsposeLLMApi‑Instanz.Kann ich das Modellverhalten nur für eine Frage ändern? Ja. Geben Sie ein anderes Preset (z. B. mit niedrigerer Temperatur) als das
preset‑Argument anSendMessageAsyncweiter. Nur dieser Aufruf verwendet die neuen Einstellungen.Wie stoppe ich eine lang‑laufende Generierung? Erstellen Sie eine
CancellationTokenSourcemit einem Timeout und übergeben Sie ihr Token anSendMessageAsync. Fangen SieOperationCanceledExceptionab, um den Timeout zu behandeln.Welche häufigen Fehler sollte ich beachten? Fehlende Lizenz, das gleichzeitige Erstellen mehrerer API-Instanzen und ein langsamer erster Modell‑Ladevorgang sind die häufigsten Probleme. Befolgen Sie die oben beschriebenen Abhilfeschritte.
Ist der Beispielcode für die Produktion bereit? Die Snippets wurden aus der offiziellen Dokumentation von Aspose reproduziert und wurden nicht sandbox‑getestet. Testen Sie sie in Ihrer eigenen Umgebung und fügen Sie eine robuste Fehlerbehandlung hinzu, bevor Sie sie bereitstellen.
