다음을 통해 공유


Windows 앱 SDK 피 실리카 시작

Important

Windows 앱 SDK의 최신 실험 채널 릴리스에서 사용할 수 있습니다.

Windows 앱 SDK 실험 채널에는 개발 초기 단계의 API 및 기능이 포함되어 있습니다. 실험적 채널의 모든 API는 광범위한 수정 및 호환성이 손상되는 변경이 적용되며 언제든지 후속 릴리스에서 제거될 수 있습니다. 실험적 기능은 프로덕션 환경에서 사용할 수 없으며 이를 사용하는 앱은 Microsoft Store에 게시할 수 없습니다.

  • 피 실리카는 중국에서 사용할 수 없습니다.
  • 패키지되지 않은 앱은 지원되지 않습니다.

Phi Silica는 Windows 앱 SDK사용하여 Windows 앱에 통합할 수 있는 로컬 언어 모델입니다.

Microsoft의 가장 강력한 NPU 튜닝 로컬 언어 모델인 Phi Silica는 Windows Copilot+ PC 디바이스의 효율성과 성능에 최적화되어 있으며 LLM(대규모 언어 모델)에 있는 많은 기능을 제공합니다.

이 수준의 최적화는 Windows 앱 SDK 내의 모델에서만 사용할 수 있으며 다른 버전의 Phi에서는 사용할 수 없습니다.

API 세부 정보는 Windows 앱 SDK Phi Silica에 대한API ref를 참조하세요.

생성 AI API 콘텐츠 안전에 대해 알아보려면 콘텐츠 조정 세부 정보를 참조하세요.

Windows 앱 SDK GitHub 리포지토리(타이틀에 Phi Silica 포함)에서 새 문제 만들거나 기존 문제에 응답하여 이러한 API 및 해당 기능에 대한 피드백을 제공합니다.

필수 조건

Windows 앱 SDK 사용하여 Phi Silica를 Windows 앱에 통합

로컬 Phi Silica 언어 모델 및 Windows 앱 SDK 사용하여 사용자 프롬프트에 대한 텍스트 응답을 생성할 수 있습니다.

전체 응답 생성

이 예제에서는 결과가 반환되기 전에 전체 응답이 생성되는 Q&A 프롬프트에 대한 응답을 생성하는 방법을 보여줍니다.

  1. IsAvailable 메서드를 호출하고 MakeAvailableAsync 메서드가 성공적으로 반환되도록 대기하여 언어 모델을 사용할 수 있는지 확인합니다.

  2. 언어 모델을 사용할 수 있게 되면 참조할 LanguageModel 개체를 만듭니다.

  3. 전체 결과를 반환하는 GenerateResponseAsync 메서드를 사용하여 모델에 문자열 프롬프트를 제출합니다.

using Microsoft.Windows.AI.Generative; 
 
 
if (!LanguageModel.IsAvailable()) 
{ 
   var op = await LanguageModel.MakeAvailableAsync(); 
} 
 
using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "Provide the molecular formula for glucose."; 
 
var result = await languageModel.GenerateResponseAsync(prompt); 
 
Console.WriteLine(result.Response); 
using namespace winrt::Microsoft::Windows::AI::Generative;

if (!LanguageModel::IsAvailable()) 
{
    auto op = LanguageModel::MakeAvailableAsync().get();
}

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "Provide the molecular formula for glucose.";

auto result = languageModel.GenerateResponseAsync(prompt).get();

std::cout << result.Response() << std::endl;

이 예제에서 생성된 응답은 다음과 같습니다.

The molecular formula for glucose is C6H12O6.

전체 응답 생성

