聴講メモ:次なる可能性:WWDC26発の注目の最新アップデート @Apple Japan

Apple Japan 開催の WWDC Recap イベントに今年も行ってきた。去年も何度も足を運んだ Cafe Macs だが、今年はなんと撮影可能となっていた(と思ったのだが去年も撮影可能だったとも聞いた)。

セッションの内容は、大きくアプリの体験を向上する要素(Intelligent / Integrated / Adaptable / Tools)を軸に、今年発表された内容の詳細を紹介するものだった。Intelligent、つまり Siri AI や Foundation Models については個人的には注目しキャッチアップしていたので良い復習になった。Integrated が興味深く、特に App Intents についてはそろそろきちんと学びたいと思っていたところ、やはり Siri AI の登場で真価を発揮する機能だと再認識した。というか、App Intents がシステム提供のサービス基盤とアプリとを繋ぐエンドポイント的役割、という説明が非常にしっくりきた。

WWDC で実施され、オンラインでも配信されていた「Group Lab」という取り組みを物理的に再現くださって、たくさんの質疑応答に Apple Japan のプレゼンターらが答えるコーナーもとても内容が充実していて良かったし、中でも今年の発表内容を受けて各自アプリ提供者がマストで対応するべきことも整理されて良かった。Liquid Glass 対応や UIApplicationDelegate の利用廃止ばかり注目されているが、何気にプラットフォーム横断でアプリが使えることによる「リサイズ対応」も、対応マストながら完全に見落としポイントだった。

メモもしたが超雑多で聞き取れない箇所は不正確の可能性もある、あくまで備忘録として書き残しておく。


  • Intelligent
    • 3つの条件
      • 条件1: Anticipate(先読み)
      • 条件2: Accelerate(短縮)
      • 条件3: Unlock(可能性を解放)
    • Apple Intelligence / Foundation Models
    • マルチモーダルで画像分析もできるようになった(e.g. 画像のキャプション生成)
      • Foundasion Models vs Vision
    • Private Cloud Compute / 要Small Business Program
      • 問題を段階的に処理するリーズニングにも対応
    • カスタムモデル
      • LLM 提供者の Swift パッケージから導入可能
      • そのほかのローカルのモデルも使える
      • MLX:新しいモデルのトレーニング
    • モデルの活用
      • フェーズごとのモデルの使い分け
        • ブレインストーミングなどの創造性を要するのでサーバーサイド
        • 計画:深い推論を要するのでサーバーサイド
        • レビュー:速応性が必要なのでオンデバイス
      • コンテクストを共有し、ハンドオーバーする複雑性の解決:Dynamic Profies
    • モデルの評価
      • Evaluations framework
  • Integrated:システムとの統合
    • e.g. Widget, Control Center, Live Activities, Spotlight…
    • 声だけでアプリを操作できるSiri AI
    • App Intents framework
      • システムの様々なサービスに対する共通基盤(Siri, Spotlight, Shortcuts…)
        • WebサイトでいうところのAPI的な役割
      • 基礎となるデータを Entities として用意する(予定の内容、メールの内容、写真)
      • App Schema と Entities を組み立てることで、Siri が共通概念を理解できるようになる(e.g. 各データに対して、連絡先、会話といったようにマッピングして理解できるようにする)
      • アクションも定義(インテントの実行)
        • Entities = データ、Intents = アプリができる機能(動詞)
    • 画面上のコンテクスト理解(On-screen awareness)
      • エンティティごとにアノテーションをつけることでSiriが理解可能になる
        • “the third” → View ごとにアノテーションをつける
    • ひとつのタスクを複数のアプリをまたいで流れるような体験が実現可能
      • Maps でピン留めしたレストラン→Note でメモ
    • Siri に学習させるラーニング機能
      • e.g. Send a mesage → Which app do you mean?
      • アプリが Siri に対して利用傾向を donation する(IntentDonationManager)
    • どこから始める?Domainから(system, phone, mail, clock… ドメインごとに事前に用意されたスキーマがある)
    • system.search というスキーマで、アプリの中のサーチに直接アクセスすることができる
  • Adaptable
    • Liquid Glass
      • なじみやすさ(Familiality)
        • UI layer / Content layer
      • Brand Indentity
        • 色、タイプ、コンテンツ、、
        • iOSのデザイン言語を活かす
          • e.g. gentler streak, moon lit
        • ティントカラー
          • e.g. Slack: トップバーをコンテンツレイヤーに落とした(Color scrolls away)
        • Icon Composer
    • Platform
      • iPhone → iPad → iPhone mirroring on Mac
      • リサイズが可能に:Xcode 27 でビルドし直した時点でリサイズ可能なモードが有効に
    • まず Xcode 27 で再コンパイル
  • Tools
    • プロンプトテクニック
      • Be specific:具体的に
      • Give stylistic cuse:スタイルの手がかりを入れる(どんな感情やムードを呼び起こしたいのか、コーヒーショップの雰囲気、紙の質感)
      • 必ず複数のオプション・可能性をリクエストする
        • 「XXX種類のバリエーションで作成してください」
      • 「Swift Preview と固有の名前をつけてください」
    • エキスパートスキルが組み込まれているから活用して(ローカライズ、アクセシビリティ、、)
    • Figma, GitHub から提供されるプラグインを使って Xcode に指示

Q&A

  • Siriは一般ユーザーに使いこなせる?Siri AI は音声のみ?
    • 海外だと意外と気軽に使われている
    • Siri AIの呼び出し:Spotlight のサーチがなくなりテキストで話しかけ
    • テキストは日本語でもいける
  • 今年のアップデートで今後やらなければならないこと
    • UIKit, UIApplicationDelegate 使っていたら移行すること
    • LaunchScreen を追加すること
  • 自分のアプリが既存の App Intent Scheme に当てはまらない場合
    • ドメインがジャンルに当てはまらなくても OK
    • 写真を扱っていたら、写真のドメインに用意されている entity や intent を使ってOK(たとえばECで画像投稿とかは、photo 配下にあるので使ってOK、カレンダーでなくても calendar のエンティティ使っていい)
    • system.search は、アプリに検索機能があれば、XXXを探しての変数部分がアプリにそのまま転送されるので、なるべく入れると良い。Siri経由で検索ができるようになる
    • スキーマなしの intent 作って、AppShortcutProvider 使うことができ、従来は厳密にそのワードと一致する必要があったが、今回のSIriで少しだけ柔軟性が上がっている
  • Mac, iPad でも iPhone アプリが動くので崩れないよう対応必要?
    • デザインの対応が必要
    • リファレンス:Apple のアプリは Xcode 27 でビルドしているものが多いので、iPhone Mirroring で動かしてみると良い
      • 天気とか株価とか Lnadscape 対応している
  • アプリアイコンに企業ロゴを使用していて変更できないがどう対応するべき?
    • 屈折入れない判断もあり
  • リサイズの禁止はできる?
    • ないが、iPad 26 までで deprecated になった UIRequiredFullScreen が(iOS 27 のみで)役割が変わって復活、有効になる。縦横の比率を保ったまま拡大縮小ができる、という意味になるので、それを Info.plist に入れることで担保できる(Modernization UIなんとかというUIKitのセッションで説明されている)
  • iOS 26.2以降のメモリ不足によるクラッシュについて
    • Foundation Models のバージョンアップが26.4で行われた
  • 会話コンテクストは Siri AI のコンテクストに保持される?それとも独立?
    • 会話は Siri AI のセッションに残っている
    • 機能登録した〜は引っ掛けられる、技術的には Index entity にして、Core Spotlight にデータを送る(カレンダーを登録した段階で Spotlight に送ることで、変更日時も登録される)
  • リサイズは縦横の切り替えお必須?
    • 基本的には考える必要あるが、UIRequiredFullScreen を有効にすればOK
  • さまざまなサイズに対応しない場合の不都合
    • リサイズ可能な状態になるとレイアウトが崩れるのでまずい
  • On-device model の性能を Gemini 比較で
    • Apple Machine Learning Research というブログサイトを見て欲しい
    • 性能についての記載おある(2つモデルがあり、上位機種は上のモデルで動く。その詳細が書かれている)
      • 6/8 のIntroducing 3rd generation … 記事

