빠르게 .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 methodSendMessageAsync를 호출하기 전에 라이선스가 로드되었는지 확인하십시오.
Multiple AsposeLLMApi instances단일 인스턴스를 재사용하고 올바르게 폐기하십시오.
Slow first response초기 모델/엔진 다운로드는 새 컴퓨터에서 몇 분 정도 걸릴 수 있습니다.

소스는 라이선스 오류, 단일 활성 인스턴스 동작 및 첫 번째 모델 로드가 느린 현상을 구체적으로 문서화하고 있습니다. fileciteturn0file0L249-L255

간단한 채팅 vs. 명시적 세션

암시적 세션 접근 방식은 의도적으로 제한됩니다: AsposeLLMApi 인스턴스에서 현재 대화를 하나만 유지함으로써 구현을 작게 유지합니다.

필요하면…사용
단일 대화SendMessageAsync
짧은 대화형 채팅SendMessageAsync
CLI 또는 프로토타입SendMessageAsync
다중 독립 대화명시적 세션
다중 사용자 또는 동시 채팅명시적 세션
지속적인 대화 상태세션 지속성

하나의 대화만 충분할 때는 암시적 메시징을 사용하십시오. 독립적인 대화, 동시 사용자, 지속적인 상태 또는 세션 ID에 대한 더 많은 제어가 필요할 경우 명시적 세션 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의 공식 문서에서 재현된 것이며 샌드박스‑테스트를 거치지 않았습니다. 배포하기 전에 자체 환경에서 테스트하고 견고한 오류 처리를 추가하십시오.

더 읽기