Introdução ao Foundry Local

O Foundry Local permite a execução local de grandes modelos de linguagem (LLMs) diretamente no seu dispositivo Windows, como parte do Microsoft Foundry em Windows. É uma boa alternativa quando precisas de ir mais fundo do que as APIs de IA do Windows, ou quando precisas de suportar hardware que não seja um Copilot+ PC. Não são necessárias permissões especiais nem tokens de desbloqueio. O SDK nativo corre no processo da tua aplicação e não requer a CLI Local do Foundry nem um servidor local REST separado. O mesmo padrão funciona numa aplicação de consola, numa aplicação WinUI 3, numa aplicação WPF ou em qualquer outro host .NET.

Logótipos de tecnologias associadas à Fundição Local

Observação

A documentação completa do Foundry Local — incluindo a linha de código, a gestão de modelos, o servidor opcional REST, o SDK Python e mais — é mantida na documentação do Microsoft Foundry. Os links nesta página levam-no lá quando necessário. Use o botão de voltar do seu navegador ou a breadcrumb para voltar à documentação de IA do Windows a qualquer momento.

Se não tem a certeza se o Foundry Local é a escolha certa para o seu cenário, veja Escolha a sua solução de IA Windows antes de continuar.

Prerequisites

  • Windows 11, versão 24H2 (build 26100) ou posterior
  • .NET 9.0 SDK ou posterior
  • Um dispositivo x64 ou Arm64 com memória e espaço em disco suficientes para o modelo que selecionares
  • Acesso à Internet para downloads iniciais do pacote inicial, modelo e componentes em tempo de execução

O SDK do Windows pode usar variantes compatíveis de CPU, GPU e modelo de NPU. Uma GPU, NPU ou Copilot+ PC dedicada não é necessária quando o modelo selecionado tem uma variante de CPU compatível. A aceleração e o desempenho disponíveis dependem do seu dispositivo, modelo e fornecedor de execução.

Observação

Este início rápido utiliza Phi-4 Mini, atualmente o modelo Phi mais recente da Microsoft disponível através do alias phi-4-miniFoundry Local. Os alias de catálogo local da Foundry Local e os modelos recomendados podem mudar à medida que o catálogo evolui.

O Phi-4 Mini é independente do Phi Silica, o modelo de API de IA do Windows que vem com o Windows. A Phi Silica continua a ser uma Funcionalidade de Acesso Limitado e requer um token de desbloqueio. Está previsto que seja substituído pelo Aion Instruct, que não requer um token de Funcionalidades de Acesso Limitado. Consulte Comece com a Phi Silica para detalhes de acesso e o cronograma de transição.

Opcional: Instalar a CLI local da Foundry

O fluxo de trabalho do SDK neste quickstart não requer a linha de comando. Instale-o apenas se também quiser inspecionar e gerir modelos a partir de um terminal:

winget install Microsoft.FoundryLocal

Depois fecha e reabre o terminal para que o foundry comando fique no teu PATH. Verificar:

foundry --version

Criar um projeto

dotnet new console -n FoundryLocalDemo
cd FoundryLocalDemo

O pacote NuGet inclui binários nativos do Windows, pelo que o projeto precisa de um framework de destino Windows e identificadores de tempo de execução. Abra FoundryLocalDemo.csproj e substitua o <PropertyGroup> bloco por:

<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>net9.0-windows10.0.26100.0</TargetFramework>
  <Nullable>enable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
  <RuntimeIdentifiers>win-x64;win-arm64</RuntimeIdentifiers>
</PropertyGroup>

Depois restaura para gerar o ficheiro de assets para o novo alvo:

dotnet restore

Instalar o pacote NuGet

Instale o pacote Windows estável atual:

dotnet add package Microsoft.AI.Foundry.Local.WinML

O pacote inclui o ChatMessage e os tipos relacionados utilizados pela API de chat nativa do Foundry Local. Seleciona uma variante de modelo compatível para o dispositivo atual e pode usar fornecedores de execução de ML Windows para aceleração de hardware.