WWDC26:Improve your prompts by hill-climbing with Evaluations

統計学的にモデル評価を行いながら、ヒルクライミングプロセスで性能改善する手法の紹介。カッパ係数、統計学の授業で触れた気がするがまったく覚えてなかった。

Improve your prompts by hill-climbing with Evaluations


0:00 – Introduction

  • ヒルクライミングの定義
    • 評価スコアをガイドに知能機能を反復改善するアプローチ
    • サイクル:開発 → 実行 → 分析
  • AI 機能の改善に科学的思考を持ち込む考え方

2:42 – BookTracker’s tagging problem

  • Book Tracker のタグジェネレーターが抱える問題
    • 重要なテーマを見逃す
    • 本の内容ではなく読者の感想やレビューからの引用をタグとして生成してしまう

5:27 – Analyzing the evaluation results

  • データセットにレビューを 2 件追加して評価を実行
  • Xcode の評価レポートで生成タグと期待タグを比較
  • レポートの活用
    • サンプルごとのスコアとジャッジの rationale を確認
    • 期待するタグを欠いていてもモデルは高いジャッジスコアを付けており、人間評価と乖離があることが判明

8:26 – Drift between judge and human

  • モデルジャッジの評価と人間の専門家評価の乖離:「ドリフト」
  • 複数サンプルに対しモデル・人間で評価、それぞれの平均値の乖離がドリフト
  • ドリフトが存在すると評価スコアを信頼できなくなるため、ジャッジを人間の判断に揃える必要がある
  • 評価の乖離を測定する方法:
    • 両者合致する評価の割合をパーセンテージで表記(accuracy)
      • 分布が偏るケースに不適合(e.g. データセットの品質が高く人間がすべてを高く評価しがちな場合、モデルの評価と乖離が生じない)
    • accuracy とは異なる評価方法が必要

9:37 – Measuring drift with Cohen’s kappa

  • カッパ係数(Cohen’s kappa)によるアライメント計測で一致度(alignment)を測定
    • 偶然の一致(coincidence)の確率を差し引いた上で正確度を正規化 alignment = (accuracy –  coincidence) / (1 – coincidence)
    • 単純な一致率よりも真のアライメントを反映
  • Evaluations の記述に必要な4つの要素:データセット、Evaluation の対象、Evaluation の定義、結果の集計

12:26 – Building a judge alignment evaluation

  • BookTagJudgmentCalibration:ジャッジと評者の評価を比較するための専用評価
    • 同じデータセットに対して人間の手動評価とモデルのジャッジの両方のスコアを収集
    • aggregateMetrics でカッパ係数を集計
  • ジャッジアライメントのテスト
    • カッパ係数に加えて、平均値と各 dimension ごとの標準偏差も取っておくと、ジャッジスコアの増減を把握するのに役立つ
    • 閾値の目安:0.6 以上が望ましい(統計学的に意義のある一致水準を表すため)
      • #expect(result.aggregateValue(.custom(label: "Relevance: Judge vs Expert")) > 0.6)

15:16 – Analyzing alignment failures

  • Evaluate を再実行するとテストに失敗:Assistant Editorでレポートを深掘りするとジャッジが過剰に特定的なタグや的外れなタグを高く評価していると判明
  • 原因:良いタグ/悪いタグを分別するためのアプリに関するコンテキストがプロンプトに不足している

17:16 – Comparative evaluation: control vs experimental

  • Xcode 27 の比較評価機能
    • 2 つの評価を対照実験として比較し、変更の効果を客観的に検証
    • Control group:ベースとなるプロンプト vs Experimental group:実験的に変更を加えたプロンプト

19:12 – Refining the scoring dimensions

  • ScoreDimension の説明文を精緻化
    • Relevance:読者の反応・メタコメンタリー・著者情報をタグにしてはいけないことを明示
    • Usefulness:標準的なジャンル・テーマタグが機能する一方で、造語・キャラクター名・過度に一般的な語は不適と明示
  • 説明の改善で両次元のスコアが向上

21:23 – Adding few-shot examples to the judge

  • ModelJudgePrompt でジャッジに文脈と worked examples を提供
    • アプリの目的(Shelf:個人書籍管理アプリのタグ生成)を説明
    • Worked examples でレーティングの基準を示す
      • 例 A(Pride and Prejudice):タグが適切
      • 例 E(Frankenstein):ジャンル矛盾あり
  • Few-shot examples でジャッジの評価を専門家の感覚に近づける

23:38 – Going beyond prompts: adding a tool

  • ヒルクライミングの対象はプロンプトだけではない
  • BookLookupTool の追加し機能の品質を段階的に高める試み
    • レビューから本のタイトルと著者を検索するツール
    • 登場人物名・舞台設定・引用フレーズなどの手がかりからサンプルブックを特定
  • タグ生成サービスにツールを渡すだけで追加文脈を提供
    • BookTaggingService.generateTags(for:tools:) でツールを注入
  • 評価スイートでツールなし vs ツールありを同時に比較

27:17 – Next steps

  • 科学者のように考える:仮説を立て、変数を制御し、結果を測定する
  • 投資する価値のあるプロセス
  • 変数の創造性を持つ(プロンプトだけでなくツール・モデル・指示の構造なども対象)
  • ドリフトに注意し続ける(ジャッジのアライメントを定期的に確認)

WWDC26:Create robust evaluations for agentic apps

