Потрібен швидкий спосіб додати досвід розмовного ШІ до .NET застосунку? За допомогою Aspose.LLM ви можете створити простий чат без явного створення чи управління ідентифікаторами сеансів. SendMessageAsync автоматично використовує поточний сеанс, дозволяючи послідовним повідомленням ділитися контекстом розмови.
Цей шаблон корисний для однієї розмови за раз, включаючи інструменти CLI, прототипи, скрипти та інші прості застосунки.
Коли простий чат — правильний вибір
Неявний шаблон сесії добре підходить для:
- Одна пара питання та відповіді.
- Коротка діалогова розмова.
- CLI‑застосунки та скрипти.
- Прототипи.
- Додатки, у яких одночасно має бути активна лише одна розмова.
Якщо вашому застосунку потрібні кілька незалежних розмов — наприклад, чат‑бот, який обслуговує кількох користувачів — слід використовувати явні API сеансів Aspose.LLM.
Надіслати повідомлення без керування сесією
Основний шаблон обміну повідомленнями навмисно невеликий:
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);
Ви не створюєте ідентифікатор сеансу, не передаєте його між викликами і не додаєте історію розмов явно. Той самий екземпляр 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 з тайм‑аутом, передати його токен у SendMessageAsync і перехопити OperationCanceledException, коли запит скасовується. fileciteturn0file0L151-L180
В застосунку ASP.NET Core ви також можете передати токен скасування запиту, щоб генерація могла зупинитися, коли клієнт відключається.
Поширені проблеми
| Проблема | Що перевірити |
|---|---|
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 там, де ваш застосунок зможе його завантажити.
Безкоштовні додаткові ресурси
Висновок
Створення простого AI‑чату за допомогою Aspose.LLM не потребує явного керування сесією. Створивши один екземпляр AsposeLLMApi і викликавши SendMessageAsync, ви можете створити розмовний досвід, де API автоматично підтримує поточну сесію.
Для простих застосувань, прототипів, скриптів та однокористувацьких чат‑досвідів це забезпечує мінімальну реалізацію. Коли ваш застосунок розростається, щоб підтримувати кілька розмов або вимагає явного керування сесіями, ви можете перейти до API на основі сесій.
Поширені запитання
Чи потрібно мені керувати чат‑сесіями вручну з Aspose.LLM? Ні. Неявний‑сесійний метод
SendMessageAsyncавтоматично відстежує стан розмови протягом усього часу існування екземпляраAsposeLLMApi.Чи можу я змінити поведінку моделі лише для одного питання? Так. Передайте інший пресет (наприклад, з нижчою температурою) як аргумент
presetуSendMessageAsync. Тільки цей виклик використовує нові налаштування.Як зупинити довготривалу генерацію? Створіть
CancellationTokenSourceз тайм-аутом і передайте його токен уSendMessageAsync. ПерехопітьOperationCanceledException, щоб обробити тайм-аут.На які поширені помилки слід звернути увагу? Відсутність ліцензії, одночасне створення кількох екземплярів API та повільне завантаження першої моделі — це найчастіші проблеми. Дотримуйтесь кроків усунення, описаних вище.
Чи готовий зразковий код до продакшн? Фрагменти скопійовані з офіційної документації Aspose і не проходили тестування у пісочниці. Перевірте їх у вашому середовищі та додайте надійне оброблення помилок перед розгортанням.
