
【iOS27】FoundationModels入門①(環境確認・呼び出し・画像添付)
はじめに
こんにちは。リテールアプリ共創部のYahiroです。
前回までの記事では、AFM3(Apple Foundation Models 3)の基本的な概念を紹介してきました。
今回はその実践編として、実際にコードを書いて動かしてみます。
この記事でわかること
- 実行環境がAFM3に対応しているかの確認方法
- FoundationModelsでプロンプトを渡す方法
- instructionsでシステムプロンプトを指定する方法
- 画像の渡し方
検証環境
この記事では、以下の環境で検証しています。
- Mac mini(2024)
- Apple M4
- メモリ 16GB
- macOS GoldenGate 27.0
- Xcode 27.0
環境の確認
まずは、実行環境がAFM3に対応しているかを確認しましょう。
基本的には、以下のように SystemLanguageModel の availability で確認できます。
import Playgrounds
import FoundationModels
#Playground {
let model = SystemLanguageModel.default
switch model.availability {
case .available:
print("対応しています")
case .unavailable(.deviceNotEligible):
print("このデバイスでは使用できません")
case .unavailable(.appleIntelligenceNotEnabled):
print("このデバイスではApple Intelligenceが有効になっていません")
case .unavailable(.modelNotReady):
print("モデルの準備が完了していません。少し待ってから再度実行してください")
case .unavailable(let reason):
print("その他の理由で利用できません: \(reason)")
}
}
実行すると、以下のように「対応しています」と表示されました。

続いて、コンテキストサイズも確認してみましょう。
WWDCで紹介されていたコードを使います。
import Playgrounds
import FoundationModels
#Playground {
let model = SystemLanguageModel.default
print(model.contextSize)
}
結果は 8192 でした。Core3 Advancedなので、公称値どおりですね。

AFM3を呼んでみる
環境の確認ができたので、さっそくプロンプトを渡してみましょう。
試しに、Apple Intelligenceに今日の運勢を占ってもらいます。
import Playgrounds
import FoundationModels
#Playground {
let session = LanguageModelSession()
let response = try await session.respond(to: "今日の運勢を吉か凶で教えて")
print(response.content)
}

今日の運勢は吉のようです。よかった。
このように、FoundationModelsをimportしてプロンプトを渡すだけで、オンデバイスのモデルを呼び出せます。簡単ですね。
instructionsでシステムプロンプトを渡す
AFM3では、instructions を渡すことでシステムプロンプトを指定できます。やってみましょう。
import Playgrounds
import FoundationModels
#Playground {
let session = LanguageModelSession(instructions: "あなたは神社の神主です。厳かな感じで回答してください。")
let response = try await session.respond(to: "今日の運勢を吉か凶で教えて")
print(response.content)
}

ちゃんと厳かな口調になっていますね。身が引き締まります。
神の恵みは静けさの中にあるそうです。
画像を渡してみる
今回の目玉である、画像の入力を試してみましょう。
WWDCでは折り紙の鶴の画像を渡していましたが、私はあいにく鶴を折れるほど器用ではありません。
そこで、ちょうど手元にあった広島護國神社のおみくじの写真を渡してみます。

import AppKit
import Playgrounds
import FoundationModels
#Playground {
let session = LanguageModelSession()
let imagePath = "/path/to/IMG_9632.heic"
guard let nsImage = NSImage(contentsOfFile: imagePath),
let cgImage = nsImage.cgImage(forProposedRect: nil, context: nil, hints: nil) else {
print("画像の読み込みに失敗しました")
return
}
let response = try await session.respond {
"これは何?"
Attachment(cgImage)
}
print(response.content)
}

いいですね。ちゃんと「広島護國神社のおみくじ」だと認識してくれました。
まとめ
FoundationModelsをimportするだけでサクッと呼び出せるので、AFM3の実装は思ったより簡単でした。
次回以降は、ツールを渡したり、Private Cloud Computeを使ったりしてみたいと思います。