非決定的出力を評価するためのデータセットを大量生成する方法。とにかく数打ちながら期待値を満たすデータをふるいにかけながら集めると言う泥臭い方法だが、Evaluation フレームワークの機能として提供されているのがありがたい。

中でも、データセットにとどまらずツール呼び出しの検証が含まれているのは興味深かった。Foundation Models を使って開発する中でも、特に tool calling には泣かされた。以下の記事のようにツール呼び出しがされているかをログベースで検証したりしていたが、バージョンがあがると期待通りに呼び出されなくなり、プロンプトをどう工夫してもこの問題はついに解決されなかった。

今年こそは検証に足る挙動が実現していると期待しつつ、こうした評価のしがいがある高度な実装に挑戦してみたい。

Create robust evaluations for agentic apps


0:00 – Introduction

  • Evaluations フレームワーク(Xcode 27 新機能)の高度な機能を紹介
    • 合成データでデータセットを拡張する
    • ツールコーリングを伴うエージェンティックなワークフローの堅牢な評価構築
  • Hill-climbing プロセスにおける、”Develop” と “Evaluate” ステップに着目

2:21 – The dataset problem in BookTracker

  • Book Tracker のタグ自動生成機能が抱えるデータセット問題
    • 実際のレビューは書籍・ジャンル・長さ・文体で無限に多様
    • 手作業で書いた 13 サンプルではすべてを捉えられない

3:46 – Generating synthetic data with makeSamples

  • makeSamples API でデータセットを合成拡張
    • プロンプト・データセット(ModelSample の配列)・targetCount(シード含む合計サイズ、e.g. 100)を渡す
    • 合成データの生成は反復的なプロセスの中で行われる(データが代表的か確証が得られるまで検証される)
    • 妥当なサンプル数はケースバイケース:量より網羅性

6:27 – Customizing generation with SampleGenerator

  • SampleGenerator で、prompt, dataset, targetCount を超えたより細かい設定
    • sessionProvider クロージャでモデルを選択(例:Private Cloud Compute)
    • sessionProvider は実行開始時1度実行され、バッチ間で再利用されるが、コンテキストウィンドウを使い切ると再度呼び出される
      • コンテクストは共有されないので、サンプル生成の期待を指示する sessionProvider へのカスタムインストラクションは、自己完結型にする(前のバッチの状態に依存させない)

8:38 – Sampling strategies

  • samplingStrategy でシードサンプルの提示方法を制御
    • .random(デフォルト):ランダムなサブセット。多様性重視のデータセットに適する
    • .slidingWindow:連続したシードを提示。順序に意味があるデータセットに適する

10:11 – Validating synthetic samples

  • validator クロージャで各サンプルを個別に検証
    • レビュー長 ≥ 100 文字
    • タグ数 3〜8 個
    • タグはすべて小文字
  • 有効なサンプルは samples、不合格は invalidSamples に分類

13:04 – Comparing evaluation results

  • Xcode 27 の Evaluations Report で 2 つの実行結果を比較
    • 13 サンプルと 100 サンプルの結果を比較
    • サンプルが増えたことで、品質スコアが低下し、小さなデータセットではよく見えていた機能の限界が露呈
      • プロンプトやインストラクションによって改善しうる
      • 評価を調整し、実際に何が評価されているかを理解できる
      • データセットがまだ代表的でないかもしれない(増やしたり、エッジケースを網羅)

15:09 – Tool calling and tool evaluations

  • ツール評価は「何が返ってきたか」ではなく「どうやって取得したか」を検証
    • 正しいツールを、正しい引数で、正しい順序で呼んでいるか
    • 想定外のツール呼び出しがないか
  • デモアプリのツール例
    • searchBooks・getBookDetails・findSimilarBooks

18:54 – Trajectory expectations

  • TrajectoryExpectation でセッションのトランスクリプト上のツール呼び出しの種類と順序を検証
  • 引数マッチャーの種類
    • .exact:厳密な値の一致
    • .naturalLanguage:意図ベースのファジーマッチング(基準を自然言語で記述)
    • .contains.hasPrefix.hasSuffix:部分文字列マッチング
    • .oneOf.pattern:列挙値・正規表現マッチング
    • .range:数値の範囲チェック
    • .keyOnly:キー名だけ確認(値は問わない)
  • 順序付き期待(ordered)と順不同期待(unordered)を組み合わせ可能
  • disallowed で呼び出してはいけないツールを指定

21:26 – Building a tool call evaluation

  • データセットをそれぞれに対するプロンプト、インストラクション、TrajectoryExpectation  をもって、ToolCallEvaluator でスコア付けをする
    • LanguageModelSession にツールを渡し、構造化されたトランスクリプトをキャプチャ
    • allPasspercentagePass の 2 つのメトリクスを自動計算

22:02 – Synthetic data for tool evaluations

  • ModelSampleTrajectoryExpectation はいずれも @Generable のため SampleGenerator を用いて合成生成が可能
  • 合成プロンプトの設計ポイント
    • 利用可能なツールの説明(名前・引数)
    • 順序要件(ordered vs unordered の使い分け)
    • 使用すべき引数マッチャーの説明
  • バリデーターで品質を担保
    • expectations が定義されているか
    • 少なくとも 1 つのツール期待が含まれているか
    • すべてのツール名が有効なセットに含まれているか

WWDC26:Meet the Evaluations framework

ユニットテストが行えない非決定的な Foundation Models の出力を統計的に評価できる Evaluations フレームワークの紹介。評価軸を試行錯誤することでプロンプトのブラッシュアップサイクルにつながる、まさに「evaluation-driven development」。

Meet the Evaluations framework


0:00 – Introduction

  • 生成 AI 機能は「同じ入力に同じ出力」というユニットテストの前提を壊す
    • 非決定的な出力をどれだけの頻度で正しく生成できるか測定する新しいテスト手法が必要
  • Evaluations フレームワークで、予期しない出力や安全でない結果の発生率を計測可能

3:10 – Demo app Book Tacker: a manual evaluation

  • デモアプリ Book Trackerの紹介
  • #Playground で試した結果、いくつかの問題を発見
    • タグが多すぎる
    • 本のタイトルがタグになっている
    • 複数単語のタグが生成される
  • モデルの性能を評価薄る人手評価(human judgement)を作成したが、これはスケーラブルではない:そこで自動化できスケーラブルな評価手法を作った

4:31 – Building your first evaluation

  1. Evaluation プロトコルの実装手順(5 ステップ)
    1. Subject:ModelSubject による subject の定義(テスト対象のコード)
    2. Dataset:ModelSample を使ったデータセットの作成(プロンプトと期待値のペア)
    3. Evaluators & Metrics:MetricEvaluators による評価指標とタグ数の合否判定ロジックの定義
    4. Analysis:aggregateMetrics でサンプル全体の集計を定義
    5. Tests:次

