日記データとローカルLLMを組み合わせて何かできないか考えているが、Foundation Models の adapter training は日々更新される情報の追加学習には向いていない(し、そもそもユーザー生成データを学習させることもできない)。文書データと相性が良さそうな RAG を iOS でうまいこと活用できないか ChatGPT に壁打ちしていたら、Core Spotlight によるセマンティック検索が有効と教えてくれたので、去年の WWDC セッションビデオを見てみた。
完全一致でなくともある程度文脈を汲み取ったコンテンツ検索ができるようで、さすが Spotlight 技術なのでバッチ更新も可能だし、Core Spotlight でアプリ内から検索処理が行えるのなら、Foundation Models に tool calling 経由で自律的に検索させることができるだろうか?
0:00 – Introduction
- CoreSpotlight フレームワークでアプリ内に強力な検索体験を構築する新しい API を紹介
- セマンティック検索により、意味的に類似した検索語でも適切な結果を取得可能
- 完全にローカルでプライベートな検索インデックスを提供
- ジャーナルのエントリ検索アプリを例に、検索体験の構築方法を説明
1:37 – Searchable content
- 検索可能なコンテンツを設計 → 検索インデックスを構築 → Spotlight に提供
CSSearchableItemにuniqueIdentifier,domainIdentifier,attributeSetを設定CSSearchableAttributeSetでcontentType,title,textContent,contentURLを設定し、セマンティック検索に最適化- アイテムが画像、動画アセットの場合は、アセットへのパスを
contentURLに指定 - 添付ファイルやWebコンテンツへの参照は、独自のコンテンツタイプと属性をインデクスに提供
- ソースアイテムとの関係に
relateUniqueIdentifierを指定
- アイテムが画像、動画アセットの場合は、アセットへのパスを
- バッチインデックス作成と client state で効率的な Spotlight への提供を実現
item.isUpdateを使い、すでにインデックス済みの属性上書きを防ぎ、必要なものに限り提供可能
4:10 – Migration and Recovery
- 移行と復元:一貫性を維持するために重要
- なんらかの問題で移行と復元を要する場合、Spotlight がアプリに際インデックス化を要求
- CoreSpotlight Delegate extension で Spotlight からの再インデックス要求に対応
- Spotlight はアプリとは別にこの Extension を呼び出すことができる(デバイスがアイドル状態の時にバックグラウンドで再インデックスを実行)
mdutilツールでデバッグとテストが可能
6:56 – Results and suggestions
CSUserQueryContextでクエリを設定し、セマンティック検索を有効化- ランク付けされた結果とサジェスションを取得、最大結果数も指定可能
- メタデータ構文でフィルタクエリを構築し、結果をカスタマイズ
- 検索結果をUIにに合わせる最適な手法(e.g. 画像のみ表示時は画像のみとするようクエリ指定)
- 検索バーからのクエリ文字列とクエリコンテクストから
CSUserQueryを生成 - 非同期バッチで結果を取得し、
compareByRankでソート- 候補(
CSSuggestion)は入力文字列の補完として返却
- 候補(
- セマンティック検索はプロセスに必要な学習モデルのダウンロードが必要
- ロード・アンロードでメモリ容量を節約(
CSUserQuery.prepare,.prepareWithProtectionClassesを検索UI表示時に実行)
- ロード・アンロードでメモリ容量を節約(
9:18 – Ranking
- エンゲージメントと鮮度のシグナルでランキングを改善
lastUsedDateプロパティでコンテンツの使用頻度を記録- ユーザーの検索行動(閲覧、スクロール、詳細表示)を追跡
- 適応的なランキング体験でユーザーが最も関心を持つコンテンツを優先表示
10:17 – Wrap-up
- CoreSpotlight で完全にプライベートなオンデバイス検索インデックスを構築
- セマンティック検索により、より強力で直感的な検索体験を提供
- 複数プラットフォームとロケールに対応した多様なコンテンツ検索を実現
- App Intents や CoreData との統合でさらなる検索機能を拡張
「WWDC24:Support semantic search with Core Spotlight」への3件のフィードバック