View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Toutes les vidéos
  • À propos

Plus de vidéos

  • À propos
  • Résumé
  • Code
  • Voici le framework Foundation Models

    Découvrez comment exploiter le grand modèle de langage contenu dans l'appareil qui sous-tend Apple Intelligence ! Cette vue d'ensemble couvre tout, de la génération guidée pour générer des structures de données Swift et du streaming pour des expériences réactives, aux appels d'outils pour l'intégration des sources de données et aux séances pour la gestion du contexte. Cette séance n'a pas de prérequis.

    Chapitres

    • 0:00 - Introduction
    • 2:05 - Le modèle
    • 5:20 - Génération guidée
    • 7:45 - Streaming instantané
    • 11:28 - Appel d’outils
    • 16:11 - Séance avec état
    • 21:02 - Expérience de développement

    Ressources

    • Human Interface Guidelines: Generative AI
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Code-along : Intégrez l’IA contenue sur l’appareil à votre app à l’aide du framework de Foundation Models
    • Découvrir les frameworks d’apprentissage automatique et d’IA sur les plates-formes Apple
    • Explorez la conception rapide et la sécurité pour les modèles de fondation sur l’appareil
    • Présentation approfondie du framework de Foundation Models
  • Rechercher dans cette vidéo…
    • 2:28 - Playground - Trip to Japan

      import FoundationModels
      import Playgrounds
      
      #Playground {
          let session = LanguageModelSession()
          let response = try await session.respond(to: "What's a good name for a trip to Japan? Respond only with a title")
      }
    • 2:43 - Playground - Loop over landmarks

      import FoundationModels
      import Playgrounds
      
      #Playground {
          let session = LanguageModelSession()
          for landmark in ModelData.shared.landmarks {
              let response = try await session.respond(to: "What's a good name for a trip to \(landmark.name)? Respond only with a title")
          }
      }
    • 5:32 - Creating a Generable struct

      // Creating a Generable struct
      
      @Generable
      struct SearchSuggestions {
          @Guide(description: "A list of suggested search terms", .count(4))
          var searchTerms: [String]
      }
    • 5:51 - Responding with a Generable type

      // Responding with a Generable type
      
      let prompt = """
          Generate a list of suggested search terms for an app about visiting famous landmarks.
          """
      
      let response = try await session.respond(
          to: prompt,
          generating: SearchSuggestions.self
      )
      
      print(response.content)
    • 6:18 - Composing Generable types

      // Composing Generable types
      
      @Generable struct Itinerary {
          var destination: String
          var days: Int
          var budget: Float
          var rating: Double
          var requiresVisa: Bool
          var activities: [String]
          var emergencyContact: Person
          var relatedItineraries: [Itinerary]
      }
    • 9:20 - PartiallyGenerated types

      // PartiallyGenerated types
      
      @Generable struct Itinerary {
          var name: String
          var days: [Day]
      }
    • 9:40 - Streaming partial generations

      // Streaming partial generations
      
      let stream = session.streamResponse(
          to: "Craft a 3-day itinerary to Mt. Fuji.",
          generating: Itinerary.self
      )
      
      for try await partial in stream {
          print(partial)
      }
    • 10:05 - Streaming itinerary view

      struct ItineraryView: View {
          let session: LanguageModelSession
          let dayCount: Int
          let landmarkName: String
        
          @State
          private var itinerary: Itinerary.PartiallyGenerated?
        
          var body: some View {
              //...
              Button("Start") {
                  Task {
                      do {
                          let prompt = """
                              Generate a \(dayCount) itinerary \
                              to \(landmarkName).
                              """
                        
                          let stream = session.streamResponse(
                              to: prompt,
                              generating: Itinerary.self
                          )
                        
                          for try await partial in stream {
                              self.itinerary = partial
                          }
                      } catch {
                          print(error)  
                      }
                  }
              }
          }
      }
    • 11:00 - Property order matters

      @Generable struct Itinerary {
        
        @Guide(description: "Plans for each day")
        var days: [DayPlan]
        
        @Guide(description: "A brief summary of plans")
        var summary: String
      }
    • 13:42 - Defining a tool

      // Defining a tool
      import WeatherKit
      import CoreLocation
      import FoundationModels
      
      struct GetWeatherTool: Tool {
          let name = "getWeather"
          let description = "Retrieve the latest weather information for a city"
      
          @Generable
          struct Arguments {
              @Guide(description: "The city to fetch the weather for")
              var city: String
          }
      
          func call(arguments: Arguments) async throws -> ToolOutput {
              let places = try await CLGeocoder().geocodeAddressString(arguments.city)
              let weather = try await WeatherService.shared.weather(for: places.first!.location!)
              let temperature = weather.currentWeather.temperature.value
      
              let content = GeneratedContent(properties: ["temperature": temperature])
              let output = ToolOutput(content)
      
              // Or if your tool’s output is natural language:
              // let output = ToolOutput("\(arguments.city)'s temperature is \(temperature) degrees.")
      
              return output
          }
      }
    • 15:03 - Attaching tools to a session

      // Attaching tools to a session
      
      let session = LanguageModelSession(
          tools: [GetWeatherTool()],
          instructions: "Help the user with weather forecasts."
      )
      
      let response = try await session.respond(
          to: "What is the temperature in Cupertino?"
      )
      
      print(response.content)
      // It’s 71˚F in Cupertino!
    • 16:30 - Supplying custom instructions

      // Supplying custom instructions
      
      let session = LanguageModelSession(
          instructions: """
              You are a helpful assistant who always \
              responds in rhyme.
              """
      )
    • 17:46 - Multi-turn interactions

      // Multi-turn interactions
      
      let session = LanguageModelSession()
      
      let firstHaiku = try await session.respond(to: "Write a haiku about fishing")
      print(firstHaiku.content)
      // Silent waters gleam,
      // Casting lines in morning mist—
      // Hope in every cast.
      
      let secondHaiku = try await session.respond(to: "Do another one about golf")
      print(secondHaiku.content)
      // Silent morning dew,
      // Caddies guide with gentle words—
      // Paths of patience tread.
      
      print(session.transcript)