Observação

Se precisares de direcionar plataformas não Windows, usa Microsoft.AI.Foundry.Local em vez disso. Fornece a mesma superfície da API local Foundry sem a integração com o Windows ML.

O comando acima instala o pacote estável atual. O tutorial do WinUI utiliza o .NET 10 e fixa as versões dos pacotes para que seja possível reproduzir toda a explicação passo a passo.

Início rápido: executar um modelo

Substitua o conteúdo de Program.cs pelo seguinte, depois execute dotnet run. O programa inicializa o Foundry Local, descarrega o modelo se necessário, executa um chat e limpa tudo.

using Microsoft.AI.Foundry.Local;
using Microsoft.Extensions.Logging.Abstractions;
using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels;

// 1. Initialize the native in-process Foundry Local SDK.
await FoundryLocalManager.CreateAsync(
    new Configuration { AppName = "my-app" },
    NullLogger.Instance);

var manager = FoundryLocalManager.Instance;
try
{
    // 2. Look up the model in the catalog by alias.
    var catalog = await manager.GetCatalogAsync();
    var model = await catalog.GetModelAsync("phi-4-mini")
        ?? throw new Exception(
            "Model 'phi-4-mini' not found in catalog. " +
            "Check your internet connection and available model aliases.");

    // 3. Download the model if it is not already cached.
    if (!await model.IsCachedAsync())
    {
        Console.Write("Downloading phi-4-mini...");
        await model.DownloadAsync(progress =>
        {
            Console.Write($"\rDownloading phi-4-mini  {progress,5:F1}%");
        });
        Console.WriteLine();
    }

    // 4. Load the model into memory.
    await model.LoadAsync();

    // 5. Run a chat completion.
    var chatClient = await model.GetChatClientAsync();
    var response = await chatClient.CompleteChatAsync(new[]
    {
        new ChatMessage { Role = "system", Content = "You are a helpful assistant." },
        new ChatMessage { Role = "user", Content = "Explain async/await in C# in two sentences." }
    });

    if (!response.Successful)
        throw new Exception(
            $"Chat completion failed: {response.Error?.Message ?? "unknown error"} " +
            $"(code: {response.Error?.Code})");

    var content = response.Choices![0].Message.Content;
    if (string.IsNullOrEmpty(content))
        throw new Exception(
            "Model returned empty content. " +
            "Try the request again or select another compatible model variant.");

    Console.WriteLine(content);
}
finally
{
    // 6. Clean up — always runs even if an earlier step throws.
    manager.Dispose();
}

Respostas de streaming

Para uma melhor experiência de utilizador nas aplicações de interface, transmita a resposta token a token. Este excerto continua do início rápido acima — chatClient vem do passo 5:

using var cts = new CancellationTokenSource();

await foreach (var chunk in chatClient.CompleteChatStreamingAsync(
    new[] { new ChatMessage { Role = "user", Content = "Write a haiku about Windows." } },
    cts.Token))
{
    Console.Write(chunk.Choices?[0]?.Message?.Content);
}
Console.WriteLine();

Parâmetros de geração de sintonia

chatClient.Settings.Temperature = 0.7f;
chatClient.Settings.MaxTokens = 512;
chatClient.Settings.TopP = 0.9f;

Apelidos de modelos

Passe um alias de modelo (não um ID de modelo completo) para GetModelAsync que o Foundry Local possa selecionar uma variante de hardware compatível. Dependendo do modelo e dispositivo, pode ser uma variante QNN NPU no Snapdragon, uma variante CUDA na NVIDIA, ou uma variante com CPU.

Se instalaste a CLI opcional, executa-a para veres os alias disponíveis:

foundry model list

Por exemplo, use phi-4-mini para o modelo Microsoft Phi-4 Mini. O catálogo muda ao longo do tempo, por isso consulte o catálogo de modelos Foundry Local para os nomes atuais e variantes disponíveis.

Início rápido em Python

