はじめに
macOS 27 Golden Gate から、Apple Intelligence の基盤モデル(Foundation Models)をターミナルから直接利用できる fm コマンドが使えるようになりました。
デフォルトではオンデバイスのモデルが使われるため、APIキーやクラウドAPIの利用料金は必要なく、オンデバイスモデルへの推論もMac上で完結します。
とりあえず触ってみて、「文章やファイルを要約させる」ところまでやってみたので、使い方と気になった制約をまとめます。
環境
M4 Mac / macOS 27.0
fm とは
Foundation Models フレームワークの CLI です。fm --help で出てくるサブコマンドは次の 7つです。
| サブコマンド |
--help の説明 |
補足 |
|---|---|---|
available |
Check model availability | モデルが使えるか確認する |
chat |
Start an interactive chat session | 対話セッション |
count-tokens |
Count tokens in a prompt or instructions | プロンプトや指示のトークン数をカウントする |
license |
Show and agree to the Legal Notice & Terms | 初回に sudo 付きで 1回同意する |
respond |
Generate a response to a prompt | 1回投げて応答を得る。今回の主役 |
schema |
Generate a structured output generation schema |
--schema で渡す構造化出力用の JSON スキーマを作る |
serve |
Start a Chat Completions API server | OpenAI 互換のローカル HTTP サーバー |
モデルは既定で system(オンデバイスの Apple Foundation Model)が選択されます。
fm respond 'What is Swift?'
fm respond --stream 'Summarize this article'
fm chat --instructions 'You are a coding assistant'
fm count-tokens 'Hello world'
fm schema object --name Person --string name --int age
モデルは約30億パラメータで、Appleは要約・抽出・分類などを得意な用途として挙げています。一方、world knowledgeや高度な推論を目的としたモデルではないと説明されています。
初回セットアップ
はじめに利用規約を確認し同意する必要があります。
sudo fm license
fm available
System model available
まず一言投げてみる
fm respond 'chmod コマンドを3文で説明して'
chmod コマンドは、ファイルやディレクトリの権限を変更するために使用されます。
ユーザーが読み取り、書き込み、実行の権限を設定できます。
権限を変更することで、ファイルのアクセス許可を制御できます。
短い質問であれば数秒で答えが返ってきます。
文章を要約させる
指示は --instructions で渡し、要約したい本文は stdin で流します。
echo 'ここに要約したい文章を書く' |
fm respond --instructions '入力を日本語で3行の箇条書きに要約して'
ファイルを要約させる
ファイルなら cat で内容を stdin に流すだけです。
cat README.md | fm respond --instructions '入力の README を読んで、このツールが何をするものか日本語で3行にまとめて'
複数ファイルをまとめて要約するならループで回せます。
for f in docs/*.md; do
echo "## $f"
fm respond --instructions '入力を日本語で2行に要約して' < "$f"
echo
done > summary.md
気になった制約
プロンプトを引数で渡すと stdin が読まれない
手元の環境で試したところ、この形では stdin の本文は使われず、引数の文字列だけがプロンプトとして扱われました。
cat article.md | fm respond '要約して' # NG
本文をstdinで流すときは、指示を --instructions に置きます。
「--instructions がモデルへの指示、stdin が処理対象の本文」のように覚えると分かりやすいです。
cat article.md | fm respond --instructions '入力を要約して' # OK
コンテキストは 4096トークン
Apple の技術ノート TN3193 によると、オンデバイスモデルのコンテキストウィンドウは、1セッションあたり4096トークンです。指示やプロンプトだけでなく、生成される応答もコンテキストウィンドウを消費します。日本語はおおむね 1文字 1トークンです。
長めの記事を丸ごと投げると、次のように落ちます。
fm count-tokens "$(cat long_article.md)" # 長い記事
Token count: 25972
cat long_article.md | fm respond --instructions '3行で要約して'
Error: The session's transcript exceeded the model's context size.
長文に対して本格的に使うなら本文を分割して部分要約し、それをまとめ直す工夫が必要です。
まとめ
- オンデバイスモデルを使えば、ターミナルから文章やファイルを無料・オフラインで要約できる
- 本文は stdin、指示は
--instructions。プロンプトを引数にすると stdin は使われない - コンテキストウィンドウが4096トークンなので、長文をそのまま処理する場合は分割などの工夫が必要