Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Foundation Models触ってみた - iPhone Dev Sapporo — W...
Search
Shuhei Shitamori
June 27, 2025
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Foundation Models触ってみた - iPhone Dev Sapporo — WWDC25 Recap
Shuhei Shitamori
June 27, 2025
More Decks by Shuhei Shitamori
See All by Shuhei Shitamori
Photography is Dead?
shitamori1272
1
94
Vision Proで実現する 『ながら運動』健康促進術
shitamori1272
0
150
時差×英語×リモートでの コミュニケーション術
shitamori1272
0
88
写真はもう信用できない?フェイク検出から来歴証明へ
shitamori1272
1
88
Apple SharePlayで 非対称クロスプレイ チャレンジ (SharePlay使ってみた編)
shitamori1272
0
190
Vision Proで広告フリーな世界を実現したい
shitamori1272
0
250
Wallet API, Verifier APIで実現するIDカード on iPhoneの世界
shitamori1272
1
3.6k
Other Decks in Programming
See All in Programming
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
710
「人を評価する AI」の設計と実装
ryoyanara
0
210
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
270
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
470
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
390
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
290
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.7k
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
230
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
180
What's New in Android 2026
veronikapj
0
260
Featured
See All Featured
Crafting Experiences
bethany
1
250
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Ruling the World: When Life Gets Gamed
codingconduct
0
300
Product Roadmaps are Hard
iamctodd
55
12k
Balancing Empowerment & Direction
lara
6
1.2k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
210
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Code Review Best Practice
trishagee
74
20k
Building Applications with DynamoDB
mza
96
7.2k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Transcript
Apple Foundation Models 触ってみた WWDC 2025 - Foundation Models Framework
1
自己紹介 カナダのデジタルID スタートアップで働くiOS エンジニア 個人でVison Pro を購入、仕事に活かせないか模索中 経歴 北海道大学院 HCI
研: iPad 向けの透明なキーボードの提案 ヤフー株式会社( 現LY): 地図アプリ開発, R&D カナダへ移住してデジタルID スタートアップへ転職 帰国しフリーランスとして活動中 2
アジェンダ 1. Foundation Models フレームワーク概要 2. 主要機能と特徴 3. Guided Generation
(構造化生成) 4. Tool Calling (ツール呼び出し) 5. 実装例の紹介 6. まとめ 3
NotebookLM を作成しました Foundation Models に関する公式ドキュメントを詰め込みました。 不明瞭な点や疑問があった際に活用してください。 4
Foundation Models Framework とは アプリから利用できるオンデバイス大規模言語モデル 完全にプライベート - 第三者サーバーへの送信なし 無料 -
API コストなし オフライン動作 - ネット接続不要 import FoundationModels let session = LanguageModelSession(model: .default) let response = try await session.respond(to: "Swift でファイルを読み込む方法を教えて") print(response.content) // "Swift でファイルを読み込むには、FileManager を使用します。" 5
最低限の利用に必要なクラスは2 つのみ SystemLanguageModel 30 億パラメータの2 ビット量子化モデル (ChatGPT3.5 は3550 億) 現在提供されているモデルはgeneral
とcontentTagging の2 つ LanguageModelSession モデルとの対話セッションを管理 プロンプトの送信、応答の受信 6
基本的な使用方法 import FoundationModels // フレームワークのインポート let model = SystemLanguageModel.default //
指示を与えてセッションを作成 let session = LanguageModelSession( model: model, instructions: Instructions(" あなたは親切なSwift プログラミングの先生です。質問には1 行以内に簡潔に答えてください。") ) // プロンプトを送信して応答を受け取る let response = try await session.respond(to: "Swift でファイルを読み込む方法を教えて") print(response.content) // `FileManager` を使用してファイルを読み込むことができます。 // 過去の会話を再利用して質問に答えられる let response2 = try await session.respond(to: " もういっかい教えて。") print(response2.content) // `FileManager` を使用してファイルを読み込む方法です: ... 複数行のコード例が返される 誤動作を抑えるためInstructions はユーザーには触らせない 7
Foundation Models を拡張する機能 パラメータが少ないからか出力の質が低く知識も乏しい 以下の機能を活用して出力を改善する必要がある Guided Generation (構造化生成) @Generable @Guide
マクロで出力結果形式の定義・安定化 Tool Calling (ツール呼び出し) WebAPI やローカルデータにアクセスする方法を定義できる 知識の拡張やアクションを実行可能に 8
Guided Generation (構造化生成) @Generable マクロでレスポンス形式を定義 @Guide マクロで出力のガイドラインを設定 @Generable struct Recipe
{ @Guide(description: " レシピの名前を入力してください") let name: String @Guide(description: " 各手順を簡潔に説明して", .range(1...5)) let instructions: [String] @Guide(description: " 調理時間は分単位で指定して") let cookingTime: Int } // 構造化データとして直接取得 let recipe = try await session.respond(to: " パスタのレシピを作成して", generating: Recipe.self) print(recipe.name) // " ペペロンチーノ" print(recipe.instructions) // ["1. ニンニクを炒める", "2. パスタを茹でる", ...] print(recipe.cookingTime) // 20 9
Tool Calling (ツール呼び出し) API 等にアクセスできるカスタムツール定義してモデルの機能を拡張 struct WeatherTool: Tool { static
let name = "getWeather" static let description = " 指定した都市の天気情報を取得" @Generable struct Arguments { @Guide(description: " 天気を調べる都市名") var city: String } func call(arguments: Arguments) async throws -> ToolOutput { // WeatherKit 等を使用して実際の天気データを取得 let weather = await getWeatherData(for: arguments.city) return ToolOutput(weather) } 10
Tool Calling を利用したセッション let session = LanguageModelSession( model: .default, tools:
[WeatherTool()], instructions: Instructions(""" あなたは天気予報のアシスタントです。 ユーザーの質問に対して、必要に応じて天気ツールを使用してください。 """) ) // モデルが自動的にツールを呼び出して応答を生成 let response = try await session.respond( to: " 東京の今日の天気はどうですか?" ) 11
ユースケースを考える 多くのケースではサーバAI の方が質の高い応答 Foundation Models の特徴を活かす利用が求められる プライベート利用OK 完全無料 オフライン実行 (
間違ってもOK) 12
Apple のデモ-1 日記アシスタント 入力中の内容から 話を広げるための質問生成 (Private + Free) 13
Apple のデモ-2 Coffe Shop Game NPC との会話を自動生成 (Guided Generation,
Free) 連絡先内の知人がNPC として登場 (Tool Calling + Private) カレンダーイベントに基づく会話 (Tool Calling + Private) 14
自分でも考えてみる ひらがな埋めるフォームアプリ ユーザーが入力した氏名住所のひらがな蘭を自動で埋める (Private, Free, 間違ってもOK) LINE トーク履歴を元に相性診断アプリ 二人のトークから相性を診断 (Guided
Generation, Private) 連絡先から関係性を抽出 (Tool Calling, Private) 15
デモ 16
ひらがな埋めるフォームアプリの実装 Instructions let instructions = Instructions(""" あなたは日本語の漢字をひらがなに変換するアシスタントです。 入力された漢字や地名を正確にひらがなで読み方を返してください。 一般的な読み方を使用し、簡潔に答えてください。 ひらがなのみで回答し、他の文字は含めないでください。
""") 17
ひらがな埋めるフォームアプリの実装 Prompt 姓: 「田中」という姓の読み方をひらがなで教えてください。 名: 「太郎」という名前の読み方をひらがなで教えてください。 住所: 「東京都渋谷区」という地名の読み方をひらがなで教えてくだ さい。 18
LINE トーク履歴を元に相性診断アプリ の実装 Instructions let instructions = Instructions(""" あなたは恋愛関係や友人関係の相性分析の専門家です。 LINE
チャット履歴を分析して、二人の相性を客観的かつ建設的に評価してください。 分析観点:コミュニケーションの頻度とバランス、感情的な調和とサポート、 会話の深さと多様性、レスポンス傾向と相互理解、共通点と補完性 """) 19
LINE トーク履歴を元に相性診断アプリ の実装 Guided Generation @Generable struct AnalyzeResult { @Guide(description:
" 相性スコア(0-100 点)") let compatibilityScore: Int @Guide(description: " 相性分析のサマリー(4 行程度)") let compatibilitySummary: String @Guide(description: "person1 の感情を漢字1 文字で3 つ表現", .count(3)) let feelingsToPerson2: [KanjiFeeling] } 20
漢字の感情を表現する構造体 @Generable struct KanjiFeeling { @Guide(description: " 感情を表す漢字, 絶対に1 文字分の漢字を指定すること")
let kanji: String @Guide(description: " 感情の度合いを0-100 の整数で表現", .range(0...100)) let score: Int @Guide(description: " 漢字の感情に適したRGB 色値") let color: RGB } 21
Tool Calling struct ContactSearchTool: Tool { static let name =
"searchContact" static let description = " 指定された名前の連絡先情報を検索" @Generable struct Arguments { @Guide(description: " 検索する人の名前") var name: String } func call(arguments: Arguments) async throws -> ToolOutput { // 連絡先から年齢、職業、誕生日等の情報を取得 let contact = searchContactInfo(name: arguments.name) return ToolOutput(contact) } } 22
触ってみて プライベート情報から価値を作れるおもしろい機能 ただし、質の高い応答を得るためには工夫が必要 要考慮のエラーケースが多い デバイス・OS がFoundation Models 非対応 → Fallback
UI 必要 生成中に生成を依頼してエラー → 生成中状態の適切な管理 利用ガイドラインに違反 → ユーザーへ適切なフィードバック コンテキストサイズを超えた入力 → Session の再作成の自前実装 オフラインのふりをしたプライベート情報収集アプリ出てきそう... 23
まとめ Foundation Models の価値 プライバシー第一 - オンデバイス処理 完全無料 - API
料金なし 高性能 - 低遅延、オフライン動作 柔軟性 - Guided Generation + Tool Calling 24