8:06 – Running the evaluation and reading the report

  • Swift Testing の .evaluates トレイトで評価を実行
  • 最適化ターゲットの設定
    • #expect(result.aggregateValue(.mean(of: rangeMetric)) >= 0.8) のように合格基準を数値で表現
  • 評価レポートの確認
    • サンプルごとの結果・プロンプト・測定値・モデルレスポンスの全文を確認可能
    • 例:@Guide でタグ数を 3〜8 に制約した BookTags@Generable 定義
    • 評価を再実行し、修正が正しかったかを検証:「ヒルクライム」プロセス

10:57 – Building robust datasets

  • さきほどは 2 サンプルで検証したが、これでは不十分。優れたデータセットの条件は:
    • 数千件規模
    • ジャンル・レビューの長さ・フィクション/ノンフィクション・文体・個人的な感想など多様性が重要
    • 自分のような出力(タグ付け)をして欲しい場合、まずは個人的なスタイルを期待値としたより多くのサンプルを提供することから始める
  • 手作業では限界があるため、Evaluations フレームワークの SampleGenerator で大量合成が可能
    • シードセットからプロンプトを与えて合成サンプルを生成
    • targetCount で目標サンプル数(シードを含む合計)を指定

14:20 – Refining metrics and evaluators

  • 複数のメトリクスを追加してより深い洞察を得る。タグ付けを例とすると:
    • TagTotal:タグ数の分布(スコアリング型、合否ではなく数値)
    • wordCount:タグが単一単語かのチェック(スペース含みを除外)
    • hasGenreTag:既知ジャンル(knownGenres)との一致確認
  • aggregateMetrics での集計
    • computeMeancomputeStandardDeviationcomputeVariance を組み合わせて分布を把握

15:41 – Evaluation-driven development and hill-climbing

  1. ヒルクライミングのループ
    1. 最適化ターゲットの失敗を検出
    2. 原因を分析して変更を加える(例:@Guide にカウント範囲を追加)
    3. 再実行して結果を確認
  2. このループを中心に開発を進めるのが evaluation-driven development(評価駆動開発)

16:12 – Model judges: qualitative metrics

  • 定量的なメトリクスが合格でも、タグの内容が間違っている場合がある
    • 読者の感想がタグになっている、ジャンルの誤推論など
  • Model Judge:人間の評価を模倣する第2のモデルで出力を採点
    • ジャッジモデルは評価対象と同等以上の能力が必要(ここでは Private Cloud Compute を使用)
    • データセット全体にわたって一貫したスコアリングが可能

18:42 – Building a model judge

  • ModelJudgeEvaluator は通常の Evaluator と同じ Metric 型を返す
  • 設定のポイント
    • スコアスケールは偶数レベルにする(中立デフォルトを避けるため)
      • 例:1〜4 の 4 段階スケール
    • judge パラメータにジャッジモデルを指定
  • レポートでジャッジの根拠(rationale)も確認可能

21:19 – Refining with score dimensions

  • ジャッジモデルによるスコアが人間が評価したスコアと異なる場合がある
    • 評価の問いが広すぎることが多い(e.g. “relevant”, “”useful for browsing)
  • 二つの評価軸を ScoreDimension で分割、description で詳解し、scale も評価軸ごとに分ける
    • e.g. relevant → Relevance(関連性):タグが本自体を表しているか
    • e.g. useful for browsing → Usefulness(有用性):ブラウジングに役立つ粒度か
  • 評価軸を分けるだけ、何を評価するかを伝えているだけで不十分:アプリのコンテクスト(使われ方)が抜けているため
    • ModelJudgePrompt でどんなアプリかというコンテキストをジャッジに伝え、評価精度を高める

23:45 – Reviewing dimension results

  • 次元ごとに分かれた rationale で診断が明確化
    • Relevance のスコアでどの種類のタグが間違っているかがわかる
    • Usefulness のスコアでブラウジングの失敗の原因がわかる
  • 次のヒルクライミングの反復に向けた明確な方向性が得られる

24:20 – Best practices

  • 小さく始める(20〜30 の焦点を絞ったサンプルから)
  • 定量的な特性にはヒューリスティック(コードで計測できるもの)を使う
  • 定性的な特性には ModelJudgeEvaluator を使う
  • ジャッジはシンプルな設定から始める
  • 評価の根拠を次の変更に活かす
    • スコアがすべて同じなら問いかけが広すぎるサイン
    • 問題を切り分けられないなら次元を分割
    • ジャッジがアプリを理解していないならコンテキストを追加すること。

WWDC26:What’s New in Image Understanding

Foundation Models による画像理解と、Vision フレームワークの高い画像分析機能を Foundation Models に組み込む方法。Vision フレームワークが被写体の領域を推定してくれる、サリエンシー(顕著性)分析ができることを知った。

What’s new in image understanding


0:00 – Introduction

  • Vision と Foundation Models の新しい画像理解機能
    • Tap-to-segment API
    • 大規模言語モデルへの画像入力
    • 画像ベースのツール呼び出し
    • watchOS 上の Vision

1:36 – Segment images with tap-to-segment

  • Vision の新しいタップしてセグメント API
    • ポイントタップ・矩形選択・なげなわストローク・スクリブル(選択したい範囲をざっくり塗りつぶし)またはその組み合わせで画像内の任意オブジェクトを切り抜き
  • 実装手順
    • ImageRequestHandler にイメージを渡して初期化
    • GenerateIterativeSegmentationRequest(seed: point) でリクエスト生成
    • handler.perform(request) で観察結果(observation)を取得し pixelBuffer をマスクとして利用
    • request.addIncludedPoint(newPoint) で追加タップによるマスクの精緻化が可能
  • 座標系:左下に原点がある、正規化座標系(0〜1)を使用
  • なげなわストロークの線幅は太めが推奨(画像全体幅の1%以上):細いと良い結果が得られない
  • 制約:初めての実行前にオンデバイスモデルのダウンロードが必要
    • request.donwloadAssets() で取得
    • request.assetStatus で確認

5:50 – Image inputs for Foundation Models

  • Foundation Models フレームワークで画像を直接 LLM に渡す方法
    • キャプション生成・シーン理解・レシピ作成・インテリアデザイン提案などのタスクに対応
    • Prompt ブロック内に Attachment(image) を含めるだけで画像を渡せる
  • Vision vs Foundation Models の使い分け
    • Vision:決定論的な特定タスクにファインチューニング(セグメンテーション・特徴抽出など)、映像フレームごとのリアルタイム処理ができる高速さ
    • Foundation Models:柔軟な自然言語を伴う理解や生成タスク
    • Vision の専門性と FM の汎用性を組み合わせ

