需要快速在 .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 實例生命週期內維持的隱式會話。 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呼叫都使用相同的隱式會話。 - 先前的訊息仍可供模型使用。
- 迴圈提供自然的來回對話。
- 例外情況會針對每條訊息處理,避免單一失敗請求終止應用程式。
來源範例使用相同的結構,並指出單一 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,將其 token 傳遞給 SendMessageAsync,並在請求被取消時捕獲 OperationCanceledException。 fileciteturn0file0L151-L180
在 ASP.NET Core 應用程式中,您也可以傳遞請求的取消令牌,以便在客戶端斷開連線時停止生成。
Common Issues
| 問題 | 檢查項目 |
|---|---|
Not licensed for this method | 確保在呼叫 SendMessageAsync 之前已載入授權。 |
Multiple AsposeLLMApi instances | 重複使用單一實例並正確釋放它。 |
| Slow first response | 在全新機器上,首次模型/引擎下載可能需要數分鐘。 |
來源明確記錄了授權錯誤、單一活動實例行為,以及較慢的首次模型載入。 fileciteturn0file0L249-L255
簡易聊天 vs. 明確會話
隱式會話方法被刻意限制:它透過在 AsposeLLMApi 實例上維持單一當前對話,保持實作規模小。
| 如果您需要… | 使用 |
|---|---|
| 單一對話 | SendMessageAsync |
| 短暫互動聊天 | SendMessageAsync |
| CLI 或原型 | SendMessageAsync |
| 多個獨立對話 | 顯式會話 |
| 多使用者或同時聊天 | 顯式會話 |
| 持久對話狀態 | 會話持久性 |
當一次對話足夠時,使用隱式訊息傳遞。當您需要獨立的對話、同時使用者、持久狀態或對會話身份有更多控制時,請改用顯式會話 API。現有來源建議在同時對話和持久狀態的情況下使用顯式會話。 fileciteturn0file0L266-L274
對於明確會話方法,請參閱 Aspose.LLM 文檔和多回合/會話 API。
取得免費授權
Aspose 提供臨時授權以供評估。從 Aspose 臨時授權頁面 取得一個,並將 Aspose.LLM.lic 檔案放置在應用程式可以載入的地方。
免費的其他資源
結論
使用 Aspose.LLM 構建簡單的 AI 聊天不需要明確的會話管理。只需建立一個 AsposeLLMApi 實例並呼叫 SendMessageAsync,即可構建對話體驗,讓 API 自動維持當前會話。
對於簡單的應用程式、原型、腳本以及單一使用者聊天體驗,這樣可以保持實作最小化。當您的應用程式成長到支援多個對話或需要明確的會話控制時,您可以轉向基於會話的 API。
常見問題
我需要手動管理與 Aspose.LLM 的聊天會話嗎? 不需要。隱式會話
SendMessageAsync方法會在AsposeLLMApi實例的生命週期內自動追蹤對話狀態。我可以只對單一問題更改模型行為嗎? 是的。提供不同的預設(例如,較低的 temperature)作為
preset參數傳遞給SendMessageAsync。只有該呼叫會使用新的設定。如何停止長時間運行的生成?
建立具有逾時時間的CancellationTokenSource,並將其 token 傳遞給SendMessageAsync。捕獲OperationCanceledException以處理逾時。我應該注意哪些常見錯誤? 缺少授權、同時建立多個 API 實例以及首次模型載入緩慢是最常見的問題。請遵循上面描述的緩解步驟。
範例程式碼是否已準備好投入生產? 這些程式碼片段取自 Aspose 官方文件,尚未在沙盒中測試。請在自己的環境中測試,並在部署前加入完善的錯誤處理。
