Hai bisogno di un modo rapido per aggiungere un’esperienza di IA conversazionale a un’applicazione .NET? Con Aspose.LLM, puoi creare una chat semplice senza creare o gestire esplicitamente gli ID di sessione. SendMessageAsync utilizza automaticamente la sessione corrente, consentendo ai messaggi successivi di condividere il contesto della conversazione.
Questo modello è utile per una conversazione alla volta, inclusi gli strumenti da riga di comando, prototipi, script e altre applicazioni semplici.
Quando la Chat Semplice è la Scelta Giusta
Il pattern di sessione implicita è adatto a:
- Una singola domanda e risposta.
- Una breve conversazione di andata e ritorno.
- Applicazioni e script CLI.
- Prototipi.
- Applicazioni in cui solo una conversazione deve essere attiva alla volta.
Se la tua applicazione necessita di più conversazioni indipendenti — ad esempio, un chatbot che serve più utenti — dovresti utilizzare le API di sessione esplicite di Aspose.LLM.
Invia un messaggio senza gestire una sessione
Il modello di messaggistica di base è deliberatamente piccolo:
string reply = await api.SendMessageAsync("What is 2 + 2?");
Console.WriteLine(reply);
Quando effettui chiamate successive sulla stessa istanza AsposeLLMApi, esse appartengono alla stessa conversazione corrente:
await api.SendMessageAsync("My name is Alice.");
string reply = await api.SendMessageAsync("What is my name?");
Console.WriteLine(reply);
Non crei un ID di sessione, non lo passi tra le chiamate e non aggiungi esplicitamente la cronologia della conversazione. La stessa istanza AsposeLLMApi mantiene la conversazione corrente per te. La sorgente esistente documenta questo comportamento come una sessione implicita mantenuta per tutta la durata dell’istanza API. fileciteturn0file0L29-L34
La configurazione completa richiede ancora un’istanza API con licenza e un preset. L’esempio di origine utilizza Aspose.LLM.License, Qwen25Preset e AsposeLLMApi.Create(preset). fileciteturn0file0L87-L122
Crea una chat interattiva da console
Una volta compreso il modello di messaggistica di base, trasformiamolo in una piccola applicazione console interattiva.
La parte importante è creare l’API una sola volta, quindi riutilizzarla per ogni messaggio:
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}");
}
}
}
}
Questo esempio mantiene la chat semplice:
- L’istanza API viene creata una sola volta.
- Ogni chiamata
SendMessageAsyncutilizza la stessa sessione implicita. - I messaggi precedenti rimangono disponibili per il modello.
- Il ciclo fornisce una conversazione naturale di andata e ritorno.
- Le eccezioni vengono gestite per messaggio, quindi una richiesta fallita non termina l’applicazione.
L’esempio di origine utilizza la stessa struttura e osserva che l’unica istanza API preserva il contesto tra le iterazioni. fileciteturn0file0L192-L245
Per eseguirlo, crea un progetto console .NET, sostituisci il file Program.cs generato e avvialo:
dotnet new console
dotnet run
Aspose.LLM fornisce una classe di alto livello AsposeLLMApi che astrae il caricamento del modello, la tokenizzazione e l’inferenza. Per iniziare, installa il pacchetto NuGet:
Install-Package Aspose.LLM
Personalizza un singolo messaggio con un preset diverso
E se la maggior parte della tua conversazione dovesse utilizzare il comportamento predefinito, ma una domanda particolare richiedesse una risposta più deterministica?
È possibile passare un preset diverso a SendMessageAsync per quella chiamata:
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);
La sovrascrittura si applica solo a quella chiamata. Il preset predefinito dell’API rimane invariato e la sessione sottostante continua a fornire il contesto della conversazione. fileciteturn0file0L126-L159
Una bassa temperatura, come 0.1f, rende il campionamento più deterministico, il che può essere utile per le domande in cui si desidera meno variazione nella risposta generata. fileciteturn0file0L155‑L159
Proteggi le richieste di chat a lunga durata con l’annullamento
L’inferenza del modello locale può richiedere più tempo per prompt di grandi dimensioni o risposte più lunghe. È possibile impedire che una singola richiesta venga eseguita indefinitamente passando un CancellationToken.
Ad esempio, impostare un timeout di 30 secondi:
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.");
}
La fonte documenta lo stesso schema: crea un CancellationTokenSource con un timeout, passa il suo token a SendMessageAsync e cattura OperationCanceledException quando la richiesta viene annullata. fileciteturn0file0L161-L190
In un’applicazione ASP.NET Core, è possibile passare anche il token di cancellazione della richiesta in modo che la generazione possa fermarsi quando il client si disconnette.
Problemi comuni
| Problema | Cosa verificare |
|---|---|
Not licensed for this method | Assicurati che la licenza sia caricata prima di chiamare SendMessageAsync. |
Multiple AsposeLLMApi instances | Riutilizza un’unica istanza e disponila correttamente. |
| Slow first response | Il download iniziale del modello/motore può richiedere diversi minuti su una macchina nuova. |
La fonte documenta specificamente l’errore di licenza, il comportamento di singola istanza attiva e il caricamento più lento del primo modello. fileciteturn0file0L249-L255
Chat semplice vs. Sessioni esplicite
L’approccio a sessione implicita è intenzionalmente limitato: mantiene l’implementazione piccola mantenendo una conversazione corrente su un’istanza AsposeLLMApi.
| Se hai bisogno… | Usa |
|---|---|
| Una conversazione | SendMessageAsync |
| Una breve chat interattiva | SendMessageAsync |
| Una CLI o prototipo | SendMessageAsync |
| Conversazioni indipendenti multiple | Sessioni esplicite |
| Utenti multipli o chat concorrenti | Sessioni esplicite |
| Stato persistente della conversazione | Persistenza della sessione |
Usa la messaggistica implicita quando una sola conversazione è sufficiente. Passa alle API di sessione esplicite quando hai bisogno di conversazioni indipendenti, utenti concorrenti, stato persistente o un maggiore controllo sull’identità della sessione. La fonte esistente raccomanda sessioni esplicite per conversazioni concorrenti e stato persistente. fileciteturn0file0L266-L274
Per l’approccio a sessione esplicita, consulta la documentazione di Aspose.LLM e le API multi-turn/sessione.
Ottieni una licenza gratuita
Aspose offre licenze temporanee per la valutazione. Prendi una dalla pagina della licenza temporanea di Aspose e posiziona il file Aspose.LLM.lic dove la tua applicazione può caricarlo.
Risorse aggiuntive gratuite
Conclusione
Creare una semplice chat AI con Aspose.LLM non richiede una gestione esplicita della sessione. Creando un’istanza AsposeLLMApi e chiamando SendMessageAsync, è possibile costruire un’esperienza conversazionale in cui l’API mantiene automaticamente la sessione corrente.
Per applicazioni semplici, prototipi, script e esperienze di chat per un singolo utente, questo mantiene l’implementazione al minimo. Quando la tua applicazione cresce per supportare più conversazioni o richiede un controllo esplicito della sessione, puoi passare alle API basate su sessione.
FAQs
Devo gestire manualmente le sessioni di chat con Aspose.LLM? No. Il metodo
SendMessageAsynca sessione implicita traccia automaticamente lo stato della conversazione per tutta la durata dell’istanzaAsposeLLMApi.Posso cambiare il comportamento del modello per una sola domanda? Sì. Fornisci un preset diverso (ad esempio, con temperatura più bassa) come argomento
presetaSendMessageAsync. Solo quella chiamata utilizza le nuove impostazioni.Come fermare una generazione a lunga durata? Crea un
CancellationTokenSourcecon un timeout e passa il suo token aSendMessageAsync. CatturaOperationCanceledExceptionper gestire il timeout.Quali errori comuni dovrei tenere d’occhio? Licenza mancante, creazione di più istanze API simultaneamente e un caricamento lento del primo modello sono i problemi più frequenti. Segui i passaggi di mitigazione descritti sopra.
Il codice di esempio è pronto per la produzione? Gli snippet sono riprodotti dalla documentazione ufficiale di Aspose e non sono stati testati in sandbox. Provali nel tuo ambiente e aggiungi una gestione degli errori robusta prima di distribuire.