7:57 – Image-based tool calling

  • 画像引数を受け取るツールで LLM の能力を拡張する手法
  • Tool プロトコルに準拠したツールを定義し、@GenerableArgumentsImageReference を含める
  • ImageReference の解決
    • @SessionProperty(\.history) でセッション履歴トランスクリプトを取得
    • imageReference.resolve(in: transcript) で実際の画像を取り出す
    • imageAttachment.pixelBuffer() でピクセルデータを取得
  • 組み込み Vision ツール
    • BarcodeReaderTool:バーコード読み取り
    • OCRTool:30以上の言語に対応
    • Vision によって、セグメンテーション、顔分析、ポーズ推定、物体検出と分類、軌道分析やオブジェクトトラッキングが可能

13:09 – Vision on watchOS

  • watchOS で Vision を使ってウォッチアプリを強化
  • サリエンシー(顕著性)解析でコンパクトな UI に最適な被写体を自動クロップ
    • GenerateObjectnessBasedSaliencyImageRequest で被写体の注目度を算出
    • observation.salientObjects.first で最も目立つオブジェクトの NormalizedRect を取得
    • ウォッチの小さな画面に常に最も関連性の高い部分を表示できる

WWDC26:LLM search using Core Spotlight

これぞまさに昨年の筆者がやりたかったこと。紹介されているユースケースは取り組んでいたアイデアに近いものがあった。パイプライン実装により複雑さや規模をともなう検索も実現できるのが興味深い。

LLM search using Core Spotlight


0:00 – Introduction

  • アプリコンテンツを言語モデルに提供して会話型検索を構築する方法の紹介
  • デモアプリ:州立公園とトレイルを閲覧し、完了したハイキングのメモを保存するアプリ

1:41 – Grounding answers with Spotlight tool-calling

  • LanguageModelSession だけでは世界知識で答えるためアプリのデータを参照できない
  • Core Spotlight インデックスを Tool プロトコル経由で参照することで LLM の回答をアプリデータに接地(グラウンディング)
  • SpotlightSearchTool:iOS・iPadOS・macOS・visionOS 対応
    • 前提:CSSearchableItem でコンテンツをインデックスに提供済みであること

4:00 – Configure and add SpotlightSearchTool

  • SpotlightSearchTool を組み込み時の確認事項
    • 検索の種類に合わせたツールの設定
      • SpotlightSearchTool.init(configuration:) にカスタム設定を渡すことが可能(e.g. .files サンドボックス内のファイルパスへの検索)
    • モデルへの追加のコンテクスト提供
      • Model Provider API
    • UIで結果を表示する方法
  • セッションへの追加は LanguageModelSession のイニシャライザに SpotlightSearchTool のインスタンスを指定
  • ツール呼び出しの流れ:ユーザークエリ → LLM が SpotlightSearchTool を呼び出す → Spotlight で検索 → 結果を LLM に返す → 根拠のある回答を生成
  • 提供済みのメタデータがコンパクトに保存されるためモデルが読めない場合がある
  • CSSearchableIndexDelegatesearchableItems(forIdentifiers:) を実装して識別子からフルアイテムを復元
    • モデルが推論に使える追加属性を付与できる

6:44 – Displaying results and partial replies

  • 検索結果は SpotlightSearchTool 自体からも取得可能
  • セッションレスポンス:アシスタント UI(自然言語の回答)に適す
  • ツールの searchableItems:リスト UI(具体的なアイテムの一覧表示)に適す
  • tool.searchResults 非同期シーケンスで結果をストリーミング受信
  • queryToken でリフレッシュタイミングを管理
    • モデルが 1 回のレスポンスでツールを複数回呼び出す場合があるため、各リプライの queryToken の変化を検知する

8:12 – Customizing with guidance profiles

  • GuidanceProfile でモデルに渡す Spotlight の検索能力をカスタマイズする
    • 必要な属性・機能だけを有効化することでオンデバイスモデルの限られたコンテキストを節約
  • オンデバイスモデル向けには .focused(.items) ガイドレベルを推奨

11:02 – Reference resolution with a contact resolver

  • 「誰と一緒にハイキングしたか?」のような人物参照クエリへの対応
  • ContactResolver プロトコルを実装してユーザーの連絡先情報を提供
    • 表示名・メールアドレス・名前のバリエーションを含む ResolvedContact を返す
    • ツールが氏名の曖昧さを解消して正しい結果を絞り込む

11:24 – Custom pipeline stages

  • 複雑なリクエストに対してモデルが検索+計算の複数ステージを実行できるパイプラインを定義
  • @GenerableCustomStage を実装して登録
    • 例:ハイキングメモの「幸福度スコア」計算ステージ
    • inputTypesoutputTypesexecute(on:) を実装
    • スコア付きアイテム・グループ化アイテム・カウントなど様々な SearchPipelineDataType を扱える
  • ツールの設定に customStages として追加するだけでモデルが必要に応じて呼び出す

12:47 – Evaluating response quality

  • Evaluations フレームワークでツール呼び出しとレスポンス品質を計測
  • ModelSampleProtocol でデータセットを定義
    • 期待する識別子リストとツール呼び出しの軌跡(TrajectoryExpectation)を含む
  • Sample Generation API でシードサンプルを拡充
  • テストでメトリクスを検証

WWDC26:Build agentic app experiences with the Foundation Models framework

昨年 Foundation Models を使っていて明らかに不足していた機能や、痒いところに手がとこく機能が追加されていて嬉しい。複数エージェントを組み合わせた実装は昨年試行錯誤しながら、うまく行く時もあればその後再現性が得られなかったりもありだいぶ苦労した末に諦めたのだが、今回紹介された Tool calling mode を用いて意図を明確実装できそうなのが素晴らしい。あと、宣言的に見通しよくインストラクションを記述できるのもありがたい。

Build agentic app experiences with the Foundation Models framework


0:00 – Introduction

  • Foundation Models フレームワークに追加された Dynamic Profiles の概要と、それが解決する課題を紹介
  • 新しいオープンソースパッケージ「Foundation Models framework utilities」の紹介
    • コンテキスト管理やモデルの境界設定などのユーティリティを提供

2:47 – The example app and agents

  • サンプルアプリ「Origami craft app」を通じてエージェント的な設計を解説
  • 3 つのフェーズ(ブレインストーミング・計画・レビュー)でコンテキストを共有しつつ、それぞれ異なる優先度を持つ
  • 各フェーズを「エージェント」として扱う
    • エージェント:独自のモデル・指示・ツールを持つ設定の単位
    • Dynamic Profiles を使って各エージェントを宣言

3:47 – Declaring a dynamic profile

  • DynamicProfile で個々の Profile を宣言し、エージェントの設定を組み立てる
  • DynamicInstructions で指示とツールをひとまとめにした再利用可能なコンポーネントを定義
    • 別の DynamicInstructions を内部にネストすると指示とツールが結合される
    • 例:OrigamiExpert を必要な箇所で使い回す
  • 条件分岐でケーパビリティを動的に追加可能
    • 例:オリガミプロジェクトの場合のみ OrigamiExpert を追加

