エージェントと自動化

MacでAIに電話を取らせる:ai-phoneの導入と4B・9Bモデルの選択

メモリがモデルを決めます。16GBなら4B、32GBなら9Bを勧めます。

Apple SiliconのMacで音声認識・合成はローカルMLX1で動かし、通話のテキストだけをモデルに渡す構成です。setupは検出したメモリでモデルを選び、直近の通話遅延は中央値1.50秒でした。

実行条件と要点
  • Apple SiliconのMacでのみ動作し、音声認識・合成はMLXでローカル処理します。
  • setupはメモリを見てモデルを提案します。8GBは2B、16GBは4B、32GBは9Bです。
  • 直近のローカル通話では最初の音声まで中央値1.50秒で、1秒目標には届きませんでした。

Macが電話を取り、会話を続けます

ai-phoneはMacでSIP電話を受け、AIが通話を続けるプログラムです。相手の言葉を音声認識で文字にし、言語モデルが返答を決め、音声合成がそれを読み上げます。この3段階が通話中に繰り返されます。

音声認識はParakeet、音声合成はPhononかKokoroをMLXで動かします。返答を作るモデルだけを、ローカルMLXモデル・Claude Code/Codexサブスクリプション・OpenAI互換エンドポイントから選べます。リモートモデルを選ぶと通話のテキストと指示が送信されます。

小型コンピューターからブラウザー、カレンダー、チャット画面へ線が伸びている
通話1件で音声認識・モデル・合成が順に動きます。

必要なのはMacとSIP回線です

Apple SiliconのMac、Git、Homebrew、uvが必要です。インストーラがPythonパッケージとSIPライブラリを用意します。Intel Mac、Linux、Windowsは未対応です。

電話を受けるにはSIPアドレス、SIPトランク、Telnyx・Twilioのアカウントが必要です。相手が普通の携帯電話でも通話はSIPで接続され、通話料は回線事業者の料金で発生します。発信だけなら必要なときに起動し、終わったら停止します。

導入とモデル選択の手順

リポジトリを取得してインストールスクリプトを実行し、setupを開始します。setupは着信か発信か、どの回線と声を使うかを尋ね、検出したメモリに合うモデルを提案して重みをダウンロードします。モデルファイルに数GBの空きが必要です。

既定は4Bモデルで、9Bを選ぶとメモリを多く使います。8GBのMacには2Bモデルが提案されます。setupを再実行すると回線・声・モデルを変更でき、変更後はデーモンを再起動します。

メモリ容量別の推奨モデル
メモリ推奨モデル用途
8GB2B短い通話、メモリに余裕がない場合
16GB4B(既定)標準構成
32GB9B長い会話、より良い文
install
git clone https://github.com/oxnw/ai-phone.git
cd ai-phone
./scripts/install.sh
uv run ai-phone setup
uv run ai-phone run
setupで回線とモデルを選び、runで着信待ちを始めます。

発信と着信の方法

発信はプロンプト21行で始まり、通話が終わると会話記録が返ります。発信時はAIが話すという開示から始まります。

エージェントが1ターンずつ操作するにはrelayモードを使います。callで接続し、sayとlistenを交互に呼べばモデルなしでも通話を進められます。応答がないターンは25秒で終了します。

call
uv run ai-phone call +15555550100 --json \
  --prompt "Ask whether they have a table for two at eight tonight."
番号は国番号を含めて入れ、プロンプトに通話の目的を書きます。
ノートPCの前の人物の周りに、文書・表計算・フォルダー・画像・設定画面と小さなロボットがつながっている
setupが検出したメモリでモデルを選ぶため、Macはメモリを先に見ます。

最初の音声まで1.50秒、1秒目標には届かず

このプロジェクトの直近のローカル通話測定では、最初の聞こえる応答まで中央値1.50秒でした。メモリ圧迫が大きい条件で、1秒目標には届いていません。相手の発話が終わってから、生成と合成を経て再生されるまでの時間です。

通話遅延はモデルサイズとメモリの余裕に左右されます。32GBのMacで9Bを使うと文は良くなりますが、最初の音声は遅れることがあります。短い予約・確認の通話なら4Bで始め、実際の通話で遅延を測るのが安全です。

英語通話のみ、同時に1件

現在の対応範囲は英語と同時1通話です。韓国語の通話には音声認識・合成・モデルのすべてを韓国語に替える必要がありますが、このプログラムはその構成を標準では提供していません。

コードはAGPL-3.0-or-later、同梱のPJSIPインターフェースはGPLv2-or-laterです。回線事業者の料金やサブスクリプションの上限は別途かかります。常時着信にはMacを起動したままデーモンを動かします。

ユーザーがデスクトップの進行状況と文書処理画面を見ている
回線やモデルを変えたら、デーモンを再起動すると反映されます。

用語の注釈

  1. MLX — Appleが開発する機械学習フレームワークで、Apple SiliconのCPUとGPUが共有するメモリを使ってモデルを実行します。

    本文に戻る
  2. プロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
Apple SiliconのMacで音声認識・合成はローカルMLXで動かし、通話のテキストだけをモデルに渡す構成です。setupは検出したメモリでモデルを選び、直近の通話遅延は中央値1.50秒でした。
必要なメモリはどのくらいですか?
リポジトリを取得してインストールスクリプトを実行し、setupを開始します。setupは着信か発信か、どの回線と声を使うかを尋ね、検出したメモリに合うモデルを提案して重みをダウンロードします。モデルファイルに数GBの空きが必要です。