O Foundry Local também suporta Python, JavaScript (Node.js) e Rust. Aqui está o exemplo mínimo em Python para confirmar que o padrão funciona — o guia completo para as quatro linguagens está na documentação do Microsoft Foundry.

Instale um dos seguintes — não instale ambos, pois têm dependências conflitantesonnxruntime-core:

pip install foundry-local-sdk-winml   # Windows — includes hardware acceleration (recommended on Windows)
pip install foundry-local-sdk         # macOS/Linux, or Windows without hardware acceleration

Importante

O foundry-local pacote no PyPI (sem -sdk) é um pacote de terceiros não relacionado. Instala foundry-local-sdk ou foundry-local-sdk-winml para obter o SDK local Microsoft Foundry.

Criar app.py:

from foundry_local_sdk import Configuration, FoundryLocalManager

FoundryLocalManager.initialize(Configuration(app_name="my-app"))
manager = FoundryLocalManager.instance

model = manager.catalog.get_model("phi-4-mini")
model.download(lambda p: print(f"\rDownloading {p:.0f}%", end="", flush=True))
model.load()

client = model.get_chat_client()
for chunk in client.complete_streaming_chat([{"role": "user", "content": "Why is the sky blue?"}]):
    print(chunk.choices[0].delta.content or "", end="", flush=True)
print()

model.unload()

Executa:

python app.py

Para o quick-start completo em Python — incluindo configuração do fornecedor de execução, tratamento de erros e listagem de modelos — veja Começar com o Foundry Local na documentação do Microsoft Foundry.

Utilização a partir de uma aplicação WinUI 3 ou WPF

Inicializar uma vez em App.xaml.cs ou App.cs:

protected override async void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    await FoundryLocalManager.CreateAsync(
        new Configuration { AppName = "MyWinUIApp" },
        NullLogger.Instance);
    // ...
}

Depois resolve FoundryLocalManager.Instance em qualquer parte da aplicação. Chame Dispose() no manipulador de saída da aplicação.

Para um guia completo da aplicação, continue para o tutorial do WinUI. Abrange consentimento explícito para download do modelo, progresso, cancelamento, acessibilidade e revisão de resultados.

Recurso alternativo para a nuvem

Combine o Foundry Local com APIs de IA Windows e Azure OpenAI para um padrão resiliente multi-nível. Veja Escolha a sua solução de IA Windows para um exemplo compilado completo.

Troubleshooting

OGA Error: N instances of struct Generators::Model were leaked
Estes avisos aparecem após o programa sair e são benignos. Eles provêm do rastreamento nativo de recursos da biblioteca ONNX Runtime GenAI (OGA) subjacente. O teu resultado está correto; Os avisos não indicam um problema com o seu código.

Error in cpuinfo: Unknown chip model name 'Snapdragon...'
Este aviso do ONNX Runtime significa que a biblioteca não reconhece o seu SoC ARM para deteção de funcionalidades da CPU. Volta a valores padrão de segurança e a inferência corre normalmente. Não é preciso fazer nada.

Model '...' not found in catalog
O SDK recolhe o catálogo de modelos da internet. Verifique a sua ligação à rede. Se não for encontrado um alias específico do modelo, execute foundry model list para ver alias disponíveis ou consulte o catálogo completo em foundrylocal.ai/models.

O modelo devolve conteúdo vazio
Tente novamente o pedido e confirme se o modelo selecionado tem uma variante compatível para o seu dispositivo. Se o problema continuar, selecione um modelo mais pequeno ou uma variante de CPU e verifique se o dispositivo tem memória suficiente.

foundry-local-sdk-winml requires onnxruntime-core==X.Y.Z, but you have ... which is incompatible
Este conflito de dependência do pip significa que tanto foundry-local-sdk-winml como foundry-local-sdk estão instalados — eles fixam versões diferentes de onnxruntime-core, que não podem coexistir. Desinstalar um:

pip uninstall foundry-local-sdk        # if you want the winml (Windows) package
pip uninstall foundry-local-sdk-winml  # if you want the cross-platform package

Depois reinstala o que queres. Utilizar um ambiente virtual evita este problema por completo.