4:45 – Dynamic instructions

  • DynamicInstructions の役割:関連する指示・ツールをひとつの再利用可能なコンポーネントにまとめること
  • ネスト構造で指示とツールが自動的に連結される (composable)
  • DynamicInstructions をコンポーネントライブラリとして機能させることで、複数のプロファイル間での再利用が容易になる

5:36 – Configuring models per phase

  • フェーズごとに異なるモデルとオプションを割り当て可能
    • ブレインストーミング:PCC モデル + temperature(1)(創造性重視)
    • 計画:PCC モデル + reasoningLevel(.deep)(深い推論)
    • レビュー:SystemLanguageModel(オンデバイス、軽量処理)
  • DynamicProfilebody はプロンプトのたびに再評価されることに注意
    • サンプルの Observable オブジェクト orchestrator.mode の変化に応じてモデルや指示が動的に切り替わる
  • LanguageModelSession の初期化時に profile: に渡すだけで使用開始

7:21 – Transcript management and history transforms

  • トランスクリプトのトリミングが必要になる主な理由
    • コンテキストサイズ制限内に収める
    • 関係のないエントリを削除することでモデルの注意力を改善する
    • プライバシー・機密情報の除去し、プライバシーレベルの低いモデルへ移行可能にする
  • .historyTransform でステートレスな変換を毎リクエスト前に適用
    • セッション自体のトランスクリプトは変更せず、そのリクエスト用の履歴ウィンドウにのみ作用するローカル変換(コンテクスト自体は失われない)
    • 例:完了済みのツール呼び出しを除外して履歴をスリム化

8:50 – Custom modifiers

  • .historyTransform の繰り返し使う変換処理をカスタム修飾子としてカプセル化
    • DynamicProfileModifier プロトコルに準拠した型を定義
    • DynamicProfileextension として公開し、各プロファイルから .droppingCompletedToolCalls() のように呼び出せる
  • utilities パッケージには既製の履歴管理修飾子が同梱
    • .rollingWindow(size: .entries(10)):直近 N エントリだけを保持
    • .droppingCompletedToolCalls():完了済みツール呼び出しを除外

9:39 – Lifecycle modifiers and session properties

  • onResponse などのライフサイクル修飾子でセッション境界に命令的な処理を差し込む
    • 用途:UI の更新、プロファイル状態の変更、履歴の整理
  • @SessionProperty でツールとプロファイル間の状態を共有
    • 組み込み:@SessionProperty(\.history) var history(履歴)
    • カスタム:@SessionPropertyEntry マクロで独自のキーを定義して拡張可能
    • 例:会話の要約文字列を summary プロパティに保存しておき、履歴が長くなったら古い部分を要約に置き換えてトークンを節約する

12:52 – Orchestration: baton-pass

  • 「バトンパス(baton-pass)」パターン:複数のプロファイルがトランスクリプト全体を共有し(shared transcript)、ツール呼び出しによってアクティブなプロファイルを切り替える(コラボレーション)
    • バトンを受け取ったプロファイルが最終的な応答を生成
    • onToolCallorchestrator.mode を更新してプロファイルを切り替える
    • 例:ブレインストーミングフェーズが計画フェーズにバトンを渡す

14:06 – Orchestration: phone-a-friend and skills

  • 「電話相談(phone-a-friend)」パターン:ツールが短命な子セッションを独立したトランスクリプトで生成し、結果を親プロファイルに返す(コンサルテーション)
    • 親プロファイルが常に最終応答を担当
    • 子セッションは使い捨てで、親のコンテキストを汚染しない
  • 「スキル(Skills)」パターン:utilities パッケージが提供する手続き的なコンテキスト読み込みの仕組み
    • 複数の Skill を宣言しておき、モデルが必要に応じて参照する

15:18 – Tool calling mode

  • ツール呼び出しの実行制御:alloweddisallowedrequired の 3 モードを提供
    • allowed:デフォルト、モデルはツールを呼ぶ場合も呼ばない場合もある
    • disallowed:モデルはツールを呼び出さない、セッションのツールが無関係と分かっている場合に役立つ
    • required:モデルは直接応答せずツールのみを呼び出す
    • プロファイル修飾子 .toolCalling に設定するか、生成オプション(GenerationOptions)として渡す
  • required 指定時の注意点:モデルが無限ループに入るリスクがある
    • 脱出条件を必ず設ける方法
      • 状態フラグで条件分岐してモードを切り替える(例:DB を 1 回クエリしたら disallowed に)
      • CancellationError をスローする専用の「最終回答ツール」を用意して強制終了させる

17:12 – Transcript error handling

  • デフォルトの挙動:ツールエラーや処理のキャンセル時にトランスクリプトを直前の状態に巻き戻す
  • 新しい transcriptErrorHandlingPolicy でエラー後の挙動を選択可能
    • .revertTranscript(デフォルト):巻き戻し
    • .preserveTranscript:エラー後の状態を保持し、手動で修正できる
  • 保持モード(.preserveTranscript)使用時の制約
    • isRespondingfalse のときのみトランスクリプトを編集可能、応答中の編集は禁止

18:27 – Performance, accuracy, and evaluations

  • トランスクリプトの変更がパフォーマンスに与える影響
    • 変更はキーバリューキャッシュを無効化してレイテンシを上昇させる
    • 追記(append)はキャッシュを維持できるため、可能な限り追記を優先する
  • 履歴の書き換えがモデルの挙動に与える影響
    • 予期しない動作や回答品質の低下を招く可能性がある
    • 変更の効果は Foundation Models Instrument(Xcode)で計測する
  • 精度の評価には Evaluations フレームワークを活用
    • 変更前後の品質を数値で比較し、感覚に頼らない判断を下す

WWDC26:Build with the new Apple Foundation Model on Private Cloud Compute

Foundation Models のインターフェイスをそのままに、セキュリティに妥協せずサーバーサイドLLMを扱える Private Cloud Compute に関する詳細。サーバーサイドだからこその使用上限に達した際のあるべきユーザー体験が説明されていてなるほどだった。

Build with the new Apple Foundation Model on Private Cloud Compute


0:00 – Introduction

  • Foundation Models フレームワークを使い、Private Cloud Compute (PCC) 上の新しいサーバーモデルにアクセスする方法を紹介
  • 今年のオンデバイス LLM の改善点
    • 画像入力のサポート追加
    • instructions への追従精度の向上
    • カスタムツール呼び出し精度の向上
  • より複雑なユースケースに対応するため、PCC 上の新しいサーバーモデルを提供
    • 大量のユーザー入力を推論するアシスタント
    • 大量のツール呼び出しと大きな出力を必要とする機能
    • watchOS からも PCC の呼び出しが可能

