WWDC25:Code-along: Bring on-device AI to your app using the Foundation Models framework

前回の「Deep dive into the Foundation Models framework」に引き続き、Foundation Models framework のセッションメモ(今回もAI要約+筆者加筆修正)。前半はだいたい前出の内容と被っていた。UIに組み込む際の体験向上、パフォーマンスの検証や改善のtipsについて。

Foundation Models のデモアプリが結果を逐次表示する際、やたらぬるぬると表示更新される様子が気になっていて、実装難易度高そうだと思っていたが、ストリームで吐き出されるデータ表現が自動的に identifiable であるため、実装者はただアニメーションを指定すれば良いという、にわかに信じがたい魔法のような話だった。


Introduction

  • Foundation Models frameworkを使い、SwiftUIアプリにオンデバイスAI機能を追加する方法を実演
  • 旅行プラン作成アプリを例に、ランドマーク選択→旅程自動生成→外部情報取得→ストリーミング表示→パフォーマンス最適化までを一通り解説

Prompt engineering

  • XcodeのPlayground機能を活用し、プロンプトの試行錯誤を効率化
  • @Generable annotation, @Guide macro
  • Instructions (プロンプトの上位形式 – the higher level form of prompting) により、モデルの役割や期待する出力例を明示し、精度を高める
  • 生成結果は Observable オブジェクトとしてUIにバインドし、リアルタイムに反映
    • 初期化タイミングによっては、不要なタ再生成が行われパフォーマンスに影響するため、Task modfier 内で初期化し、表示時1度だけの生成を保証するべき

Tool calling

  • Tool プロトコルを実装することで、モデルがアプリ内の任意の関数やAPI(例:MapKit)を呼び出せる
  • ツールには名前・説明・call メソッド(引数はGenerable 型)を定義
  • モデルは必要に応じてツールを自律的に呼び出し、外部データ(例:ランドマーク周辺の観光地情報)を取得
    • ツールの有無、ある目的に対して使って欲しい tool の明示、呼び出し頻度はプロンプトや instruction で調整可能
  • Apple Intelligenceの利用可否 = Foundation models の利用可否や、モデルの準備状況も考慮し、UIで適切に案内・制御
    • SystemLanguageModelmodel.availability で判別
    • Xcode の build scheme から、モデルの無効化が可能 (Simulated Foundation Models Availability)

Streaming output

  • 旅程生成の出力をストリーミングで受け取り、部分的にUIへ即時反映
    • session.streamResponse(...) API
    • PartiallyGenerated 型(全プロパティが optional な構造体)を活用し、生成途中のデータも段階的に表示
  • SwiftUIのForEachやアニメーション、トランジションを組み合わせて、スムーズな体験を実現
    • PartiallyGeneratable 構造体は自動的に identifiable、IDの自前管理は不要
  • ストリーミングにより、ユーザーは生成完了を待たずに内容を確認できる

Profiling

  • Foundation Models Instrument を使い、アプリのパフォーマンスを可視化・最適化
  • モデルのロードや推論、ツール呼び出しの各工程の所要時間を計測
  • 初回リクエスト時の遅延対策として「プリウォーム(session.prewarm())」を推奨
    • モデルがリクエストをもらう前に、モデルをロードしておく
    • 例: ユーザーがプロンプトのタイピング開始時
    • 今回はランドマークタップ時(Generate ボタンタップ前)
  • 生成スキーマをプロンプトに含めるかどうかを状況に応じて最適化し、トークン数やレイテンシを削減
    • モデルがリクエスト生成前にレスポンスフォーマットを完全に理解していればincludeSchemaInPromptfalse に指定する
      • 有効ないくつかのケースを紹介
  • 実機での計測を推奨し、シミュレータとの違いに注意
    • Simulator on M4 Mac > iPhone の場合あり

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です