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. fileciteturn0file0L29-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). fileciteturn0file0L87-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 SendMessageAsync verwendet 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. fileciteturn0file0L192-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. fileciteturn0file0L126-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. fileciteturn0file0L155-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. fileciteturn0file0L161-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

ProblemWas zu prüfen
Not licensed for this methodStellen Sie sicher, dass die Lizenz geladen ist, bevor Sie SendMessageAsync aufrufen.
Multiple AsposeLLMApi instancesVerwenden Sie eine einzelne Instanz wieder und geben Sie sie korrekt frei.
Slow first responseDer 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. fileciteturn0file0L249-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ächSendMessageAsync
Ein kurzer interaktiver ChatSendMessageAsync
Ein CLI oder PrototypSendMessageAsync
Mehrere unabhängige GesprächeExplizite Sitzungen
Mehrere Benutzer oder gleichzeitige ChatsExplizite Sitzungen
Persistenter GesprächszustandSitzungs-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. fileciteturn0file0L266-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

  1. Muss ich Chat‑Sitzungen manuell mit Aspose.LLM verwalten? Nein. Die implizite‑Sitzung SendMessageAsync‑Methode verfolgt automatisch den Gesprächszustand für die Lebensdauer der AsposeLLMApi‑Instanz.

  2. 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 an SendMessageAsync weiter. Nur dieser Aufruf verwendet die neuen Einstellungen.

  3. Wie stoppe ich eine lang‑laufende Generierung? Erstellen Sie eine CancellationTokenSource mit einem Timeout und übergeben Sie ihr Token an SendMessageAsync. Fangen Sie OperationCanceledException ab, um den Timeout zu behandeln.

  4. 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.

  5. 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.

Mehr lesen