Foundation Models aus Python heraus: das fm CLI
Ein Jahr lang lebte Apples großes Sprachmodell für den Einsatz auf dem Gerät hinter einer Mauer: Erreichbar war es nur aus Swift heraus, nur innerhalb einer App, die Sie in Xcode gebaut hatten1. macOS 27 reißt diese Mauer ein. Apple liefert nun ein Kommandozeilenwerkzeug namens fm vorinstalliert mit dem Betriebssystem aus, dazu ein Foundation Models SDK für Python, das Sie mit pip installieren1. Das Modell, das früher ein Projekt, einen Build und eine LanguageModelSession in kompiliertem Swift erforderte, beantwortet nun einen einzeiligen Shell-Befehl und läuft in einem Jupyter-Notebook. Eric Gourlaouen, Entwickler im Team des Foundation Models Framework, brachte den Wandel in WWDC26-Session 334 schlicht auf den Punkt: „Bis jetzt waren diese Modelle nur aus Swift-Code heraus verfügbar”1. Die Veränderung ist kein neues Modell. Die Veränderung ist, dass sich genau dasselbe On-Device-Modell plötzlich auch außerhalb einer App skripten, automatisieren und evaluieren lässt – ohne API-Schlüssel und ohne Cloud-Kosten1.
fm und ein Foundation Models SDK für Python.
Kurzfassung
- macOS 27 liefert
fmmit, ein vorinstalliertes Kommandozeilenwerkzeug für das On-Device-Modell Apple Foundation Model. Zu seinen Unterbefehlen gehörenrespond(einmaliger Prompt nach stdout),chat(interaktive Sitzung) undschema(strukturierte Ausgabe definieren)1. fm respondbietet Optionen für das Modell (Wechsel zu Private Cloud Compute), eine Bildeingabe und ein Schema für strukturierte Ausgabe;--helplistet die übrigen auf1.- Das Python SDK erreicht dasselbe On-Device-Modell aus Python heraus; es setzt Python 3.10 oder neuer, ein installiertes Xcode sowie einen Mac mit Apple Silicon voraus und wird über
pipoder einen anderen Paketmanager installiert1. - Das SDK spiegelt das Swift-Framework: eine
LanguageModelSession, auf der Sierespondaufrufen, Tool-Aufrufe sowie Guided Generation über den Dekoratorfm.generable, derfm.respondals generating-Argument übergeben wird1. - Beide Oberflächen verwenden standardmäßig das stets verfügbare On-Device-Modell und können auf das größere Private-Cloud-Compute-Modell umschalten, das leistungsfähiger ist, aber Nutzungslimits mit sich bringt1.
- Der Gewinn liegt im Prototyping und in der Automatisierung: Shell-Skripte, die Dateien nach Bedeutung sortieren, und Python-Evaluierungspipelines, die Prompt-Varianten mit Pandas und matplotlib bewerten1.
Das Kommandozeilenwerkzeug fm
Öffnen Sie das Terminal unter macOS 27 und tippen Sie fm, gibt das Werkzeug die unterstützten Befehle aus1. Apple hebt drei davon hervor. fm respond schickt einen Prompt an das Modell und gibt eine Antwort zurück. fm chat startet eine interaktive Unterhaltung. fm schema erzeugt ein Schema für strukturierte Ausgabe1. Die denkbar einfachste Anwendung ist die, die Eric als Erstes vorführte: fm respond tippen, einen Prompt eingeben, Enter drücken und kurz darauf die Antwort des Modells im Terminal lesen1.
fm listet die verfügbaren Befehle auf.
Die beiden Top-Level-Befehle teilen sich entlang einer klaren Linie: Erkundung gegen Skripting. fm chat dient dazu, ein erstes Gespür für das Modell zu bekommen. Sie stellen eine Frage, hängen eine Rückfrage an, und die Unterhaltung bleibt erhalten – mit eigenen Slash-Befehlen: /model schaltet die Unterhaltung auf das Private-Cloud-Compute-Modell um, und /save speichert die Unterhaltung, um sie später fortzusetzen1. Wenn Sie lieber eine inline verarbeitbare Antwort hätten, etwa in einem Skript, greifen Sie stattdessen zu fm respond, das die Ausgabe des Modells nach stdout schreibt1.
Bei fm respond sind die Optionen zu Hause. Drei davon nannte Eric ausdrücklich. Eine Modelloption schickt den Prompt an das Private-Cloud-Compute-Modell statt an das On-Device-Modell, das standardmäßig zum Einsatz kommt. Eine Bildoption fügt dem Prompt ein Bild hinzu. Und eine Schemaoption arbeitet mit fm schema object zusammen, um die Ausgabe auf eine von Ihnen definierte Struktur einzuschränken1. Er wies darauf hin, dass es weitere gibt, und verwies auf die Hilfeoption, die sie alle auflistet1. Das Transkript benennt die Optionen eher nach ihrer Rolle als nach der exakten Schreibweise des jeweiligen Flags (die einzige wörtlich auf dem Bildschirm gezeigte Form ist fm schema object); wo ich eine Option unten beschreibe, beschreibe ich also das dokumentierte Verhalten und erfinde keinen Flag-String.
Die Modellwahl ist die Entscheidung, auf die es am meisten ankommt. Standardmäßig nutzt fm das On-Device-Modell, das mit macOS ausgeliefert wird und stets verfügbar ist1. Sie können auf das Apple Foundation Model auf Private Cloud Compute wechseln, das Eric als „ein viel größeres Modell als das On-Device-Modell, sodass es bei komplexen Problemen besser abschneidet” beschrieb – mit dem Kompromiss, dass es Nutzungslimits mit sich bringt1. Der Standard ist der richtige Ausgangspunkt: kostenlos, lokal und ohne Obergrenze. Auf Private Cloud Compute steigen Sie erst dann um, wenn eine Aufgabe wirklich schwer genug ist, um es zu rechtfertigen.
Ein Automatisierungsskript bauen
Die Demo zum Sortieren von Dateien ist das deutlichste Argument dafür, warum ein CLI zählt. Eric hatte einen Projektordner voller Entwurfs- und Endversionen von Assets und wollte ein wiederholbares Skript, das die Endversionen behält, sie sichert und die Entwürfe auf eine Archivfestplatte verschiebt1. Der schwierige Teil ist nicht das Verschieben von Dateien. Der schwierige Teil ist die Entscheidung, welche Datei ein Entwurf ist, wenn die Namen unaufgeräumt sind. Wie er es formulierte: Der Aufruf eines Sprachmodells aus dem Skript heraus lässt es „Entwurfs- gegen Endversionen sortieren”, selbst wenn „die Namen unaufgeräumt sind und sich nur schwer vorhersehbar sortieren lassen”1.
Die Form lässt sich auf jede Automatisierung verallgemeinern, die ein „Urteil über eine Liste” verlangt. Das Skript lädt die Dateien im Arbeitsverzeichnis und fordert das Modell dann über fm respond auf, diese Liste in zwei Gruppen zu sortieren: Endversionen und Entwurfsversionen1. Um die Ausgabe verwendbar zu machen, definiert es vorab ein Schema mit fm schema object, das zwei Felder beschreibt – eine Liste der Endversionen und eine Liste der Entwürfe –, und übergibt dieses Schema über die Schemaoption an fm respond1. Das Modell liefert seine Antwort als JSON zurück, und das Skript liest sie aus, um die Endversionen in ein Backup zu kopieren und die Entwürfe ins Archiv zu verschieben1.
Der Schritt mit der strukturierten Ausgabe ist der tragende. Eine Freitextantwort würde das Skript zwingen, Prosa zu parsen – der brüchige Teil jeder Shell-Pipeline, die mit einem LLM spricht. Indem das Skript das Schema mit fm schema object deklariert und JSON zurückbekommt, erhält es einen Vertrag, auf dessen Grundlage es unmittelbar handeln kann1. Das Muster ist genau dasjenige, das Swift-Entwickler als Guided Generation kennen, hier als CLI-Option freigelegt1. Jede Aufgabe, die in „mit der Entscheidung des Modells etwas Deterministisches tun” mündet, verlangt genau diese Form: Prompt, Schema, JSON, handeln.
Das Python SDK
Die zweite Oberfläche richtet sich an eine andere Person in einem anderen Moment. Wie Eric es formulierte: „Wenn Sie Machine-Learning-Ingenieur sind, nutzen Sie vielleicht mehr Python als Swift”, und das SDK „macht es leicht, das On-Device-Modell in Ihrem Python-Code zu verwenden”1. Das Argument stützt sich auf Pythons Ökosystem: „Python verfügt über ein reiches Ökosystem an Open-Source-Paketen für Machine Learning und Data Science”, was bedeutet, dass Sie Evaluierungspipelines schreiben und „diese Pakete nutzen können, um die Qualität Ihrer Funktion zu quantifizieren”1.
Die Installation hat vier Voraussetzungen, alle in der Session genannt. Sie benötigen Python 3.10 oder neuer, ein installiertes Xcode sowie einen Mac mit Apple Silicon, und Sie installieren das SDK über pip oder einen beliebigen anderen Paketmanager Ihrer Wahl1. Die Voraussetzungen Apple Silicon und Xcode sind das Indiz dafür, dass das Paket eine Anbindung an genau dasselbe On-Device-Modell ist, das das Betriebssystem ausführt, und keine gehostete API.
Die API wird sich jedem vertraut anfühlen, der das Swift-Framework genutzt hat2 – und zwar absichtlich: „Die APIs und Abstraktionen werden sich schnell vertraut anfühlen”1. Sie schicken einen Prompt, indem Sie eine LanguageModelSession erstellen, optional Instruktionen übergeben und dann session.respond mit Ihrem Prompt aufrufen; das Ergebnis enthält die Ausgabe des Modells1. Das SDK überträgt die Kernfunktionen des Frameworks: Text- und Bildeingaben, gestreamte Antworten, Tool-Aufrufe, damit das Modell mit Ihrem Code interagieren kann, sowie Guided Generation für strukturierte Ausgabe1.
LanguageModelSession erstellen, respond aufrufen, ein Tool bereitstellen, das jüngste Bestellungen abruft, und die Ausgabe mit dem Dekorator fm.generable einschränken.
Zwei dieser Funktionen wurden konkret behandelt. Für Tool-Aufrufe definierte Eric ein Tool, das das Modell aufrufen kann, um die letzten Bestellungen eines Nutzers abzurufen, „damit es persönlichere Informationen liefern kann” – dasselbe Muster wie das Tool-Protokoll des Swift-Frameworks1. Für Guided Generation nutzte er den Dekorator fm.generable, um die gewünschte Ausgabestruktur zu definieren, ein ItemsSuggestion-Objekt, und übergab es fm.respond als generating-Argument1. Der Dekorator ist das Python-Pendant zu Swifts @Generable-Makro, und das generating-Argument ist der Weg, über den Sie dem Modell die gewünschte Rückgabeform mitgeben. Da das Transkript diese eher nach Rolle und Objektnamen zeigt, als den vollständigen Klassenrumpf abzudrucken, behandeln Sie ItemsSuggestion als den Namen, den das Beispiel einer Struktur gibt, die Sie selbst definieren würden.
Evaluierungspipelines: der eigentliche Grund, Python zu nutzen
Die Fallstudie ist der Punkt, an dem das Python SDK aufhört, bloß bequem zu sein, und zur Methode wird. Eric baute eine Funktion, die vorhersagen soll, was ein Nutzer in seinen Einkaufswagen legen möchte, und er hatte drei verschiedene Prompt-Implementierungen: eine minimale, eine ausführlichere und eine detaillierte, die eine vollständige Liste von Regeln ausbuchstabierte1. Die Frage, vor der jeder Prompt-Entwickler steht, lautet, welche tatsächlich die beste ist, und die ehrliche Antwort verlangt Messung, nicht Geschmack.
Apple sagt deutlich, dass Swift-Entwickler hier ihre eigene Antwort haben. Das Evaluations-Framework wird mit Xcode 27 ausgeliefert und macht es leicht, Evaluierungen zu erstellen und die Genauigkeit einer Funktion über mehrere Iterationen hinweg zu verfolgen1. Das Python SDK ist der parallele Weg für Data Scientists, die in Notebooks zu Hause sind. Eric führte die gesamte Analyse aus Jupyter heraus durch1.
Die Pipeline liest sich wie eine standardmäßige ML-Evaluierungsschleife, gerichtet auf das On-Device-Modell. Zuerst nutzte er ein großes Servermodell, um Evaluierungsdaten zu erzeugen, was ihm für jeden Fall eine Eingabe und eine erwartete Ausgabe lieferte1. Dann erzeugte er für jede Eingabe Ausgaben aus jeder der drei Prompt-Implementierungen und legte die Ein- und Ausgaben als Zeilen in einem Pandas DataFrame ab1. Anschließend bewerteten Judge-Funktionen, gestützt auf ein Servermodell, jede Ausgabe anhand von Kriterien, die er gewählt hatte, und diese Metriken wanderten zurück in den DataFrame1. Schließlich verwandelte matplotlib die Bewertungen in Diagramme1.
Die Diagramme erzählten eine Geschichte, die kein noch so langes Starren auf die Prompts ans Licht gebracht hätte: Der detaillierte Prompt erreichte eine hohe Rate an Generierungsfehlern, was Eric darauf zurückführte, dass die maximale Kontextfenstergröße des Modells erreicht wurde; die beiden weniger detaillierten Prompts fügten dem Wagen überzählige Artikel hinzu, während der detaillierte weniger hinzufügte; der detaillierte Prompt übersah mehr der erwarteten Artikel; und der minimale Prompt halluzinierte die meisten Artikel1. Jeder Prompt hatte einen anderen Fehlermodus, und erst die Messung brachte sie zum Vorschein. Das ist das Argument für den gesamten Ansatz. „Mit Python kann ich diese Iterationen schnell direkt aus meinem Notebook heraus vornehmen, ohne das ganze Projekt neu bauen zu müssen”, sagte Eric1.
Wann Sie zu welchem greifen sollten
Aus den Verträgen oben folgen ein paar Regeln.
Greifen Sie zu fm respond, wenn ein Shell-Skript eine Urteilsentscheidung braucht. Unaufgeräumte Dateinamen sortieren, eine Eingabezeile klassifizieren, ein Feld aus unstrukturiertem Text extrahieren. Kombinieren Sie es mit fm schema object und der Schemaoption, damit das Skript auf Grundlage von JSON handelt, statt Prosa zu parsen1.
Greifen Sie zu fm chat, wenn Sie erkunden, nicht skripten. Es ist der schnellste Weg, um ein erstes Gespür dafür zu bekommen, wie das Modell mit Ihren Prompts umgeht – mit /model, um auf Private Cloud Compute hochzuschalten, und /save, um eine Sitzung zu behalten1.
Greifen Sie zum Python SDK, wenn Sie messen wollen, nicht bloß aufrufen. In dem Moment, in dem Sie mehr als einen Prompt haben und wissen müssen, welcher besser ist, ist die Schleife aus Notebook plus Pandas plus matplotlib das Werkzeug der Wahl, denn das On-Device-Modell ist kostenlos und lokal genug, um einen kompletten Evaluierungssatz ohne Rechnung durchlaufen zu lassen1.
Bleiben Sie standardmäßig beim On-Device-Modell; steigen Sie bewusst auf Private Cloud Compute um. Das On-Device-Modell ist stets verfügbar und hat kein Nutzungslimit. Private Cloud Compute ist größer und bei komplexen Problemen besser, bringt aber Nutzungslimits mit sich – heben Sie es sich also für die Aufgaben auf, die es verdienen1.
Prototypen hier, ausliefern in Swift. Erics eigene Darstellung ist, dass Sie diese Werkzeuge „neben Ihrem Xcode-Projekt einsetzen können, als eine Möglichkeit, Prompts zu prototypisieren und zu evaluieren”, oder „für sich allein, um das Modell auf neuartige Weise zu nutzen”1. Das Beispiel der Einkaufs-App prototypisiert Prompts in Python, „bevor sie in Swift implementiert werden”1. Das CLI und das SDK verkürzen die Schleife zwischen Idee und Beleg; die App ist nach wie vor der Ort, an dem die Funktion landet.
FAQ
Was ist das Kommandozeilenwerkzeug fm?
fm ist ein Kommandozeilenwerkzeug, das mit macOS 27 vorinstalliert ausgeliefert wird und das On-Device-Modell Apple Foundation Model aus der Terminal-App heraus erreicht1. Zu seinen Unterbefehlen gehören respond, um das Modell zu prompten und eine Antwort auszugeben, chat, um eine interaktive Unterhaltung zu starten, und schema, um strukturierte Ausgabe zu definieren. Sie führen es ohne API-Schlüssel und ohne Cloud-Kosten aus, weil das Standardmodell auf dem Gerät läuft1.
Wie bekomme ich strukturiertes JSON aus fm heraus?
Definieren Sie ein Schema mit fm schema object und übergeben Sie dieses Schema dann über seine Schemaoption an fm respond. Das Modell liefert seine Antwort als JSON zurück, das dem Schema entspricht und auf dessen Grundlage ein Skript unmittelbar handeln kann, statt Freitext zu parsen1. Der Mechanismus ist die CLI-Variante der Guided Generation des Frameworks1.
Was setzt das Foundation Models Python SDK voraus?
Python 3.10 oder neuer, ein installiertes Xcode sowie einen Mac mit Apple Silicon1. Sie installieren es über pip oder einen anderen Paketmanager Ihrer Wahl. Die Voraussetzungen Apple Silicon und Xcode spiegeln wider, dass das SDK an genau dasselbe On-Device-Modell anbindet, das das Betriebssystem ausführt, statt eine gehostete API aufzurufen1.
Wie unterscheidet sich das Python SDK vom Swift-Framework?
Es ist dasselbe Modell und eine bewusst vertraute API in einer anderen Sprache. Sie erstellen eine LanguageModelSession, rufen respond auf, stellen Tools bereit und nutzen Guided Generation über den Dekorator fm.generable, der fm.respond als generating-Argument übergeben wird1. Der Grund, Python zu wählen, ist das Ökosystem: Pandas, matplotlib, Jupyter und der Rest des Data-Science-Stacks für Evaluierungspipelines, die Swift nicht so direkt erreicht1.
Wann sollte ich Private Cloud Compute statt des On-Device-Modells verwenden?
Sowohl fm als auch das SDK verwenden standardmäßig das On-Device-Modell, das stets verfügbar ist und kein Nutzungslimit hat1. Wechseln Sie über die Modelloption von fm respond oder den Befehl /model von fm chat zu Private Cloud Compute, wenn ein Problem komplex genug ist, um das größere Modell zu benötigen – im Bewusstsein, dass es Nutzungslimits mit sich bringt1.
Das vollständige Apple-Ecosystem-Cluster: die Erläuterung zum Foundation Models Framework für das Swift-Fundament, das diese Werkzeuge spiegeln; die Tool-Aufruf-Steuerung in iOS 27 dazu, wie das Modell Tools nutzt; der agentische Workflow mit Foundation Models zur Wahl zwischen On-Device- und größerem Modell; und die Coding-Agenten von Xcode 27 für die IDE-Seite eines agentenlastigen Workflows. Der Knotenpunkt liegt bei der Apple Ecosystem Series. Für das größere Bild des Bauens von iOS mit Agenten siehe den Leitfaden zur iOS-Agentenentwicklung.
-
Apple, WWDC26-Session 334, „Build AI-powered scripts with the fm CLI and Python SDK”, präsentiert von Eric Gourlaouen aus dem Team des Foundation Models Framework. developer.apple.com/videos/play/wwdc2026/334. Quelle für: das mit macOS 27 vorinstallierte Werkzeug
fmund seine Unterbefehlerespond,chatundschema; die Befehle/modelund/savevonfm chat; die Modell-, Bild-, Schema- und Hilfeoptionen vonfm respond;fm schema objectzur Definition strukturierter Ausgabe und der JSON-Ergebnisvertrag; das Automatisierungsskript zum Sortieren von Dateien; die Wahl zwischen On-Device- und Private-Cloud-Compute-Modell sowie die Nutzungslimits des letzteren; die Voraussetzungen des Python SDK (Python 3.10+, Xcode, Apple Silicon, Installation über pip);LanguageModelSession,session.respond, Tool-Aufrufe und Guided Generation über den Dekoratorfm.generable, derfm.respondals generating-Argument übergeben wird; die Evaluierungspipeline aus Jupyter/Pandas/matplotlib, die drei Prompt-Varianten, die von einem Servermodell gestützten Judge-Funktionen und die Fehlermodi je Prompt (Generierungsfehler beim Erreichen des maximalen Kontextfensters, überzählige Artikel, übersehene Artikel, halluzinierte Artikel); der Verweis auf das Evaluations-Framework von Xcode 27; und die Darstellung „in Python prototypisieren, bevor man es in Swift implementiert”. Das GitHub-Repository des Python SDK mit Beispielausschnitten und Dokumentation wird in der Session erwähnt, aber auf dem Bildschirm wird keine URL gezeigt, daher wird es beschrieben statt verlinkt. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple Developer, Überblick über das Framework „Foundation Models”. Das Swift-Framework aus der WWDC25, das das On-Device-Modell Apple Foundation Model,
LanguageModelSession, Guided Generation und dasTool-Protokoll einführte, die dasfmCLI und das Python SDK auf macOS 27 spiegeln. ↩