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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shuhei Shitamori
June 27, 2025
Programming
120
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
82
Vision Proで実現する 『ながら運動』健康促進術
shitamori1272
0
140
時差×英語×リモートでの コミュニケーション術
shitamori1272
0
80
写真はもう信用できない?フェイク検出から来歴証明へ
shitamori1272
1
83
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
初めてのKubernetes 本番運用でハマった話
oku053
0
120
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
350
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
140
自作OSでスライド発表する
uyuki234
1
3.8k
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
110
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
260
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
Creating Composable Callables in Contemporary C++
rollbear
0
200
えっ!!コードを読まずに開発を!?
hananouchi
0
190
関数型プログラミングのメリットって何だろう?
wanko_it
0
170
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.4k
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
160
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Marketing to machines
jonoalderson
1
5.6k
Music & Morning Musume
bryan
47
7.3k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
250
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
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