需要一种快速的方法在 .NET 应用程序中添加对话式 AI 体验吗?使用 Aspose.LLM,您可以构建一个简单的聊天,而无需显式创建或管理会话 ID。SendMessageAsync 会自动使用当前会话,允许后续消息共享对话上下文。

此模式适用于一次一次的对话,包括 CLI 工具、原型、脚本以及其他简单的应用程序。

何时 Simple Chat 是正确的选择

隐式会话模式非常适用于:

  • 单个问答。
  • 简短的来回对话。
  • CLI 应用程序和脚本。
  • 原型。
  • 同时只能激活一个对话的应用程序。

如果您的应用程序需要多个独立的对话——例如,为多个用户提供服务的聊天机器人——则应改用 Aspose.LLM 的显式会话 API。

在不管理会话的情况下发送消息

核心消息传递模式刻意保持简洁:

string reply = await api.SendMessageAsync("What is 2 + 2?");
Console.WriteLine(reply);

当您对同一个 AsposeLLMApi 实例进行后续调用时,它们属于同一个当前对话:

await api.SendMessageAsync("My name is Alice.");

string reply = await api.SendMessageAsync("What is my name?");
Console.WriteLine(reply);

您不需要创建会话 ID、在调用之间传递它,或显式追加对话历史。同一个 AsposeLLMApi 实例会为您维护当前对话。现有的源文档将此行为描述为在 API 实例生命周期内维护的隐式会话。 fileciteturn0file0L29-L34

完整的设置仍然需要一个已授权的 API 实例和一个预设。源示例使用 Aspose.LLM.License、Qwen25Preset 和 AsposeLLMApi.Create(preset)。 fileciteturn0file0L87-L122

构建交互式控制台聊天

在了解了基本的消息传递模式后,让我们将其转换为一个小型交互式控制台应用程序。

重要的是只创建一次 API,然后在每条消息中重复使用它:

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}");
            }
        }
    }
}

此示例保持聊天简洁:

  • API 实例仅创建一次。
  • 每个 SendMessageAsync 调用使用相同的隐式会话。
  • 先前的消息仍然对模型可用。
  • 循环提供自然的来回对话。
  • 异常按消息处理,单个请求失败不会导致应用程序终止。

源示例使用相同的结构,并指出单个 API 实例在迭代过程中保留上下文。 fileciteturn0file0L192-L245

要运行它,请创建一个 .NET 控制台项目,替换生成的 Program.cs,然后运行:

dotnet new console
dotnet run

Aspose.LLM 提供了一个高级的 AsposeLLMApi 类,用于抽象模型加载、标记化和推理。要开始使用,请安装 NuGet 包:

Install-Package Aspose.LLM

使用不同的预设自定义单条消息

如果大部分对话都应该使用默认行为,但某个特定问题需要更确定的响应怎么办?

您可以为该调用向 SendMessageAsync 传递不同的预设:

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);

覆盖仅适用于该调用。API 的默认预设保持不变,底层会话仍然提供对话上下文。 fileciteturn0file0L126-L159

较低的温度,例如 0.1f,会使采样更具确定性,这在希望生成的响应变化较小的问题中可能有用。 fileciteturn0file0L155-L159

使用取消保护长时间运行的聊天请求

对于大型提示或较长的响应,本地模型推理可能需要更长时间。您可以通过传递 CancellationToken 来防止单个请求无限期运行。

例如,设置 30 秒的超时:

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.");
}

源文档展示了相同的模式:创建一个带有超时的 CancellationTokenSource,将其令牌传递给 SendMessageAsync,并在请求被取消时捕获 OperationCanceledException。 fileciteturn0file0L161-L190

在 ASP.NET Core 应用程序中,您还可以传递请求的取消令牌,以便在客户端断开连接时停止生成。

常见问题

问题检查项
Not licensed for this method确保在调用 SendMessageAsync 之前已加载许可证。
Multiple AsposeLLMApi instances复用单个实例并正确释放它。
Slow first response在全新机器上,首次模型/引擎下载可能需要几分钟。

该来源特别记录了许可错误、单活动实例行为以及首次模型加载较慢的问题。 fileciteturn0file0L249-L255

简单聊天 vs. 显式会话

隐式会话方法有意受到限制:它通过在 AsposeLLMApi 实例上维护一个当前对话来保持实现的简洁。

如果您需要…使用
单个会话SendMessageAsync
短交互聊天SendMessageAsync
CLI 或原型SendMessageAsync
多个独立会话显式会话
多个用户或并发聊天显式会话
持久化会话状态会话持久化

当一次对话足够时,请使用隐式消息传递。当您需要独立的对话、并发用户、持久状态或对会话标识有更多控制时,请改用显式会话 API。现有来源建议在并发对话和持久状态情况下使用显式会话。 fileciteturn0file0L266-L274

对于显式会话方法,请参阅 Aspose.LLM 文档和多轮/会话 API。

获取免费许可证

Aspose 提供临时许可证用于评估。请从 Aspose 临时许可证页面 获取,并将 Aspose.LLM.lic 文件放置在应用程序可以加载的位置。

免费额外资源

结论

使用 Aspose.LLM 构建简单的 AI 聊天无需显式会话管理。通过创建一个 AsposeLLMApi 实例并调用 SendMessageAsync,您可以构建一个对话体验,API 会自动维护当前会话。

对于简单的应用程序、原型、脚本和单用户聊天体验,这可以保持实现的最小化。当您的应用程序扩展以支持多个会话或需要显式的会话控制时,您可以转向基于会话的 API。

常见问题

  1. 我需要手动管理聊天会话吗,使用 Aspose.LLM?
    不需要。隐式会话 SendMessageAsync 方法会在 AsposeLLMApi 实例的整个生命周期内自动跟踪对话状态。

  2. 我可以仅针对一个问题更改模型行为吗? 是的。提供一个不同的预设(例如,使用较低的温度)作为 preset 参数传递给 SendMessageAsync。只有该调用会使用新的设置。

  3. 如何停止长时间运行的生成? 创建一个带有超时的 CancellationTokenSource 并将其令牌传递给 SendMessageAsync。捕获 OperationCanceledException 以处理超时。

  4. 我应该注意哪些常见错误? 缺少许可证、同时创建多个 API 实例以及首次模型加载缓慢是最常见的问题。请遵循上述缓解步骤。

  5. 示例代码准备好用于生产环境了吗? 这些代码片段摘自 Aspose 官方文档,尚未在沙箱中进行测试。请在自己的环境中进行测试,并在部署前添加健壮的错误处理。

阅读更多