// (Prompt) Write a haiku about fishing
      // (Response) Silent waters gleam...
      // (Prompt) Do another one about golf
      // (Response) Silent morning dew...
    • 18:22 - Gate on isResponding

      import SwiftUI
      import FoundationModels
      
      struct HaikuView: View {
      
          @State
          private var session = LanguageModelSession()
      
          @State
          private var haiku: String?
      
          var body: some View {
              if let haiku {
                  Text(haiku)
              }
              Button("Go!") {
                  Task {
                      haiku = try await session.respond(
                          to: "Write a haiku about something you haven't yet"
                      ).content
                  }
              }
              // Gate on `isResponding`
              .disabled(session.isResponding)
          }
      }
    • 18:39 - Using a built-in use case

      // Using a built-in use case
      
      let session = LanguageModelSession(
          model: SystemLanguageModel(useCase: .contentTagging)
      )
    • 19:19 - Content tagging use case - 1

      // Content tagging use case
      
      @Generable
      struct Result {
          let topics: [String]
      }
      
      let session = LanguageModelSession(model: SystemLanguageModel(useCase: .contentTagging))
      let response = try await session.respond(to: ..., generating: Result.self)
    • 19:35 - Content tagging use case - 2

      // Content tagging use case
      
      @Generable
      struct Top3ActionEmotionResult {
          @Guide(.maximumCount(3))
          let actions: [String]
          @Guide(.maximumCount(3))
          let emotions: [String]
      }
      
      let session = LanguageModelSession(
          model: SystemLanguageModel(useCase: .contentTagging),
          instructions: "Tag the 3 most important actions and emotions in the given input text."
      )
      let response = try await session.respond(to: ..., generating: Top3ActionEmotionResult.self)
    • 19:56 - Availability checking

      // Availability checking
      
      struct AvailabilityExample: View {
          private let model = SystemLanguageModel.default
      
          var body: some View {
              switch model.availability {
              case .available:
                  Text("Model is available").foregroundStyle(.green)
              case .unavailable(let reason):
                  Text("Model is unavailable").foregroundStyle(.red)
                  Text("Reason: \(reason)")
              }
          }
      }
    • 22:13 - Encodable feedback attachment data structure

      let feedback = LanguageModelFeedbackAttachment(
        input: [
          // ...
        ],
        output: [
          // ...
        ],
        sentiment: .negative,
        issues: [
          LanguageModelFeedbackAttachment.Issue(
            category: .incorrect,
            explanation: "..."
          )
        ],
        desiredOutputExamples: [
          [
            // ...
          ]
        ]
      )
      let data = try JSONEncoder().encode(feedback)
    • 0:00 - Introduction
    • Le framework de Foundation Models vous donne accès à un grand modèle de langage local sur macOS, iOS, iPadOS et visionOS. Il permet de créer des fonctionnalités personnalisées, comme des suggestions de recherche, des itinéraires ou des dialogues au sein du jeu, tout en préservant la confidentialité, les données restant sur l’appareil et étant traitées hors ligne. Le framework est optimisé pour la génération de contenu, le résumé de texte et l’analyse des saisies utilisateur. Pour accompagner les développeurs, Apple a préparé une série de vidéos couvrant une présentation du framework, la génération guidée, les API de streaming, l’appel d’outils, la gestion multi-turn et l’intégration fluide dans l’écosystème des développeurs Apple.

    • 2:05 - Le modèle
    • La nouvelle fonctionnalité Playgrounds de Xcode est idéale pour expérimenter les requêtes envoyées au grand modèle de langage local. En quelques lignes de code, vous pouvez tester des prompts et voir les réponses du modèle en temps réel. Le modèle local, avec ses 3 milliards de paramètres, est optimisé pour le résumé, l’extraction et la classification, mais pas pour la connaissance générale ni le raisonnement avancé. Décomposez les tâches en petits morceaux pour maximiser son efficacité. La génération guidée, composant central du framework FoundationModels, facilite l’intégration des résultats du modèle dans les apps. Elle permet de créer des fonctionnalités plus fiables grâce à une approche structurée, dépassant les limites des formats comme JSON ou CSV générés par le modèle.

    • 5:20 - Génération guidée
    • Avec l’importation de FoundationModels, deux nouvelles macros, @Generable et @Guide sont introduites. @Generable permet de décrire des types pour des instances générées par le modèle, pouvant être construites à partir de types primitifs, tableaux, ou types composés et récursifs. @Guide fournit des descriptions en langage naturel des propriétés et contrôle les valeurs générées, garantissant la validité structurelle via un décodage contraint. Cette approche de génération guidée simplifie les prompts, améliore la précision du modèle et accélère l’inférence. Elle vous permet de recevoir directement des objets Swift riches depuis le modèle, facilement exploitables dans des vues, sans avoir à spécifier le format de sortie dans le prompt.

    • 7:45 - Streaming instantané
    • Le framework FoundationModels diffère du streaming delta traditionnel basé sur les jetons pour les grands modèles de langage. Il diffuse plutôt des instantanés (des réponses partiellement générées avec des propriétés optionnelles) plus robustes et pratiques pour gérer des sorties structurées. Cette approche exploite la macro @Generable, qui produit un type PartiallyGenerated reflétant la structure extérieure avec des propriétés facultatives. La méthode streamResponse renvoie une séquence asynchrone de ces types partiellement générés, permettant une intégration fluide avec des frameworks déclaratifs comme SwiftUI. Utilisez les animations et les transitions SwiftUI pour améliorer l’expérience utilisateur lors du streaming. Gérer l’identité des vues et l’ordre des propriétés est crucial pour un résultat optimal.

    • 11:28 - Appel d’outils
    • L’appel d’outils permet à un modèle d’IA d’exécuter du code personnalisé dans une app, augmentant ses capacités. Cette fonctionnalité permet au modèle de décider seul quand utiliser des outils externes pour récupérer des infos ou effectuer des actions, comme rechercher des restaurants, des hôtels ou la météo, selon le contexte de la demande. Le modèle peut s’intégrer à diverses sources fiables, comme MapKit, pour fournir des infos précises et à jour. Ce processus implique que le modèle génère des appels d’outils, automatiquement exécutés par le framework FoundationModels, dont les résultats sont ensuite intégrés à la transcription de la conversation pour que le modèle puisse les utiliser dans sa réponse finale.

    • 16:11 - Séance avec état
    • Le framework de Foundation Models permet des sessions avec état avec un modèle généraliste local. Vous pouvez donner des instructions personnalisées pour guider le style et la concision des réponses, mais cela reste facultatif. Vous définissez vos instructions, distinctes des prompts utilisateur, et le modèle est entraîné à privilégier les instructions pour renforcer la sécurité. Pendant une session, le modèle garde le contexte des échanges, ce qui lui permet de comprendre et de faire référence aux messages précédents. La propriété transcript peut être utilisée pour inspecter ces interactions. Le framework inclut des cas d’usage spécialisés, comme l’adaptateur de balisage, qui gère la création de tags, l’extraction d’entités et la détection de sujets. Personnalisez ces adaptateurs selon vos besoins. Avant de créer une session, vérifiez que le modèle est disponible sur un appareil Apple Intelligence dans une zone géographique prise en charge. Une bonne gestion des erreurs est essentielle pour gérer les violations de sécurité, les langues non prises en charge et les dépassements de contexte.

    • 21:02 - Expérience de développement
    • L’outil Playgrounds permet d’itérer rapidement les prompts des grands modèles de langage dans tous types de projets d’app. Le nouveau modèle de profilage d’Instruments optimise la latence en repérant les points à améliorer dans les requêtes au modèle et la longueur des prompts. Nous vous encourageons à envoyer vos commentaires via l’Assistant d’évaluation.

Developer Footer

  • Vidéos
  • WWDC25
  • Voici le framework Foundation Models
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines