Casos de uso do Foundation Models: General vs Content Tagging
A documentação da Apple para SystemLanguageModel começa com o modelo base, depois os casos de uso e, por fim, os adapters. SystemLanguageModel.default é o modelo base; SystemLanguageModel.UseCase documenta general e contentTagging; adapters customizados são o caminho treinado pelo desenvolvedor, abordado separadamente.123
O post anterior sobre o protocolo Tool cobriu como fazer o modelo padrão executar trabalho útil. A pergunta que este post responde é a próxima: quando o modelo padrão com prompts e tools é suficiente, e quando o caso de uso .contentTagging da Apple ganha seu lugar? O caminho dos adapters customizados é um post separado; o ciclo de vida gerenciado pelo desenvolvedor tem superfície demais para dividir com o critério de decisão.
TL;DR
SystemLanguageModel.UseCaseé uma struct com duas propriedades estáticas:.generale.contentTagging.3 Nenhum outro caso de uso está documentado..generalé o padrão. Recorra a ele primeiro. Prompts, instruções, geração guiada e chamada de tools rodam todos sobre.general; a especialização é a última alavanca a puxar..contentTaggingpertence ao guia de content tagging da Apple: identificar tópicos, ações, objetos e emoções no texto de entrada, e recuar para.generalquando os limites declarados pela Apple não couberem.5- O terceiro trilho (adapters customizados, o tipo
Adapter, o entitlement, o toolkit) é onde mora a complexidade operacional. Outro post.
O que é, de fato, o SystemLanguageModel
A Apple descreve SystemLanguageModel como o modelo de linguagem on-device para tarefas de geração de texto, com default como modelo base. A disponibilidade é estado de runtime: elegibilidade do dispositivo, configurações do Apple Intelligence e prontidão do modelo, tudo importa antes de um app exibir UI apoiada pelo modelo.1
A documentação da Apple lista as plataformas do modelo (iOS, iPadOS, Mac Catalyst, macOS, visionOS, todas 26.0+) e duas versões atuais do modelo: uma para os releases 26.0–26.3 e outra para 26.4. A Apple atualiza o modelo on-device em atualizações rotineiras do OS.1
A disponibilidade é verificada em runtime. SystemLanguageModel.availability é um enum Availability com os seguintes cases, conforme documentado no código de exemplo da Apple:1
struct GenerativeView: View {
private var model = SystemLanguageModel.default
var body: some View {
switch model.availability {
case .available:
// Show your intelligence UI.
case .unavailable(.deviceNotEligible):
// Show an alternative UI.
case .unavailable(.appleIntelligenceNotEnabled):
// Ask the person to turn on Apple Intelligence.
case .unavailable(.modelNotReady):
// The model isn't ready because it's downloading or because
// of other system reasons.
case .unavailable(let other):
// The model is unavailable for an unknown reason.
}
}
}
isAvailable é um getter de conveniência que retorna true apenas quando o sistema está totalmente pronto.1 Sempre verifique antes de chamar.
O primeiro trilho: faça prompt no modelo geral
O guia geral da Apple diz que o modelo on-device suporta geração e compreensão de texto para as tarefas abaixo, incluindo Generate tags from text.4
| Capacidade | Exemplo de prompt |
|---|---|
| Resumir | “Summarize this article.” |
| Extrair entidades | “List the people and places mentioned in this text.” |
| Compreender texto | “What happens to the dog in this story?” |
| Refinar ou editar texto | “Change this story to be in second person.” |
| Classificar ou avaliar texto | “Is this text relevant to the topic ‘Swift’?” |
| Compor escrita criativa | “Generate a short bedtime story about a fox.” |
| Gerar tags a partir de texto | “Provide two tags that describe the main topics of this text.” |
| Gerar diálogo de jogo | “Respond in the voice of a friendly inn keeper.” |
A lista do que evitar da Apple é separada: matemática básica, criação de código e raciocínio lógico.4
| Evitar | Exemplo |
|---|---|
| Matemática básica | “How many b’s are there in bagel?” |
| Geração de código | “Generate a Swift navigation list.” |
| Raciocínio lógico | “If I’m at Apple Park facing Canada, what direction is Texas?” |
Note que “generate tags from text” aparece na tabela de bom desempenho para o modelo geral. Esse é um contexto importante para a decisão de especialização logo abaixo.
O trilho geral é onde a Apple documenta prompts, instruções, geração guiada, chamada de tools e opções de geração.4
A janela de contexto é de 4.096 tokens para o modelo do sistema.4 A Apple observa que um token corresponde a três ou quatro caracteres em idiomas como inglês, espanhol ou alemão, e um token por caractere em idiomas como japonês, chinês ou coreano. As instruções, prompts e saídas contam todos para o limite. Quando uma sessão excede o limite, o framework lança LanguageModelSession.GenerationError.exceededContextWindowSize(_:).4
O segundo trilho: .contentTagging
SystemLanguageModel.UseCase está documentado como uma struct (não um enum) com duas propriedades estáticas:3
static let general: SystemLanguageModel.UseCase
static let contentTagging: SystemLanguageModel.UseCase
Não há outros cases documentados. Se um artigo nomeia um terceiro caso de uso, o artigo está inventando.
.contentTagging tem um formato diferente de .general. O guia da Apple descreve o modelo contentTagging como aquele que “identifies topics, actions, objects, and emotions in input text” e produz tags como “one to a few lowercase words.”5 O modelo é construído para avaliar a entrada em vez de responder de forma conversacional: “It isn’t a typical language model that responds to a query from a person: instead, it evaluates and groups the input you provide.”5
Carregando o modelo com .contentTagging:
let model = SystemLanguageModel(useCase: .contentTagging)
let session = LanguageModelSession(
model: model,
instructions: """
Provide the two tags that are most significant in the context of topics.
"""
)
O initializer de conveniência documentado é init(useCase:guardrails:).1 O código de exemplo da Apple o chama sem o argumento guardrails, o que sugere que guardrails carrega um valor padrão no ponto de chamada.
O modelo contentTagging integra com Generable, então você pode definir um tipo Swift que captura o formato de tags que deseja:
@Generable
struct ContentTaggingResult {
@Guide(
description: "Most important actions in the input text.",
.maximumCount(2)
)
let actions: [String]
@Guide(
description: "Most important emotions in the input text.",
.maximumCount(3)
)
let emotions: [String]
@Guide(
description: "Most important objects in the input text.",
.maximumCount(5)
)
let objects: [String]
@Guide(
description: "Most important topics in the input text.",
.maximumCount(2)
)
let topics: [String]
}
let response = try await session.respond(
to: prompt,
generating: ContentTaggingResult.self
)
Observação comportamental da Apple: “For very short input queries, topic and emotion tagging instructions provide the best results. Actions or object lists will be too specific, and may repeat the words in the query.”5 O modelo contentTagging também “respects the output format you want, even in the absence of instructions”, então o formato Generable carrega mais peso do que um system prompt extenso carregaria.
A árvore de decisão (nas palavras da própria Apple)
A Apple dá a regra de decisão diretamente. Use .general para tags fora de ações, objetos, emoções ou tópicos; para hashtags; para fluxos de tagging via tool calling; e para restrições além de maximumCount.5
As quatro frases exatas do guia contentTagging da Apple:5
- “If you’re tagging content that’s not an action, object, emotion, or topic, use general instead.”
- “Use the general model to generate content like hashtags for social media posts.”
- “If you adopt the tool calling API, and want to generate tags, use general and pass the Tool output to the content tagging model.”
- “If you have a complex set of constraints on tagging that are more complicated than the maximum count support of the tagging model, use general instead.”
Escolha .contentTagging somente quando a tarefa for tagging de texto nas quatro categorias documentadas pela Apple e as restrições de saída couberem em maximumCount. Se nem .general nem .contentTagging couberem, deixe a decisão sobre adapter customizado para o post sobre o ciclo de vida do adapter.5
O que a Apple não publicou
A Apple documenta .contentTagging como um modelo de content tagging adaptado, mas não publica o mecanismo de adaptação, deltas de benchmark ou propriedades estáticas adicionais de UseCase. Trate qualquer coisa além de general e contentTagging como não verificada até que developer.apple.com documente.35
O próprio enquadramento da Apple sobre versionamento: “Apple will periodically update SystemLanguageModel in routine OS updates to improve the on-device model’s abilities and performance.”1 Trate a superfície como versionada.
Conclusões
- Dois casos de uso documentados. A página
UseCaseda Apple documentageneralecontentTagging; não assuma um terceiro valor.3 - Padrão para
.general. Prompts + tools + geração guiada lidam com a maioria dos casos de uso para os quais o modelo on-device foi projetado. A especialização é a última alavanca, não a primeira. - Escolha
.contentTaggingapenas quando o formato documentado da Apple couber. Tópicos, ações, objetos, emoções. Tags em minúsculas com uma a poucas palavras. Restrições no nível demaximumCount. Qualquer coisa além disso, recue. - Leia as regras “use general instead” da Apple. São quatro frases concretas no guia contentTagging.5 Cada uma é um limite real.
- O caminho do adapter customizado é uma decisão separada. Superfície diferente, ciclo de vida diferente, post diferente.
O cluster Apple Ecosystem completo: o LLM on-device e o protocolo Tool para os primitivos do framework; a divisão do fluxo agentic entre LLMs in-app e de developer-tooling; App Intents vs MCP para a questão de roteamento entre os três. O hub está em Apple Ecosystem Series. Para um contexto mais amplo de iOS com agentes de IA, veja o iOS Agent Development guide.
FAQ
Quantos valores existem em SystemLanguageModel.UseCase?
Duas propriedades estáticas conforme documentação atual: .general e .contentTagging.3 Se você vir um terceiro valor referenciado em um tutorial ou em uma resposta gerada por LLM, verifique-o em developer.apple.com antes de adotá-lo.
Quando devo usar .contentTagging em vez de apenas fazer prompt em .general?
Use .contentTagging quando a tarefa for identificar tópicos, ações, objetos ou emoções no texto de entrada e retornar tags curtas em minúsculas. O guia da Apple lista quatro cenários em que .general é a resposta correta: tagging que não se encaixa nessas quatro categorias, geração de hashtags, pipelines de tags que passam por tool calls e restrições de tagging mais ricas do que maximumCount.5
O modelo contentTagging aceita instruções arbitrárias como o modelo geral aceita?
Ele aceita instruções, mas o design do modelo é avaliar a entrada em vez de responder a queries no estilo de usuário. O guia da Apple observa que o modelo contentTagging “respects the output format you want, even in the absence of instructions”, então um formato @Generable com anotações @Guide carrega a restrição, não um prompt longo.5
Qual é a janela de contexto para o modelo on-device?
4.096 tokens para o modelo do sistema.4 A razão token por caractere é de aproximadamente três a quatro caracteres por token em inglês/espanhol/alemão e um token por caractere em japonês/chinês/coreano.4 O framework lança LanguageModelSession.GenerationError.exceededContextWindowSize(_:) quando a sessão excede o limite.4
Por que o código de exemplo da Apple chama SystemLanguageModel(useCase:) sem guardrails:?
A Apple documenta init(useCase:guardrails:) e publica código de exemplo de content tagging que chama SystemLanguageModel(useCase: .contentTagging). Não verifiquei o parâmetro guardrails com valor padrão compilando contra o SDK do iOS 26.15
Referências
-
Apple Developer, “SystemLanguageModel”. A declaração da classe, anotações de disponibilidade, versões do modelo, propriedade
.default, cases do enumAvailabilitye o initializer de conveniênciainit(useCase:guardrails:). Recuperado em 2026-05-04. ↩↩↩↩↩↩↩↩ -
Apple Developer, “Loading and using a custom adapter with Foundation Models” e o entitlement
com.apple.developer.foundation-model-adapter. O trilho de adapter customizado é coberto em um post de continuação sobre o ciclo de vida gerenciado pelo desenvolvedor. ↩ -
Apple Developer, “SystemLanguageModel.UseCase”. As propriedades estáticas da struct:
static let generalestatic let contentTagging. Recuperado em 2026-05-04. ↩↩↩↩↩↩ -
Apple Developer, “Generating content and performing tasks with Foundation Models”. Tabelas de capacidades, tamanho da janela de contexto, tipo de erro. Recuperado em 2026-05-04. ↩↩↩↩↩↩↩↩
-
Apple Developer, “Categorizing and organizing data with content tags”. Descrição comportamental do modelo contentTagging, código de exemplo e as quatro regras explícitas “use general instead”. Recuperado em 2026-05-04. ↩↩↩↩↩↩↩↩↩↩↩↩