1:23 – What is Private Cloud Compute

  • PCC はシステム機能を動かすための Apple のサーバー基盤で、今年からサードパーティアプリでも利用可能に
  • プライバシー設計
    • ユーザーデータは保存されず、リクエスト処理のみに使用
    • エンドツーエンドのプライバシーを独立し研究者により検証済み
  • OS と iCloud に統合されているため、開発者側の認証情報管理が不要
    • 認証なし、API キーなし、アカウント設定なし
    • Apple Intelligence 対応デバイスがあれば利用可能
  • 開発者向けのトークン課金なし
  • 利用制限の仕組み
    • ユーザーごとに日次制限あり
    • iCloud+ にアップグレードすると制限が緩和
  • ダウンロード数 200 万未満のアプリが対象(デベロッパーサイトから申請可能)

2:43 – Integrating PCC with Foundation Models

  • 既存の Foundation Models コードからわずか 1 行の変更で PCC モデルへ切り替え可能
    • LanguageModelSession のイニシャライザに .init(model: PrivateCloudComputeLanguageModel()) を指定
  • Foundation Models フレームワークが、どのモデルを使用しているかに関わらず統一された Swift API を提供
    • Generable による構造化出力やツール呼び出しはオンデバイスモデルと同じ API で動作
    • モデルを切り替えてもコードの書き直しが不要
  • PCC もオンデバイスモデルと同様に Apple Intelligence 対応デバイスのみで利用可能
    • 利用可能かどうかの確認と、利用できない場合の適切なフォールバック処理が必要

4:00 – Deciding between on-device and PCC

  • オンデバイスモデルと PCC モデルの主な違い
    • プライバシー:両者とも担保
    • オフライン動作:オンデバイスは可、PCC は通信必須
    • リクエスト制限:オンデバイスはなし、PCC は日次制限あり
    • コンテキストサイズ:オンデバイスは 4K、PCC は 32K
    • 推論(Reasoning):PCC のみ対応

4:32 – Reasoning levels and context size

  • 推論(reasoning)とは:LLM が応答を生成する前に「考える」プロセス
    • トランスクリプトの別セグメントに追加テキストを生成することで実現
  • PCC モデルが提供する 3 段階の推論レベル
    • .light:モデルが少量の追加コンテキストを収集する程度
    • .moderate:より深く推論する
    • .deep:推論セグメントのテキストが実際の応答より長くなる場合も
  • respond 呼び出し時に推論レベルを指定可能
  • セッションのトランスクリプトを監視して推論の進捗を表示可能(.deep では特に有用)
  • 注意点:推論はトークンを消費するため、コンテキストに含まれそのサイズ制限に影響する
  • コンテキストサイズをプログラムで取得する API が追加
    • SystemLanguageModel または PrivateCloudComputeLanguageModelcontextSize プロパティを参照

6:15 – Evaluating and combining models

  • モデルや推論レベルの選択は感覚ではなくデータに基づいて判断することが重要
  • 評価の目的:機能ごとの品質を数値で把握する
    • 今年のアップデートによりオンデバイスモデルの性能が向上しており、期待以上の性能を発揮するケースも
  • Evaluations フレームワークの導入
    • Foundation Models 機能を評価するための新しい Swift フレームワーク
    • Xcode に統合されており、導入が容易
  • オンデバイスモデルとサーバーモデルを組み合わせた利用も可能

7:10 – Handling usage limits

  • PCC の利用制限はユーザーの iCloud アカウントに紐づいて管理
  • 制限超過時の処理
    • リクエストがエラーをスロー
    • エラーを UI に表示するだけでは不十分:適切なアクションにつながらない
    • PrivateCloudComputeLanguageModelquotaUsage.isLimitReached を確認してカスタム UI で対応
  • UI 設計のベストプラクティス
    • 上限引き上げのためのアップグレードボタンの表示する
    • アラートは使わない(永続表示が必要なため、閉じられてしまうアラートは不適切)
      • リクエストボタンを無効化するなど UI の状態を更新して表示
    • 制限超過(isLimitReached)だけでなく制限接近(belowLimit)のケースにも対応する
  • Xcode のデバッグオプションで制限状態のシミュレーションが可能
    • スキームの Debug → Options → “Simulate Apple Foundation Models Availability”
    • Quota Usage Limit Reached(制限超過)または Nearing Usage Limit(制限接近)を選択できる

WWDC26:What’s new in the Foundation Models framework

今年も自分の勉強用に、日々セッションのサマリをやってみる。まずは、去年散々格闘した Foundation Models から。今年はオンデバイスモデルが大幅進化していたり、クラウドコンピューティングが利用できるようになったり、画像理解もできるようになったりと大幅進化を遂げて嬉しいのだが、何より、去年挫折した Spotlight + RAG のユースケースを、SpotlightSearchTool として公式に提供されたことは嬉しい。

What’s new in the Foundation Models framework


0:00 – Introduction

  • Foundation Models framework 2年目のリリース概要
  • 今年の 3 つのテーマ:
    • OS の内外への連携の拡大
    • より多様なモデルのサポート
    • エージェント体験構築のための新しい基本要素
  • フレームワークコアが オープンソース化
  • 新パッケージ Foundation Models framework utilities も同時リリース
    • OS リリース間でも更新され、最新の構成要素にアクセス可能
    • このセッションを通してFMエコシステムに含まれる他のフレームワークも紹介する

2:34 – New on-device model

  • オンデバイスモデルをゼロから再構築しより賢く
    • tool calling の精度と論理処理能力の向上
  • iOS 26.4 で追加された新 API:
    • モデルの context size を検査
    • instructions・prompts・transcripts のトークン数をカウント
    • 動いているハードウェアに合わせてアプリを適応させるために活用
  • ガードレールの継続的改善
    • iOS 26.4 で誤検知を削減、iOS 27 でさらに改善予定

3:21 – Vision:image understanding

  • オンデバイスモデルに Vision 機能が追加
  • API は既存の prompt builder の自然な拡張
    • LanguageModelSession を作成し、prompt にテキストと一緒に画像を添付して渡す(e.g. Bundle.main.url(forResource:withExtension:))
    • 画像の内容についてそのまま質問できる
  • ImageAttachment がサポートする型:
    • UIImageNSImageCGImage
    • Core Image 型
    • CoreVideo Pixel Buffers
    • ファイル URL
  • 任意のサイズ・アスペクト比をサポート(クロップ・パッディング不要)
  • 注意:画像が大きいほどトークン消費とレイテンシが増加

