.NET アプリケーションに会話型 AI エクスペリエンスをすばやく追加する方法が必要ですか? Aspose.LLM を使用すると、セッション ID を明示的に作成または管理せずにシンプルなチャットを構築できます。SendMessageAsync は現在のセッションを自動的に使用し、連続したメッセージが会話コンテキストを共有できるようにします。

このパターンは、CLI ツール、プロトタイプ、スクリプト、その他のシンプルなアプリケーションなど、1 回に 1 つの会話に役立ちます。

シンプルチャットが適切な選択であるとき

暗黙的セッションパターンは次の場合に適しています:

  • 単一の質問と回答。
  • 短いやり取りの会話。
  • CLI アプリケーションとスクリプト。
  • プロトタイプ。
  • 同時に1つの会話だけがアクティブである必要があるアプリケーション。

アプリケーションが複数の独立した会話を必要とする場合(例として、複数のユーザーに対応するチャットボットなど)、代わりに 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 呼び出しは同じ暗黙のセッションを使用します。
  • 前のメッセージはモデルで利用可能なままです。
  • ループは自然な往復会話を提供します。
  • 例外はメッセージごとに処理されるため、1つのリクエスト失敗がアプリケーションの終了につながりません。

ソース例は同じ構造を使用し、単一の 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 methodSendMessageAsync を呼び出す前にライセンスがロードされていることを確認してください。
Multiple AsposeLLMApi instances単一のインスタンスを再利用し、正しく破棄してください。
Slow first response初回のモデル/エンジンのダウンロードは、クリーンなマシンでは数分かかることがあります。

ソースは、ライセンスエラー、単一アクティブインスタンスの動作、および最初のモデルロードが遅いことを具体的に文書化しています。 fileciteturn0file0L249-L255

シンプルチャット vs. 明示的セッション

暗黙的セッション アプローチは意図的に制限されています: AsposeLLMApi インスタンス上で現在の会話を1つだけ維持することで、実装を小さく保ちます。

必要な場合使用
1つの会話SendMessageAsync
短いインタラクティブチャットSendMessageAsync
CLI またはプロトタイプSendMessageAsync
複数の独立した会話Explicit sessions
複数のユーザーまたは同時チャットExplicit sessions
永続的な会話状態Session persistence

1つの会話で十分な場合は、暗黙的メッセージングを使用してください。独立した会話、同時ユーザー、永続的な状態、またはセッション ID のより細かな制御が必要な場合は、明示的なセッション API に移行してください。既存の情報源では、同時会話と永続的な状態のために明示的なセッションを推奨しています。fileciteturn0file0L266-L274

明示的セッションアプローチについては、Aspose.LLM のドキュメントとマルチターン/セッション API を参照してください。

無料ライセンスを取得

Aspose は評価用の一時ライセンスを提供しています。 Aspose の一時ライセンス ページ から取得し、Aspose.LLM.lic ファイルをアプリケーションがロードできる場所に配置してください。

無料の追加リソース

結論

Aspose.LLM を使用したシンプルな AI チャットの構築では、明示的なセッション管理は必要ありません。AsposeLLMApi インスタンスを 1 つ作成し、SendMessageAsync を呼び出すことで、API が自動的に現在のセッションを維持する会話体験を構築できます。

シンプルなアプリケーション、プロトタイプ、スクリプト、単一ユーザーのチャット体験の場合、実装を最小限に抑えることができます。アプリケーションが複数の会話をサポートするように成長したり、明示的なセッション制御が必要になった場合は、セッションベースの API に移行できます。

よくある質問

  1. Aspose.LLMでチャットセッションを手動で管理する必要がありますか? いいえ。暗黙的セッションの SendMessageAsync メソッドは、AsposeLLMApi インスタンスの存続期間中、会話状態を自動的に追跡します。

  2. 1つの質問だけのモデルの動作を変更できますか? はい。SendMessageAsync の preset 引数に、別のプリセット(例: 温度が低いもの)を指定してください。その呼び出しだけが新しい設定を使用します。

  3. 長時間実行される生成を停止するにはどうすればよいですか? タイムアウト付きの CancellationTokenSource を作成し、そのトークンを SendMessageAsync に渡します。タイムアウトを処理するために OperationCanceledException をキャッチします。

  4. 注意すべき一般的なエラーは何ですか? ライセンスが欠如していること、同時に複数の API インスタンスを作成すること、そして最初のモデルロードが遅いことが最も頻繁に発生する問題です。上記で説明した緩和手順に従ってください。

  5. サンプルコードは本番環境で使用できる状態ですか? これらのスニペットは Aspose の公式ドキュメントから転載されたもので、サンドボックスでのテストは行われていません。ご自身の環境でテストし、デプロイする前に堅牢なエラーハンドリングを追加してください。

読み続ける