Precisa de uma maneira rápida de adicionar uma experiência de IA conversacional a uma aplicação .NET? Com Aspose.LLM, você pode criar um chat simples sem criar ou gerenciar IDs de sessão explicitamente. SendMessageAsync usa automaticamente a sessão atual, permitindo que mensagens sucessivas compartilhem o contexto da conversa.
Esse padrão é útil para uma conversa de cada vez, incluindo ferramentas de linha de comando (CLI), protótipos, scripts e outras aplicações simples.
Quando o Simple Chat é a escolha certa
O padrão de sessão implícita é adequado para:
- Uma única pergunta e resposta.
- Uma curta conversa de ida e volta.
- Aplicações CLI e scripts.
- Protótipos.
- Aplicações onde apenas uma conversa precisa estar ativa de cada vez.
Se o seu aplicativo precisar de várias conversas independentes — por exemplo, um chatbot atendendo a vários usuários — você deve usar as APIs de sessão explícitas do Aspose.LLM em vez disso.
Enviar uma Mensagem Sem Gerenciar uma Sessão
O padrão de mensagens central é deliberadamente pequeno:
string reply = await api.SendMessageAsync("What is 2 + 2?");
Console.WriteLine(reply);
Quando você faz chamadas subsequentes na mesma instância AsposeLLMApi, elas pertencem à mesma conversa atual:
await api.SendMessageAsync("My name is Alice.");
string reply = await api.SendMessageAsync("What is my name?");
Console.WriteLine(reply);
Você não cria um ID de sessão, não passa um entre chamadas, nem adiciona explicitamente o histórico de conversa. A mesma instância AsposeLLMApi mantém a conversa atual para você. A fonte existente documenta esse comportamento como uma sessão implícita mantida durante a vida útil da instância da API. fileciteturn0file0L29-L34
A configuração completa ainda requer uma instância de API licenciada e um preset. O exemplo de origem usa Aspose.LLM.License, Qwen25Preset e AsposeLLMApi.Create(preset). fileciteturn0file0L87-L122
Criar um Chat Interativo no Console
Com o padrão básico de mensagens compreendido, vamos transformá‑lo em um pequeno aplicativo de console interativo.
A parte importante é criar a API uma vez e, então, reutilizá‑la para cada mensagem:
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 exemplo mantém o chat simples:
- A instância da API é criada uma vez.
- Cada chamada
SendMessageAsyncusa a mesma sessão implícita. - Mensagens anteriores permanecem disponíveis para o modelo.
- O loop fornece uma conversa natural de ida e volta.
- Exceções são tratadas por mensagem, de modo que uma solicitação falha não encerra a aplicação.
O exemplo de origem usa a mesma estrutura e observa que a única instância da API preserva o contexto entre as iterações. fileciteturn0file0L192-L245
Para executá‑lo, crie um projeto de console .NET, substitua o Program.cs gerado e execute:
dotnet new console
dotnet run
Aspose.LLM fornece uma classe de alto nível AsposeLLMApi que abstrai o carregamento do modelo, a tokenização e a inferência. Para começar, instale o pacote NuGet:
Install-Package Aspose.LLM
Personalize uma Mensagem Única com um Preset Diferente
E se a maior parte da sua conversa usar o comportamento padrão, mas uma pergunta específica precisar de uma resposta mais determinística?
Você pode passar um preset diferente para SendMessageAsync nessa chamada:
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);
A substituição se aplica apenas a essa chamada. O preset padrão da API permanece inalterado, e a sessão subjacente continua a fornecer o contexto da conversa. fileciteturn0file0L126-L159
Uma temperatura baixa, como 0.1f, torna a amostragem mais determinística, o que pode ser útil para perguntas em que você deseja menos variação na resposta gerada. fileciteturn0file0L155-L159
Proteger solicitações de chat de longa duração com cancelamento
Inferência de modelo local pode levar mais tempo para prompts grandes ou respostas mais longas. Você pode impedir que uma solicitação individual seja executada indefinidamente passando um CancellationToken.
Por exemplo, defina um tempo limite 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.");
}
A fonte documenta o mesmo padrão: crie um CancellationTokenSource com um tempo limite, passe seu token para SendMessageAsync e capture OperationCanceledException quando a solicitação for cancelada. fileciteturn0file0L151-L180
Em uma aplicação ASP.NET Core, você também pode passar o token de cancelamento da solicitação para que a geração possa ser interrompida quando o cliente se desconectar.
Problemas Comuns
| Problema | O que verificar |
|---|---|
Not licensed for this method | Certifique-se de que a licença está carregada antes de chamar SendMessageAsync. |
Múltiplas instâncias AsposeLLMApi | Reutilize uma única instância e descarte-a corretamente. |
| Resposta inicial lenta | O download inicial do modelo/motor pode levar vários minutos em uma máquina nova. |
A fonte documenta especificamente o erro de licenciamento, o comportamento de instância única ativa e o carregamento mais lento do primeiro modelo. fileciteturn0file0L249-L255
Chat Simples vs. Sessões Explícitas
A abordagem de sessão implícita é intencionalmente limitada: ela mantém a implementação pequena ao manter uma conversa atual em uma instância AsposeLLMApi.
| Se precisar… | Uso |
|---|---|
| Uma única conversa | SendMessageAsync |
| Um chat interativo curto | SendMessageAsync |
| Uma CLI ou protótipo | SendMessageAsync |
| Várias conversas independentes | Sessões explícitas |
| Vários usuários ou chats simultâneos | Sessões explícitas |
| Estado de conversa persistente | Persistência de sessão |
Use mensagens implícitas quando uma única conversa for suficiente. Passe para APIs de sessão explícitas quando precisar de conversas independentes, usuários simultâneos, estado persistente ou mais controle sobre a identidade da sessão. A fonte existente recomenda sessões explícitas para conversas simultâneas e estado persistente. fileciteturn0file0L266-L274
Para a abordagem de sessão explícita, consulte a documentação do Aspose.LLM e as APIs de multi-turn/session.
Obtenha uma Licença Gratuita
A Aspose oferece licenças temporárias para avaliação. Obtenha uma na página de licença temporária da Aspose e coloque o arquivo Aspose.LLM.lic onde sua aplicação puder carregá‑lo.
Recursos Adicionais Gratuitos
Conclusão
Construir um chat de IA simples com Aspose.LLM não requer gerenciamento explícito de sessão. Ao criar uma instância AsposeLLMApi e chamar SendMessageAsync, você pode criar uma experiência conversacional onde a API mantém a sessão atual automaticamente.
Para aplicações simples, protótipos, scripts e experiências de chat de usuário único, isso mantém a implementação mínima. Quando sua aplicação crescer para suportar múltiplas conversas ou exigir controle de sessão explícito, você pode mudar para as APIs baseadas em sessão.
FAQs
Preciso gerenciar sessões de chat manualmente com Aspose.LLM? Não. O método
SendMessageAsyncde sessão implícita rastreia automaticamente o estado da conversa durante a vida útil da instânciaAsposeLLMApi.Posso alterar o comportamento do modelo para apenas uma pergunta? Sim. Forneça um preset diferente (por exemplo, com temperatura mais baixa) como o argumento
presetparaSendMessageAsync. Apenas essa chamada usa as novas configurações.Como interrompo uma geração de longa‑duração? Crie um
CancellationTokenSourcecom um tempo limite e passe seu token paraSendMessageAsync. CaptureOperationCanceledExceptionpara lidar com o tempo limite.Quais erros comuns devo observar? Licença ausente, criação de múltiplas instâncias da API simultaneamente e um carregamento lento do primeiro modelo são os problemas mais frequentes. Siga as etapas de mitigação descritas acima.
O código de exemplo está pronto para produção? Os trechos são reproduzidos da documentação oficial da Aspose e não foram testados em sandbox. Teste-os em seu próprio ambiente e adicione um tratamento de erros robusto antes de implantar.