4:20 – Private Cloud Compute (PCC)

  • PrivateCloudComputeLanguageModel が新登場
    • Apple Intelligence の各機能を動かしているのと同じモデル
    • オンデバイスモデルより大幅に大きなモデル
    • コンテキストウィンドウ:32,000 トークン
    • reasoning 機能搭載 — 回答前に時間をかけて思考することで精度が大幅向上
  • 使い方:
    • PrivateCloudComputeLanguageModel のインスタンスを作成し LanguageModelSession に渡すだけ
    • contextOptionsreasoningLevel で思考の深さを指定
      • 推論が深いほど高品質だが計算コスト大
  • メリット:
    • アカウント設定・認証・API キーの保管が一切不要
    • プロンプトは保存されない(プライバシー保護)
    • 独立した研究者による検証が可能な仕組み
  • watchOS 27 でも Foundation Models framework が利用可能に(PCC 経由)
  • 料金:初回ダウンロードが 200 万件未満の開発者は無料。iCloud+ ユーザーはさらに利用枠が拡大

6:46 – Model abstraction layer

  • 新しい LanguageModel プロトコルでほぼあらゆる言語モデルを Framework 経由で利用可能に
    • ローカル・サーバー問わず LanguageModelSession のバックエンドとして使える
    • 既存のモデル SystemLanguageModel PrivateCloudComputeLanguageModel はすでに準拠済み
  • オープンソースで追加実装を公開:
    • CoreAILanguageModel — Apple Neural Engine 上で多様なローカルモデルを実行
    • MLXLanguageModel — Mac の GPU 上で実行

7:32 – Partner model integrations

  • Anthropic・Google が Swift パッケージを公開し、フロンティアモデルへのアクセスを提供
  • 使い方:Swift Package Manager でパッケージを追加し、モデルを初期化して LanguageModelSession に渡すだけ
    • 呼び出し元のコードは変更不要
  • 注意事項:
    • 認証・課金はサードパーティごとに自前対応が必要
    • API キーを絶対にアプリバイナリに埋め込まないこと — OAuth などの安全な仕組みでアクセストークンを取得し Keychain に保存
  • トークン使用量の追跡:
    • SessionResponseusage プロパティが追加
    • 使用トークン数・キャッシュから読んだ入力トークン数・推論に使ったトークン数を把握可能

9:40 – System tools:Vision and Spotlight

  • Vision framework を使った2つの組み込みツールが追加
    • BarcodeReaderTool — バーコードから情報を読み取り
    • OCRTool — 画像から構造化テキストを抽出
    • モデルが単独では難しい視覚情報の推論をサポート
  • SpotlightSearchTool Spotlight を使ったローカル RAG(Retrieval-Augmented Generation)ツールも追加
    • 完全ローカルで最新の個人・ドメイン知識をモデルに提供
    • Spotlight インデックスと特殊処理クエリを活用
    • クラウド API コストなし・プライバシー保護

10:57 – Dynamic Profiles for agentic apps

  • DynamicProfile — エージェント体験構築のための新しい宣言的 API
    • 従来:コンテキスト・モデル・ツールを複数セッションにまたがって命令的に管理するボイラープレートが多い
    • 新設計:単一の LanguageModelSession 内でコンテキストを宣言的に記述
  • 基本的な使い方:
    • DynamicProfile プロトコルに準拠した struct を定義
    • body プロパティで Profile を返す(instructions・tools を含む)
    • LanguageModelSession.init(profile: DynamicProfile) で初期化
  • 応用:
    • アプリの状態変数に応じて分岐し、それぞれの Profile で異なる instructions・tools を持たせる
    • モデルが自律的にモードを切り替えるためのツールを Profile に持たせることも可能

13:46 – Composing models and configurations

  • DynamicProfile ではモデルと設定も動的に切り替え可能
    • 例:分析タスクには SystemLanguageModel、ブレインストームには PCC + 深い推論
  • 修飾子(modifiers)で設定を記述:
    • .model() 修飾子で使用モデルを指定 (e.g. .privateCloudCompute)
    • .reasoningLevel() 修飾子で推論の深さを指定 (e.g. .deep)
  • DynamicProfile は任意の時点では単一のアクティブな Profile に解決される
    • 条件分岐でアクティブな Profile を選ぶと、フレームワークが遷移を管理
    • 会話履歴を維持したままモデル・ツール・指示内容を切り替え可能
  • 考慮点:プライバシーの境界・モデルの能力差・コスト

15:30 – Evaluations framework

  • Evaluations — インテリジェンス機能の品質を定量的に測る新 Swift フレームワーク
    • プロンプトを調整するたびに精度を数値化
    • 変更の統計的影響を把握し、自信を持ってリリースできる設計

16:02 – The fm command line tool

  • fm CLI — macOS 27 で登場するコマンドラインから Foundation Models を使うツール
    • fm chat でターミナルからオンデバイスモデル・PCC と対話
    • シェルスクリプトに組み込んでドキュメント要約・情報抽出・コンテンツ生成も可能
    • 例:ランダムなファイル名の画像に、画像の内容に基づいた説明的なファイル名を自動生成

17:13 – Foundation Models Python SDK

  • Python エコシステム向けに Foundation Models SDK を提供
    • Swift フレームワークと同じオンデバイスモデルに直接アクセス
    • モデルが利用可能かどうかの確認・レスポンス生成が数行のコードで可能
    • prompt → 構造化レスポンスも対応

17:55 – Open source and framework utilities

  • ユーティリティパッケージの公開:LLM活用の新たな手法を探求するのに役立つ
    • 会話履歴管理用のプロファイル修飾子
    • 手続き的知識ロード用の skill API
    • Chat Completions 標準を使ったサーバーインタフェース
    • OS リリース間でも更新
  • フレームワークコアもオープンソース化
    • Swift が動く Linux サーバーなどあらゆる環境で LLM と対話可能
    • Anthropic・Google・CoreAI・MLX との連携と組み合わせて「任意のモデルをどこでも実行」が実現

WWDC26:雑感

去年も書いたので、今年も書いてみる。

今年は現地参加のエントリーをしたのだが、普通に外れたので例年通り自宅で見守った。

今年はこれまでの iOS/iPadOS/macOS/watchOS/tvOS/visionOS とOSごとに分断して発表する様式から一転して、OSに分割せず3つのテーマ(パフォーマンス/チャイルドセーフティ/AI)にフォーカスして紹介するスタイルだった。また例年 Tim Cook が担ってきたメインの司会を、今年は Craig Federighi がになっていたのは印象的だった。一方で時期CEOである John Ternus の登場はなかった。

今回の個人的な目玉はやはり、去年散々探究しつつもその性能限界を悟り、志半ばに挫折したあの Apple Foundation Models の強化だ。内部的に Gemini を活用し、オンデバイスモデルでマルチモーダルに対応、自然な音声生成が実現したことで、かなりユースケースが広がることが期待できる。オンデバイスの最上位では20Bパラメータのモデルが使えるそうなので、昨年挫折したことにまた再チャレンジしたい。

Liquid Glass のデザイン改善の方向性がかなり好みすぎて、普段使用のデバイスをbetaにアップデートすることは原則しないのだが、どこまで我慢できるだろうか、、新しくなったSiriもパーソナルデータが揃った環境で早く使ってみたい。

ありがとう Tim Cook!