¿Necesita una forma rápida de agregar una experiencia de IA conversacional a una aplicación .NET? Con Aspose.LLM, puede crear un chat sencillo sin crear ni gestionar explícitamente los IDs de sesión. SendMessageAsync utiliza automáticamente la sesión actual, lo que permite que los mensajes sucesivos compartan el contexto de la conversación.
Este patrón es útil para una conversación a la vez, incluyendo herramientas CLI, prototipos, scripts y otras aplicaciones simples.
Cuando el chat simple es la elección correcta
El patrón de sesión implícita es adecuado para:
- Una única pregunta y respuesta.
- Una breve conversación de ida y vuelta.
- Aplicaciones y scripts CLI.
- Prototipos.
- Aplicaciones donde solo una conversación necesita estar activa a la vez.
Si su aplicación necesita múltiples conversaciones independientes —por ejemplo, un chatbot que atiende a varios usuarios— debería usar las API de sesión explícita de Aspose.LLM.
Enviar un mensaje sin gestionar una sesión
El patrón de mensajería central es deliberadamente pequeño:
string reply = await api.SendMessageAsync("What is 2 + 2?");
Console.WriteLine(reply);
Cuando realizas llamadas subsecuentes en la misma instancia de AsposeLLMApi, pertenecen a la misma conversación actual:
await api.SendMessageAsync("My name is Alice.");
string reply = await api.SendMessageAsync("What is my name?");
Console.WriteLine(reply);
No crea un ID de sesión, lo pasa entre llamadas, ni agrega explícitamente el historial de conversación. La misma instancia AsposeLLMApi mantiene la conversación actual por usted. La fuente existente documenta este comportamiento como una sesión implícita mantenida durante la vida útil de la instancia de la API. fileciteturn0file0L31-L34
La configuración completa aún requiere una instancia de API con licencia y un preset. El ejemplo de origen utiliza Aspose.LLM.License, Qwen25Preset y AsposeLLMApi.Create(preset). fileciteturn0file0L87-L122
Crear un chat interactivo de consola
Con el patrón básico de mensajería comprendido, conviértalo en una pequeña aplicación de consola interactiva.
La parte importante es crear la API una vez, y luego reutilizarla para cada mensaje:
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}");
}
}
}
}
Este ejemplo mantiene el chat simple:
- La instancia de la API se crea una sola vez.
- Cada llamada a
SendMessageAsyncusa la misma sesión implícita. - Los mensajes anteriores siguen disponibles para el modelo.
- El bucle proporciona una conversación natural de ida y vuelta.
- Las excepciones se manejan por mensaje, de modo que una solicitud fallida no termina la aplicación.
El ejemplo de origen utiliza la misma estructura y señala que la única instancia de la API conserva el contexto a través de las iteraciones. fileciteturn0file0L192-L245
Para ejecutarlo, cree un proyecto de consola .NET, reemplace el archivo Program.cs generado y ejecute:
dotnet new console
dotnet run
Aspose.LLM proporciona una clase de alto nivel AsposeLLMApi que abstrae la carga del modelo, la tokenización y la inferencia. Para comenzar, instala el paquete NuGet:
Install-Package Aspose.LLM
Personaliza un mensaje único con un preset diferente
¿Y si la mayor parte de tu conversación debe usar el comportamiento predeterminado, pero una pregunta en particular necesita una respuesta más determinista?
Puedes pasar un preset diferente a SendMessageAsync para esa llamada:
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 anulación se aplica solo a esa llamada. El preset predeterminado de la API permanece sin cambios, y la sesión subyacente sigue proporcionando contexto de conversación. fileciteturn0file0L126-L159
Una temperatura baja como 0.1f hace que el muestreo sea más determinista, lo que puede ser útil para preguntas donde deseas menos variación en la respuesta generada. fileciteturn0file0L155-L159
Proteger solicitudes de chat de larga duración con cancelación
La inferencia del modelo local puede tardar más para indicaciones grandes o respuestas más largas. Puedes evitar que una solicitud individual se ejecute indefinidamente pasando un CancellationToken.
Por ejemplo, establezca un tiempo de espera de 30 segundos:
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.");
}
El origen documenta el mismo patrón: crear un CancellationTokenSource con un tiempo de espera, pasar su token a SendMessageAsync y capturar OperationCanceledException cuando la solicitud se cancela. fileciteturn0file0L151-L180
En una aplicación ASP.NET Core, también puedes pasar el token de cancelación de la solicitud para que la generación pueda detenerse cuando el cliente se desconecta.
Problemas comunes
| Problema | Qué verificar |
|---|---|
Not licensed for this method | Asegúrese de que la licencia esté cargada antes de llamar a SendMessageAsync. |
Multiple AsposeLLMApi instances | Reutilice una única instancia y dispóngala correctamente. |
| Slow first response | La descarga inicial del modelo/motor puede tardar varios minutos en una máquina nueva. |
La fuente documenta específicamente el error de licencia, el comportamiento de instancia única activa y la carga más lenta del primer modelo. fileciteturn0file0L249-L255
Chat simple vs. sesiones explícitas
El enfoque de sesión implícita está intencionalmente limitado: mantiene la implementación pequeña al mantener una conversación actual en una instancia de AsposeLLMApi.
| Si necesita… | Uso |
|---|---|
| Una conversación | SendMessageAsync |
| Un chat interactivo corto | SendMessageAsync |
| Una CLI o prototipo | SendMessageAsync |
| Múltiples conversaciones independientes | Sesiones explícitas |
| Múltiples usuarios o chats concurrentes | Sesiones explícitas |
| Estado de conversación persistente | Persistencia de sesión |
Utilice mensajería implícita cuando una sola conversación sea suficiente. Cambie a APIs de sesión explícitas cuando necesite conversaciones independientes, usuarios concurrentes, estado persistente o más control sobre la identidad de la sesión. La fuente existente recomienda sesiones explícitas para conversaciones concurrentes y estado persistente. fileciteturn0file0L266-L274
Para el enfoque de sesión explícita, consulte la documentación de Aspose.LLM y las API de turnos múltiples/sesión.
Obtén una licencia gratuita
Aspose ofrece licencias temporales para evaluación. Obtenga una en la página de licencia temporal de Aspose y coloque el archivo Aspose.LLM.lic donde su aplicación pueda cargarlo.
Recursos adicionales gratuitos
Conclusión
Crear un chat de IA simple con Aspose.LLM no requiere una gestión de sesión explícita. Al crear una instancia de AsposeLLMApi y llamar a SendMessageAsync, puedes crear una experiencia conversacional donde la API mantiene la sesión actual automáticamente.
Para aplicaciones simples, prototipos, scripts y experiencias de chat de un solo usuario, esto mantiene la implementación mínima. Cuando su aplicación crece para admitir múltiples conversaciones o requiere un control de sesión explícito, puede pasar a las API basadas en sesiones.
Preguntas frecuentes
¿Necesito gestionar las sesiones de chat manualmente con Aspose.LLM? No. El método implicit‑session
SendMessageAsyncrastrea automáticamente el estado de la conversación durante la vida útil de la instanciaAsposeLLMApi.¿Puedo cambiar el comportamiento del modelo solo para una pregunta? Sí. Proporcione un preset diferente (p. ej., con una temperatura más baja) como el argumento
presetaSendMessageAsync. Solo esa llamada usa la nueva configuración.¿Cómo detengo una generación de larga duración? Cree un
CancellationTokenSourcecon un tiempo de espera y pase su token aSendMessageAsync. CaptureOperationCanceledExceptionpara manejar el tiempo de espera.¿Qué errores comunes debo vigilar? Falta de licencia, crear múltiples instancias de la API simultáneamente y una carga lenta del primer modelo son los problemas más frecuentes. Siga los pasos de mitigación descritos arriba.
¿Está el código de ejemplo listo para producción? Los fragmentos se reproducen de la documentación oficial de Aspose y no han sido probados en un entorno aislado. Pruébelos en su propio entorno y añada un manejo de errores robusto antes de implementarlos.
Leer más
- Presentando la búsqueda impulsada por IA en la documentación de Aspose.Words for .NET
- Utiliza implementaciones de LLM autoalojadas con la funcionalidad de IA de Aspose.Words for .NET
- Agrega modelos de lenguaje grande a tus aplicaciones .NET con Aspose.LLM
- Crea un chat de múltiples turnos en C# con Aspose.LLM
