WWDC25:Deep dive into the Foundation Models framework

前回の「Meet the Foundation Models framework」に続いて、Foundation Models framework を深ぼるセッションビデオのメモ。今回もAIに要約してもらったものをベースに理解したことを書き足していった。

Tool は Inputに対してOutput が一定決まっている(連絡先やカレンダー)ユースケースに対応しており、一方でたとえばカスタムデータからインサイトを得るような、ファインチューニング的な方法は現時点での Foundation Models framework ではまだ実現できなさそうだった。あくまで、オンデバイスLLMに外部リソースへの一問一答的な参照手段を与えるという理解。desciriptionを記述することでモデルが勝手に選択して使うという意味では、MCPに近いかも?将来的に、自身が保有するデータをこのツール定義としてアプリ外に公開し、アプリ間でAI同士やりとりできるようになると面白いかも、と妄想が広がった。


Sessions (Prompting / Transcript / Sampling)

  • session.respond(to: userInput)
    • instruction promptをトークン (small substrings) に分解
    • LLMがトークンシーケンスを受け取り、response を生成
    • Foundation Models framework が一連の処理を担うので使い手は気にしなくて良いが、トークンは free ではない:計算コストとレイテンシが生じる
  • ステートフルなセッションとその状態管理
    • セッション(LanguageModelSession)は状態を持ち (statefull)、やりとりの履歴(transcript)を保持する
    • session.transcript: デバッグやUIへの表示に有用
    • ただし、context limit あり:入力・出力のトークン数が多いと遅延やエラー(.exceededContextWindowSize)が発生する
      • 履歴のない新しいセッションを開始
      • 既存のセッションから transcript を要約し引き継げる
        • 例1. 最初(instruction)と最後のやりとりのみ引き継ぐ
        • 例2. transcipt 全体を要約して引き継ぐ (外部ライブラリ or Foundation Models 自体を用いて)
  • サンプリングと出力の多様性
    • 同じプロンプトに対して異なるアウトプットが生じる
    • モデルの出力 = トークンは、確からしさの分布に基づき確率的に選択される(sampling)
      • デフォルトは randam sampling
      • ゲームなどの用途に対して、再現性を求めたい場合:GenerationOptions でサンプリング方法や多様性 temperatureを調整可能 (数値大きい方がアウトプットが多様)
      • 決定論的な出力(.greedy)も選択できるが、モデルのバージョンによって結果が変わる場合がある
  • 言語サポート
    • 入力言語が未対応の場合は .unsupportedLanguageOrLocale エラーが発生
    • モデルが対応している言語かどうかを事前にAPIで確認可能

Generable

  • @Generable マクロを使うことで、Swiftの型に沿った構造化データを安全に生成できる
    • constrained decoding により、特定のスキーマに沿った正しい出力のみが生成される
      • ハルシネーションが発生しても、最終的にスキーマ定義されたトークンのみを採用することで誤りを防ぐ
    • enumやassociated value、配列、数値型など多様な型に対応
    • @Guide マクロでプロパティごとに値の範囲や説明を指定可能
      • @Guide(.range(1...10)) for Int
      • @Guide(.count(3)) for Array
      • @Guide(desciption: "A full name")
    • プロパティの生成順序はソースコードの宣言順に従うため、依存関係やUI表示順に注意
    • 文字列に@Guide(.pattern(...))を指定して 、正規表現(regex)による文字列制約も可能
      • Regex builder syntax

Dynamic Schemas

  • 実行時に構造が決まるデータにも対応可能(DynamicGenerationSchema
    • Dynamic schemas はPropertyのリストを持ち、Propertyごとがnameとpropertyの型を定義するschemaを持つ
    • Dynamic schemas は配列を持つことが可能
    • 他の dynamic schemas をスキーマ名を通じて参照することが可能
  • ユーザー入力などで動的にスキーマを構築し、モデルに渡すことができる
  • 検証済みスキーマに変換してから推論を行うため、動的でありながら同時に型安全性が保たれる

Tool Calling

  • Tool プロトコルを実装することで、モデルがアプリ内の任意の関数やAPIを呼び出せる
    • Tool.name は短く、しかし省略は用いず英語としてreadableで分かりやすくするのが推奨。動詞を使うべき e.g. "findContact"
    • Tool.description も同様に長すぎず (1文推奨)、実装の説明を含めるべきでない
      • この文字列がそのままプロンプトに用いられるため、トークンが長くなりレイテンシが増大する
  • インプットArgument を定義
    • モデルがツールを呼び出す際にArgumentを生成する
    • 入力引数もGenerable で型安全に生成されるため、想定外の値が渡される心配がない
  • ツールはインスタンスで、そのライフサイクルをコントロール可能
    • セッションの初期化時に渡し、セッション中は同じインスタンスが使われる
    •  ツールは状態を持つこともでき、複数回・並列で呼び出される場合もある
  • 例:連絡先やカレンダーの情報を使って、よりパーソナルな体験を実現

まとめ

  • Foundation Models frameworkは、オンデバイスで安全かつ柔軟にLLMを活用できる強力なツール
  • セッション管理、構造化出力、動的スキーマ、ツール呼び出しなど、実践的な機能が豊富
  • プライバシーを守りつつ、アプリに高度なAI体験を組み込むことが可能

「WWDC25:Deep dive into the Foundation Models framework」への1件のフィードバック

コメントを残す

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