
【iOS 27】AI にツールを持たせる — OCRTool・バーコード・端末内検索
はじめに
こんにちは。リテールアプリ共創部の Yahiro です。
iOS 27 では、Foundation Models にシステムツールが3つ追加されました。AI に「ツール」を渡しておくと、必要になったときに AI が自分で呼び出してくれる、という仕組みです。
今回は、それについて記載していきます。
この記事でわかること
- 「ツールを持たせる」とは何をすることなのか
- iOS 27 で用意された3つの標準ツール
- 端末の中を検索して答えるという使い方
- ツールにも枠(コンテキスト)を使うということ
「ツールを持たせる」とは
これまでの作り方だと、たとえばレシートの画像から合計金額を取り出すには、こういう段取りをアプリ側で書く必要がありました。
iOS 27 では、こうなります。
「このレシートの合計金額は?」と聞けば、AI が「文字を読む必要がある」と判断して、自分で読み取ります。
コードで見ると、こうなります。
import FoundationModels
import Vision
let session = LanguageModelSession(tools: [OCRTool()])
let response = try await session.respond {
"このレシートの合計金額は?"
Attachment(image)
}
いつどのツールを使うかはモデルの判断です。
iOS 27 で用意された3つのツール
| ツール | できること |
|---|---|
OCRTool |
画像の中の文字を構造化されたテキストとして取り出す |
BarcodeReaderTool |
バーコードや QR コードを読み取り、内容と種別を返す |
SpotlightSearchTool |
アプリが Spotlight に登録したデータを AI が探して、それを根拠に答える |
上の2つは Vision フレームワークが裏で動いています。アプリ側で OCR の実装を持つ必要がなくなるということです。Vision の文字認識は現在 26 言語に対応しています。
いちばん大きいのは「端末の中を検索して答える」
AI に「最新の情報」や「うちの社内の情報」を答えさせるには、その情報を探して渡す仕組みが要ります。一般には RAG と呼ばれる作りですね。
iOS 27 では、端末の中で完結する形でこれが用意されました。Spotlight のインデックスを AI が検索して、その結果を根拠に答えます。
こちらも、渡し方は同じです。
import CoreSpotlight
import FoundationModels
let session = LanguageModelSession(tools: [SpotlightSearchTool()])
let response = try await session.respond(to: "去年行ったハイキングはどれ?")
端末の中のモデルと組み合わせれば、社内文書やアプリ内のデータを、外に出さずに「聞ける」ようになります。
ただし、事前に Spotlight への登録が必要です
AI が探せるのは、アプリが Spotlight に登録したコンテンツだけです。端末に入っているものが何でも引けるわけではありません。その方法は別の記事にまとめる予定です。
ツールの説明も枠を食う
ツールをモデルに持たせるとき、「このツールは何ができて、どう呼ぶか」という説明もプロンプトと同じ枠に入ります。 ツールを増やすほど、本文に使える枠が減ります。
とくに端末内検索はできることが多いので、説明も大きくなります。SpotlightSearchTool は検索能力の一式をまるごとモデルに提示するため、Apple 自身が「オンデバイスモデルはコンテキストが小さいので、絞ったガイダンスを使うのがよい」と説明しています。
この辺は、別の記事でまたまとめようと思います。
- ツールは必要なものだけ持たせる。 「あれもこれも」はオンデバイスでは成立しにくい
- 大きいツールは絞る。 全部入りのまま使わない
- 必要な場面だけ持たせる。 全部持たせない
自分でツールを作ることもできます
標準の3つ以外に、自作のツールも渡せます。
作り方は Tool プロトコルに準拠した型を用意するだけですが、ポイントはツールに書いた説明文が、そのままモデルに渡るという点です。
struct WeatherTool: Tool {
let name = "getWeather"
let description = "指定された都市の天気を返す"
// 引数の定義と、呼ばれたときの処理が続く
}
description と、引数に付ける説明を読んで、AI が「このツールを使うべきか」「どんな引数で呼ぶか」を判断します。裏を返すと、この説明が長いほど枠を食います。 自作のツールは説明を自分で書けるので、小さく作れば消費も小さく済みます。
実装の詳細は、別の記事で扱います。
まとめ
「読み取る」ならツール、「様子を判断する」なら画像入力。 文字や商品コードのように正確さが要るものは、ツールに任せるほうが確実です。
ツールを持たせるほど枠が減る。 扱いたいデータ量と、持たせたいツールの数は、トレードオフになります。
AI がいつツールを使うかは、確実ではありません。 ツールを使うかはAIが判断するので、持たせ方や制御は考える必要があります。
最後に
ツールを持たせることで、AIに多彩な動きをさせることができます。これらはコンテキスト量を考えながら実装しないといけないので、次回以降の記事で実際に検証してみようかなと思います。







