【ITニュース解説】Teaching our on-device assistant to say "I don't know"
2026年09月21日に「Dev.to」が公開したITニュース「Teaching our on-device assistant to say "I don't know"」について初心者にもわかりやすく解説しています。
ITニュース概要
FamiliaSyncは、デバイス完結型AIアシスタントを開発。手書きルールをAI分類器に置き換え、対応できない質問も学習させた。これにより、アシスタントは不明な時に「わからない」と答え、情報を聞き返す対話型に進化。すべて端末内で処理し、プライバシー保護と信頼性を向上させた。
ITニュース解説
FamiliaSyncは、家族のためのオーガナイザーアプリであり、その最大の特徴は、全てのデータがユーザー自身のデバイス上で暗号化されて保持される「オフラインファースト」であることだ。この設計思想は、アシスタント機能にも適用されており、どんな問い合わせもデバイス内で完結し、外部のクラウドサービスに接続することはない。これは、ユーザーのプライバシーを最優先する設計思想を貫いていることを意味する。
アシスタントの機能は、従来の手書きで作成されたパターンルールではなく、現在では「オンデバイスの意図分類器」と呼ばれる小さなプログラムが担っている。この意図分類器は、ユーザーが入力したテキストが何を意味するのかを判断し、適切な処理へと導く役割を果たす。具体的には、ユーザーのテキストをアプリ内の特定の機能(ツール)に振り分けるか、より高度な判断が必要な場合は、アプリに組み込まれている「Needle 2」というオンデバイスのモデルに処理を委ねる。
この意図分類器を賢くするために、開発者たちは訓練データを作成した。これは、自動生成されたものではなく、手作業で調査・吟味されたものだ。合計105種類の「意図」が定義され、それぞれ約2,400の例文が与えられた。これらの例文には、具体的なコマンドに必要な情報、例えば「日付」「時刻」「担当者」「数量」「金額」「カテゴリー」「繰り返し」といった要素が含まれており、これらは「スロット」と呼ばれている。105の意図のうち35は、アプリ内の具体的な機能、例えば「イベントを追加する」や「買い物リストを更新する」といったツールに直接対応している。
しかし、このアシスタントを本当に賢くするために最も重要だったのは、「できないこと」を教えることだったという。残りの70の意図は、アシスタントがまだ実行できない機能、例えば「メモを取る」や「店舗情報を検索する」といったものに対応している。これらの「ノーケース」を訓練データに含めることで、ユーザーが対応できないリクエストをした際に、アシスタントがそれを無理やり既存の機能に当てはめるのではなく、「それはまだできません」といった自然な言葉で回答できるようになる。つまり、「できること」を教えるのと同じくらい、「できないこと」を認識させることが、アシスタントの信頼性を高める上で不可欠だったのだ。
意図分類器には「信頼度ゲート」と呼ばれる仕組みも設けられている。これは、分類器がユーザーの意図を判断する際に、十分な確信を持てない場合に、安易にツールに振り分けることを避けるためのものだ。確信が低い場合、分類器はルーティングを行わず、代わりに「Needle 2」モデルがより柔軟な判断を試みる。この全てのプロセスはデバイス上で完結し、意図分類器の訓練も、ユーザーからの問い合わせの処理も、全てローカルで行われるため、データがデバイス外に出ることは一切ない。
この意図分類器を導入することは比較的容易だったが、実際のユーザーからの問い合わせによって、すぐに課題が浮上した。リリースから数時間で、3つの誤ったルーティングが見つかったのだ。
例えば、「what are todays plan」(今日の予定は何か)という問い合わせは、分類器の信頼度しきい値を下回ったため、モデルに処理が委ねられた。しかし、モデルはプロンプト内の家族の名前から「Sri, Ram」という架空の食事を生成してしまった。この問題から、開発者は不要なキーワードを削除し、「today's plan」のようなフレーズがイベントリストの表示に正しくマッピングされるように修正した。
別の例では、「what is my meal plan for today」(今日の献立は何か)という問い合わせが、誤って買い物リストを作成するツールに高い確信度でマッチしてしまった。これは、買い物リストを上書きしてしまう可能性があったが、幸いにも最終確認のステップで阻止された。この件を受け、買い物リストを生成するツールには、ユーザーからの明示的な「生成」の指示が必要になり、訓練データには質問形式の例文が追加された。また、食事プランの回答が、生のレコードIDや一週間分のデータとして表示されてしまうという問題も明らかになったため、回答は食事の名前で表示され、「今日」や「ランチ」といったフィルターが適用できるように改善された。
これらの課題を通じて、アシスタントはさらに進化を遂げた。最大の変化は、アシスタントが「ユーザーに質問を返す」ようになったことだ。例えば、「リマインダーを作成」と指示すると、アシスタントは推測で何かを登録するのではなく、「何をリマインダーしますか?」と具体的な情報を尋ねる。そして、ユーザーの返答に基づいてアクションを完了する。これにより、ツールは情報が不足している場合に会話の流れの中で必要な引数を要求できるようになり、部分的に収集された情報は会話の次のターンにも引き継がれるようになった。
アシスタントが質問を返すようになると、それまで気づかなかった課題が明らかになった。ユーザーは日付を「friday 6pm」(金曜日の午後6時)や「tonight」(今夜)、「19th spetember 2026」(2026年9月19日)といった様々なカジュアルな形式で回答するため、日付を解析するパーサーは、誤字にも対応できるような柔軟な形式を処理できるよう改良された。また、担当者を尋ねた際に「anyone」(誰でも)や「doesn't matter」(関係ない)といった返答があった場合、イベントは自動的に特定の家族メンバーに割り当てられるのではなく、未割り当てで作成されるようになった。これは、アシスタントが勝手に判断するのではなく、ユーザーの意図を尊重する設計への転換を示している。
最終的に、一連の修正と機能追加は短期間で実現された。意図分類器の導入、発見された誤ルーティングの迅速な修正、そしてユーザーに質問を返す会話型アシスタントの実現まで、これら全てがデバイス上で完全に動作している。さらに、設定画面のコピーも4つの言語に対応が完了した。この開発プロセスを通じて、開発チームは「知らないことを知っているアシスタントは、常に推測するアシスタントよりも信頼できる」という重要な教訓を得た。全ての問い合わせがユーザーのスマートフォン内で処理されるというFamiliaSyncの核となる目的は、これらの改善によってさらに強化されたのだ。