0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オンデバイスAIのmacOSアプリに、JSONだけで拡張できるTool機能を作った

0
Posted at

オンデバイスAIのmacOSアプリに、JSONだけで拡張できるTool機能を作った

macOS向けのデスクトップペット兼リマインダーアプリ、Mushroomを開発しました。

Mushroomは、デスクトップに住む小さなピクセルアートのきのこです。水分補給やストレッチ、目の休憩などを知らせるほか、Apple Intelligenceを使った会話や、自然言語によるリマインダー作成ができます。

この記事では、機能紹介だけではなく、Mushroomに実装した小さなJSONファイルによるTool拡張と、その安全性の考え方を紹介します。

オンデバイスで完結する会話機能

Mushroomの会話機能にはApple Intelligenceを利用しています。処理はMac上で完結し、アカウント登録は不要です。会話内容もクラウドへ送信しません。

デスクトップ上で日常的に話しかけるアプリには、仕事や生活に関する情報が入力される可能性があります。そのため、利便性を追加する前に「入力内容を外部へ持ち出さない」という境界を決めました。

自然言語で、たとえば次のように依頼できます。

2時間後にTomへ電話するよう知らせて

Mushroomは依頼を解釈してリマインダーを作成し、時間になると知らせます。英語、ドイツ語、フランス語、スペイン語、日本語に対応しています。

会話を拡張するTool plugins

会話機能をアプリ本体のアップデートだけに依存させず、小さな機能を追加できるようにしたのが「Tool plugins」です。

プラグインの実体はJSONファイルです。ランダムな猫の豆知識を取得するToolは、次の内容だけで動作します。

{
  "name": "catFact",
  "description": "Fetches a random cat fact. Use when the person asks about cats or wants a fun fact.",
  "url": "https://catfact.ninja/fact",
  "extract": "fact"
}

各フィールドの役割はシンプルです。

フィールド 役割
name Toolを識別する名前
description どのような依頼でToolを使うかをAIへ伝える説明
url 呼び出すHTTPS API
extract APIレスポンスから会話へ渡す値

このファイルを「Settings → Tools」から読み込むか、Toolsフォルダへ配置すると、きのこに猫の豆知識を聞けるようになります。

なぜコードを実行できるプラグインにしなかったのか

拡張機能を自由にしすぎると、ユーザーは「このファイルを読み込んで大丈夫か」を判断しにくくなります。

そこでMushroomのToolは、次のように機能を制限しています。

  • 実行できるのはHTTPSリクエストのみ
  • ローカルのプログラムは実行できない
  • Mac上のファイルにはアクセスできない
  • APIキーなどの個人値はMac上に保持する
  • Toolを書き出すときは個人値を除去する
  • 同時に有効にできるToolは最大4個

万能なプラグイン基盤を目指すより、一つのJSONに一つの小さな役割を持たせる設計にしました。

制約は少し不便ですが、ファイルを開けば何をするToolなのか確認しやすくなります。共有もしやすく、問題が起きたときの範囲も限定できます。

descriptionを「機能説明」だけにしない

Toolのdescriptionには、機能の説明だけでなく、使う条件まで具体的に書きます。

Use when the person asks about cats or wants a fun fact.

「何ができるか」に加えて「どんな依頼で使うか」を明示すると、会話からToolを選ぶための手がかりになります。

複数の用途を一つの賢いToolに詰め込むより、小さなToolへ分割した方が、説明も出力も予測しやすくなります。また、extractを必須にしてAPIレスポンス全体ではなく、必要な文字列だけを会話へ渡すようにしています。

リマインダー側でも「賢さ」より境界を重視した

Mushroomは、水分補給、ストレッチ、軽食、目の休憩、就寝時間などを知らせます。ただし、単純な一定間隔のタイマーではありません。Macを実際に使っていた時間を考慮し、離席中や静かに過ごしたい時間帯には通知を控えます。

macOSの集中モード中はペットが目立たない状態になり、メニューバーに常駐してDockにはアイコンを出しません。

ここでも、機能を増やすことより「いつ介入しないか」を決めることが重要でした。

まとめ

Mushroomでは、オンデバイスAIを使った会話に、JSONベースの小さなTool機構を組み合わせました。

今回の設計で重視したのは次の3点です。

  1. 会話内容をMacの外へ持ち出さない
  2. ToolができることをHTTPSリクエストに限定する
  3. 一つのToolに一つの小さな役割を持たせる

Toolギャラリーではサンプルを配布しており、自作Toolの投稿も受け付けています。オンデバイスAIや、制約のあるプラグイン設計に興味があれば試してみてください。

動作環境は、macOS 26以降、Apple Silicon、Apple Intelligence有効です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?