API는 사용자 지정할 수 있는 콘텐츠 조정을 기본 제공했습니다. 이 예제에서는 내부 콘텐츠 조정에 대한 고유한 임계값을 지정하는 방법을 보여 줍니다. 콘텐츠 조정에 대해 Windows Copilot 런타임로 알아보세요.

  1. 로컬 언어 모델을 참조하는 LanguageModel 개체를 만듭니다. *이전 코드 조각의 사용자 디바이스에서 Phi Silica 언어 모델을 사용할 수 있는지 확인하기 위한 검사가 이미 수행되었습니다.
  2. ContentFilterOptions 개체를 만들고 원하는 값을 지정합니다.
  3. GenerateResponseAsync 매개 변수 중 하나로 ContentFilterOptions 메서드를 사용하여 모델에 문자열 프롬프트를 제출합니다.
using Microsoft.Windows.AI.Generative; 

using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "Provide the molecular formula for glucose."; 

ContentFilterOptions filterOptions = new ContentFilterOptions();
filterOptions.PromptMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;
filterOptions.ResponseMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;
 
// var result = await languageModel.GenerateResponseAsync(null, prompt, filterOptions); 
 
Console.WriteLine(result.Response);
using namespace winrt::Microsoft::Windows::AI::Generative;

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "Provide the molecular formula for glucose.";

ContentFilterOptions contentFilter = ContentFilterOptions(); 
contentFilter.PromptMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium); 
contentFilter.ResponseMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium); 

// auto result = languageModel.GenerateResponseAsync(nullptr, prompt, filterOptions).get();

std::cout << result.Response() << std::endl;

부분 응답 스트림 생성

이 예제에서는 응답이 부분 결과의 스트림으로 반환되는 Q&A 프롬프트에 대한 응답을 생성하는 방법을 보여줍니다.

  1. 로컬 언어 모델을 참조하는 LanguageModel 개체를 만듭니다. *이전 코드 조각의 사용자 디바이스에서 Phi Silica 언어 모델을 사용할 수 있는지 확인하기 위한 검사가 이미 수행되었습니다.

  2. LanguageModelResponse호출에서 GenerateResponseWithProgressAsync 비동기적으로 검색합니다. 응답이 생성될 때 콘솔에 씁니다.

using Microsoft.Windows.AI.Generative; 

using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "Provide the molecular formula for glucose."; 
 
AsyncOperationProgressHandler<LanguageModelResponse, string> 
progressHandler = (asyncInfo, delta) => 
{ 
    Console.WriteLine($"Progress: {delta}"); 
    Console.WriteLine($"Response so far: {asyncInfo.GetResults().Response()}"); 
 }; 
 
var asyncOp = languageModel.GenerateResponseWithProgressAsync(prompt); 
 
asyncOp.Progress = progressHandler; 
 
var result = await asyncOp;  
 
Console.WriteLine(result.Response);
using namespace winrt::Microsoft::Windows::AI::Generative;

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "Provide the molecular formula for glucose.";

AsyncOperationProgressHandler<LanguageModelResponse, std::string> progressHandler = 
    [](const IAsyncOperationWithProgress<LanguageModelResponse, std::string>& asyncInfo, const std::string& delta) 
    { 
        std::cout << "Progress: " << delta << std::endl; 
        std::cout << "Response so far: " << asyncInfo.GetResults().Response() << std::endl; 
    };

auto asyncOp = languageModel.GenerateResponseWithProgressAsync(prompt);

asyncOp.Progress(progressHandler); 

auto result = asyncOp.get();

std::cout << result.Response() << std::endl;

앱에서 보다 일관된 응답을 위해 미리 정의된 텍스트 형식 적용

