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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
79
Vision Proで実現する 『ながら運動』健康促進術
shitamori1272
0
140
時差×英語×リモートでの コミュニケーション術
shitamori1272
0
80
写真はもう信用できない?フェイク検出から来歴証明へ
shitamori1272
1
80
Apple SharePlayで 非対称クロスプレイ チャレンジ (SharePlay使ってみた編)
shitamori1272
0
180
Vision Proで広告フリーな世界を実現したい
shitamori1272
0
240
Wallet API, Verifier APIで実現するIDカード on iPhoneの世界
shitamori1272
1
3.5k
Other Decks in Programming
See All in Programming
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
370
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
270
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.4k
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
730
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
130
Oxcを導入して開発体験が向上した話
yug1224
4
330
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
180
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
140
OSもどきOS
arkw
0
580
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
190
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
A designer walks into a library…
pauljervisheath
211
24k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
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