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
 

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Todos los videos
  • Información

Más videos

  • Información
  • Resumen
  • Código
  • Conoce la estructura Foundation Models

    Descubre cómo aprovechar el modelo de lenguaje de gran tamaño en el dispositivo detrás de Apple Intelligence. Esta descripción general de alto nivel abarca todo, desde la generación guiada para crear estructuras de datos Swift y transmisión para experiencias receptivas, hasta la llamada a herramientas para integrar fuentes de datos y sesiones para la administración del contexto. Esta sesión no tiene prerrequisitos.

    Capítulos

    • 0:00 - Introducción
    • 2:05 - El modelo
    • 5:20 - Generación guiada
    • 7:45 - Transmisión de instantáneas
    • 11:28 - Llamada de herramientas
    • 16:11 - Sesión con control de estado
    • 21:02 - Experiencia del desarrollador

    Recursos

    • Human Interface Guidelines: Generative AI
      • Video HD
      • Video SD

    Videos relacionados

    WWDC25

    • Codificación conjunta: Incorpora la IA en el dispositivo a tu app mediante la estructura Foundation Models
    • Descubre las estructuras de aprendizaje automático e IA en las plataformas de Apple
    • Explora el diseño rápido y la seguridad para los modelos base en el dispositivo
    • Profundización en la estructura Foundation Models
  • Buscar este video…
    • 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 - Introducción
    • El marco de modelos fundacionales te da acceso a un modelo de lenguaje de gran tamaño en el dispositivo para macOS, iOS, iPadOS y visionOS. Te permite crear funcionalidades personalizadas e innovadoras, como sugerencias de búsqueda, itinerarios y diálogos dentro del juego, priorizando la privacidad del usuario, ya que los datos permanecen en el dispositivo y funcionan sin conexión. Está optimizado para la generación de contenido, el resumen de texto y el análisis de entradas del usuario. Para ayudar a los desarrolladores, Apple preparó una serie de videos que abarcan un resumen del marco, la generación guiada, las API de transmisión, la llamada de herramientas, el soporte de varios turnos y la integración fluida en el ecosistema.

    • 2:05 - El modelo
    • La nueva funcionalidad Playgrounds de Xcode es el punto de partida ideal para experimentar con el modelo de lenguaje de gran tamaño en el dispositivo. Con solo unas líneas de código, puedes probar prompts y ver las respuestas del modelo en tiempo real. Aunque este modelo en el dispositivo es impresionante, con 3 mil millones de parámetros, está optimizado para tareas específicas, como resúmenes, extracciones y clasificaciones, y no es adecuado para el conocimiento general ni para el razonamiento avanzado. Divide las tareas en partes más pequeñas para maximizar su eficacia. La generación guiada, un componente central de la estructura FoundationModels, aborda el reto de integrar la salida del modelo en las apps. Esto permite crear funcionalidades de forma más confiable, ya que proporciona un enfoque estructurado para la generación de modelos, evitando así las limitaciones de depender del modelo para producir formatos fácilmente analizables, como JSON o CSV.

    • 5:20 - Generación guiada
    • Con la importación de FoundationModels, se introducen dos nuevas macros, @Generable y @Guide. @Generable permite describir tipos de instancias generadas por el modelo, que pueden construirse a partir de primitivas, matrices y tipos compuestos o recursivos. @Guide proporciona descripciones en lenguaje natural de las propiedades y controla los valores generados, lo que garantiza la corrección estructural a través de una decodificación restringida. Este enfoque de generación guiada simplifica las prompts, mejora la precisión del modelo y acelera la inferencia. Esto permite recibir objetos Swift enriquecidos desde el modelo, que pueden asignarse fácilmente a vistas atractivas, todo sin necesidad de especificar el formato de salida en la prompt.

    • 7:45 - Transmisión de instantáneas
    • La estructura FoundationModels se diferencia de la transmisión delta basada en tokens tradicional para modelos de lenguaje de gran tamaño. En su lugar, transmite instantáneas de respuestas parcialmente generadas con propiedades opcionales, que son más sólidas y convenientes para procesar una salida estructurada. Este enfoque aprovecha la macro @Generable, que produce un tipo PartiallyGenerated, reflejando la estructura externa con propiedades opcionales. El método streamResponse genera una secuencia asincrónica de estos tipos generados parcialmente, lo que permite una integración perfecta con estructuras declarativas como SwiftUI. Usa animaciones y transiciones de SwiftUI para mejorar la experiencia del usuario durante la transmisión. La consideración adecuada de la identidad de la vista y el orden de declaración de propiedad también es crucial para obtener resultados óptimos.

    • 11:28 - Llamada de herramientas
    • La llamada a herramientas permite que un modelo de IA ejecute códigos personalizados dentro de una app, mejorando sus capacidades. Esta funcionalidad permite al modelo decidir de forma autónoma cuándo usar herramientas externas para obtener información o realizar acciones, como consultar restaurantes, hoteles o datos del clima, según el contexto de la solicitud. El modelo puede integrarse en varias fuentes de información veraz, como MapKit, para proporcionar información precisa y actualizada. Este proceso implica llamadas a herramientas de generación de modelos, que luego la estructura FoundationModels ejecuta automáticamente, y los resultados se insertan nuevamente en la transcripción de la conversación con el fin de que el modelo los use para formular su respuesta final.

    • 16:11 - Sesión con control de estado
    • El marco de modelos fundacionales permite crear sesiones con control de estado, con un modelo de propósito general en el dispositivo. Puedes dar instrucciones personalizadas para guiar las respuestas, especificando el estilo y la verbosidad, aunque esto es opcional. Estableces tus instrucciones, que son distintas de las prompts del usuario, y el modelo obedece las instrucciones en lugar de las prompts para mejorar la seguridad. Dentro de una sesión, el modelo conserva el contexto en interacciones de varios turnos, lo que permite comprender y consultar prompts y respuestas anteriores. Con la propiedad de transcripción se pueden inspeccionar estas interacciones. La estructura también ofrece casos de uso especializados integrados, como el adaptador de etiquetado de contenido, que admite la generación de etiquetas, la extracción de entidades y la detección de temas. Personaliza estos adaptadores para necesidades específicas. Antes de crear una sesión, comprueba la disponibilidad del modelo, ya que solo puede ejecutarse en dispositivos compatibles con Apple Intelligence en las regiones admitidas. El manejo adecuado de errores también es esencial para administrar posibles problemas de seguridad, idiomas no compatibles o ventanas de contexto excedidas.

    • 21:02 - Experiencia del desarrollador
    • Playgrounds permite la iteración rápida de prompts para modelos de lenguaje de gran tamaño dentro de un proyecto de app, lo que te permite acceder a todos los tipos de proyectos. La nueva plantilla de creación de perfiles de la app Instruments ayuda a optimizar la latencia al identificar áreas de mejora en las solicitudes de modelos y la verbosidad de las prompts. Te invitamos a enviarnos tus comentarios a través de Feedback Assistant.

Developer Footer

  • Videos
  • WWDC25
  • Conoce la estructura 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