Phi Silica에는 앱에서 사용할 텍스트 응답 형식을 미리 정의할 수 있는 기능이 포함되어 있습니다. 텍스트 형식을 미리 정의하면 다음 옵션을 사용하여 보다 일관된 응답 결과를 제공할 수 있습니다.

  • Text to Table: 프롬프트 응답을 테이블 형식으로 변환합니다.
  • 요약 : 프롬프트 텍스트를 기반으로 요약을 반환합니다.
  • 다시 쓰기: 프롬프트 텍스트를 다시 표현하여 명확성을 더하고 보다 쉽게 이해할 수 있는 방식으로 응답을 표현합니다.
  1. 로컬 언어 모델을 참조하는 LanguageModel 개체를 만듭니다. *이전 코드 조각의 사용자 디바이스에서 Phi Silica 언어 모델을 사용할 수 있는지 확인하기 위한 검사가 이미 수행되었습니다.

  2. LanguageModelOptions 개체를 만들고 LanguageModelSkill 개체의 기술 필드에 LanguageModelOptions 열거형을 할당하여 사용할 미리 정의된 텍스트 형식을 지정합니다. 다음 값은 LanguageModelSkill 열거형에 사용할 수 있습니다.

    열거형 설명
    LanguageModelSkill.General 기본값으로, 미리 정의된 서식이 적용되지 않습니다.
    LanguageModelSkill.TextToTable 해당하는 경우 프롬프트 텍스트를 테이블로 변환합니다.
    LanguageModelSkill.Summarize 프롬프트 텍스트를 기반으로 요약을 반환합니다.
    LanguageModelSkill.Rewrite 프롬프트 텍스트 응답을 다시 작성하여 명확성과 이해를 향상시킵니다.
  3. 그런 다음 GenerateResponseWithProgressAsync 호출에서 LanguageModelResponse를 비동기적으로 검색하고 응답이 생성될 때 콘솔에 씁니다.

using Microsoft.Windows.AI.Generative; 
 
using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "This is a large amount of text I want to have summarized.";

LanguageModelOptions options = new LanguageModelOptions {
    Skill = LanguageModelSkill.Summarize
};
 
var result = await languageModel.GenerateResponseAsync(options, prompt); 
 
Console.WriteLine(result.Response); 
using namespace winrt::Microsoft::Windows::AI::Generative;

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "This is a large amount of text I want to have summarized.";

LanguageModelOptions options = LanguageModelOptions();
options.Skill = LanguageModelSkill.Summarize;

auto result = languageModel.GenerateResponseAsync(options, prompt).get();

std::cout << result.Response() << std::endl;

책임 있는 AI

Phi Silica는 안전하고 안전한 AI 환경을 사용하여 앱을 빌드하기 위한 강력하고 신뢰할 수 있는 모델을 개발자에게 제공합니다. Phi Silica가 신뢰할 수 있고 안전하며 책임감 있게 빌드되도록 하기 위해 다음 단계를 수행했습니다. 앱에 AI 기능을 구현할 때는 Windows의 책임 있는 생성 AI 개발에 설명된 모범 사례를 검토할 것을 권장합니다.

  • 모델 품질을 철저히 테스트하고 평가하여 잠재적 위험을 식별하고 완화합니다.
  • Phi Silica 실험 릴리스의 증분 롤아웃. 최종 Phi Silica 실험 릴리스에 이어, 롤아웃은 서명된 앱으로 확장되어 로컬 모델 기능이 있는 애플리케이션에 맬웨어 검사가 적용되었는지 확인합니다.
  • Phi Silica는 텍스트 콘텐츠 조정 API를 포함하는 지역화된 AI 모델을 제공합니다. 이 API는 입력 및 AI 생성 출력 모두에서 잠재적으로 유해한 콘텐츠를 식별하고 필터링합니다. 로컬 텍스트 콘텐츠 조정 모델은 콘텐츠 조정을 위한 Azure AI Content Safety 모델을 기반으로 하며 비슷한 성능을 제공합니다. 심각도 수준 필터 옵션에 대한 설명과 이러한 옵션을 구현하는 코드 예제에 대해서는 텍스트 콘텐츠 조정과 Windows Copilot 런타임을 참조하세요.

Important

콘텐츠 안전 시스템은 틀릴 수 없으며 가끔 오류가 발생할 수 있으므로 추가적인 RAI(책임 있는 AI) 도구와 사례를 통합하는 것이 좋습니다. 자세한 내용은 Windows의 책임 있는 생성 AI 개발을 참조 하세요.