.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 インスタンスの存続期間中に維持される暗黙的なセッションとして文書化しています。 fileciteturn0file0L29-L34
完全なセットアップには、ライセンスされた API インスタンスとプリセットがまだ必要です。ソース例では Aspose.LLM.License、Qwen25Preset、および AsposeLLMApi.Create(preset) を使用しています。 fileciteturn0file0L87-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 インスタンスが反復間でコンテキストを保持することに注意しています。 fileciteturn0file0L192-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 のデフォルトプリセットは変更されず、基礎となるセッションは会話コンテキストを提供し続けます。 fileciteturn0file0L126-L159
低温度(例: 0.1f)はサンプリングをより決定的にし、生成された応答の変動を抑えたい質問に役立つことがあります。 fileciteturn0file0L155-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 をキャッチします。 fileciteturn0file0L161-L190
ASP.NET Core アプリケーションでは、クライアントが切断されたときに生成を停止できるように、リクエストのキャンセルトークンを渡すこともできます。
共通の問題
| 問題 | 確認項目 |
|---|---|
Not licensed for this method | SendMessageAsync を呼び出す前にライセンスがロードされていることを確認してください。 |
Multiple AsposeLLMApi instances | 単一のインスタンスを再利用し、正しく破棄してください。 |
| Slow first response | 初回のモデル/エンジンのダウンロードは、クリーンなマシンでは数分かかることがあります。 |
ソースは、ライセンスエラー、単一アクティブインスタンスの動作、および最初のモデルロードが遅いことを具体的に文書化しています。 fileciteturn0file0L249-L255
シンプルチャット vs. 明示的セッション
暗黙的セッション アプローチは意図的に制限されています: AsposeLLMApi インスタンス上で現在の会話を1つだけ維持することで、実装を小さく保ちます。
| 必要な場合 | 使用 |
|---|---|
| 1つの会話 | SendMessageAsync |
| 短いインタラクティブチャット | SendMessageAsync |
| CLI またはプロトタイプ | SendMessageAsync |
| 複数の独立した会話 | Explicit sessions |
| 複数のユーザーまたは同時チャット | Explicit sessions |
| 永続的な会話状態 | Session persistence |
1つの会話で十分な場合は、暗黙的メッセージングを使用してください。独立した会話、同時ユーザー、永続的な状態、またはセッション ID のより細かな制御が必要な場合は、明示的なセッション API に移行してください。既存の情報源では、同時会話と永続的な状態のために明示的なセッションを推奨しています。fileciteturn0file0L266-L274
明示的セッションアプローチについては、Aspose.LLM のドキュメントとマルチターン/セッション API を参照してください。
無料ライセンスを取得
Aspose は評価用の一時ライセンスを提供しています。 Aspose の一時ライセンス ページ から取得し、Aspose.LLM.lic ファイルをアプリケーションがロードできる場所に配置してください。
無料の追加リソース
結論
Aspose.LLM を使用したシンプルな AI チャットの構築では、明示的なセッション管理は必要ありません。AsposeLLMApi インスタンスを 1 つ作成し、SendMessageAsync を呼び出すことで、API が自動的に現在のセッションを維持する会話体験を構築できます。
シンプルなアプリケーション、プロトタイプ、スクリプト、単一ユーザーのチャット体験の場合、実装を最小限に抑えることができます。アプリケーションが複数の会話をサポートするように成長したり、明示的なセッション制御が必要になった場合は、セッションベースの API に移行できます。
よくある質問
Aspose.LLMでチャットセッションを手動で管理する必要がありますか? いいえ。暗黙的セッションの
SendMessageAsyncメソッドは、AsposeLLMApiインスタンスの存続期間中、会話状態を自動的に追跡します。1つの質問だけのモデルの動作を変更できますか? はい。
SendMessageAsyncのpreset引数に、別のプリセット(例: 温度が低いもの)を指定してください。その呼び出しだけが新しい設定を使用します。長時間実行される生成を停止するにはどうすればよいですか? タイムアウト付きの
CancellationTokenSourceを作成し、そのトークンをSendMessageAsyncに渡します。タイムアウトを処理するためにOperationCanceledExceptionをキャッチします。注意すべき一般的なエラーは何ですか? ライセンスが欠如していること、同時に複数の API インスタンスを作成すること、そして最初のモデルロードが遅いことが最も頻繁に発生する問題です。上記で説明した緩和手順に従ってください。
サンプルコードは本番環境で使用できる状態ですか? これらのスニペットは Aspose の公式ドキュメントから転載されたもので、サンドボックスでのテストは行われていません。ご自身の環境でテストし、デプロイする前に堅牢なエラーハンドリングを追加してください。
